我有一个NuGet存储库,我想避免去存储我的API密钥的地方,将其复制,再回到Powershell中,然后粘贴它。我决定将密钥存储在变量中,这样就可以将-NuGetAPIKey $ NuGetAPIKey传递给Publish-Module而不是整个密钥。
我既不想在我的profile.ps1中以纯文本形式定义我的API密钥,也不想以纯文本形式带有文本文件,所以我定义了一个采用加密版本的变量$ NuGetAPIKey的API密钥,将其转换为安全字符串,然后使用PSCredential对其进行解密。
但是,我的问题是,这可能是一个必要的弊端,如果您键入$ NuGetAPIKey,Get-Variable或任何其他返回变量的函数,则该API就在用户面前。 / p>
是否可以隐藏它,但仍可以通过Publish-Module函数使它可用?显然,如果我将变量设为私有,则该函数无法读取它,所以这是不可能的。
这是我profile.ps1中执行魔术的那一行:
Set-Variable -Name "NuGetAPIKey" -Value (Get-Content 'U:\My Documents\NuGet\APIKey' | ConvertTo-SecureString | ForEach-Object{(New-Object System.Management.Automation.PSCredential 'N/A', $_).GetNetworkCredential().Password})
答案 0 :(得分:0)
您可以将密码存储在加密文件中 $ credPath ='C:\ temp \ somesecret.txt' $ credential =获取凭据的“ Api密钥”
$credential.Password | ConvertFrom-SecureString | Set-Content $credPath
然后您可以读出密码。我已经展示了如何以明文形式获取机密,但您可能希望将其作为安全字符串保存
$somesortofsecret = Get-Content $credPath | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PsCredential 'api', $somesortofsecret
$credential.GetNetworkCredential().Password
答案 1 :(得分:0)
我建议创建一个围绕Publish-Module
的公共函数,并将$NuGetAPIKey
设为私有。这样,您可以隐藏密钥,没有其他人可以访问它,但是他们仍然可以访问Publish-Module
呼叫。
类似
Function Publish-Module{
param($path, $nugetapikey, $credential, $formatversion)
}
,等等,并带有参数(如果需要,您还可以添加必需值,类型和默认值。然后可以检查$NuGetApikey
是否为空或为空,并为它分配密钥。