保留变量私有但仍在函数中使用

时间:2018-12-19 19:47:25

标签: powershell

我有一个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})

2 个答案:

答案 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是否为空或为空,并为它分配密钥。