powershell - 保持变量私有,但仍然在函数中使用它
问题描述
我有一个 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})
解决方案
我建议创建一个公共功能,将其环绕Publish-Module
并设为$NuGetAPIKey
私有。这样,您可以隐藏密钥,其他人无法访问它,但他们仍然可以访问Publish-Module
呼叫。
就像是
Function Publish-Module{
param($path, $nugetapikey, $credential, $formatversion)
}
以此类推(如果需要,您还可以添加所需的类型和默认值。然后,您可以检查$NuGetApikey
是空还是空,如果是,则为其分配键。
推荐阅读
- node.js - 无法将 Angular 应用程序部署到 openshift:“参数错误,options.body。”
- powerapps - 显示模式下的复选框值 = 查看和编辑 PowerApps
- java - SonarLint Eclipse Extension 将包 src/company/projects/web... 中的 Java 文件视为测试
- matlab - 在应用程序设计器中提取绘制线坐标
- python - DecisionTreeRegression 提供 100% 的训练准确度,但在测试集中失败
- python - AWS Glue - Python Shell 作业 Secret Manager 连接问题
- cordova - 不能使用 ionic 和 form - 得到指令代理错误
- node.js - 从 MongoDB 返回 json
- python - 无法将字符串添加到 Python 中的字符串类型变量
- bokeh - Holoviews 活动工具配置和数据着色器布局