首页 > 解决方案 > 保持变量私有,但仍然在函数中使用它

问题描述

我有一个 NuGet 存储库,我想避免去我存储 API 密钥的地方,复制它,回到 Powershell,然后粘贴它。我决定将我的密钥存储在一个变量中,这样我就可以将 -NuGetAPIKey $NuGetAPIKey 传递给 Publish-Module 而不是整个密钥。

我不想在我的 profile.ps1 中以明文形式定义我的 API 密钥,也不想在明文中包含它的文本文件,所以我定义了一个变量 $NuGetAPIKey,它采用我的 API 的加密版本密钥,将其转换为安全字符串,然后使用 PSCredential 对其进行解密。

然而,我的问题是,如果你键入 $NuGetAPIKey、Get-Variable 或任何其他返回变量的函数,它可能只是一个必要的问题,API 就在用户面前。

有没有办法隐藏它,但仍然可以让 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})

标签: powershell

解决方案


我建议创建一个公共功能,将其环绕Publish-Module并设为$NuGetAPIKey私有。这样,您可以隐藏密钥,其他人无法访问它,但他们仍然可以访问Publish-Module呼叫。

就像是

Function Publish-Module{
    param($path, $nugetapikey, $credential, $formatversion)
}

以此类推(如果需要,您还可以添加所需的类型和默认值。然后,您可以检查$NuGetApikey是空还是空,如果是,则为其分配键。


推荐阅读