我正在PS中编写一个缓存用户提供密码的函数。它通过加密密码并将其保存到磁盘,然后将加密密码和密钥保存为全局变量中的安全字符串来实现。这样,下次调用该函数时,它将可以访问该键。 x分钟后,作业将从磁盘中删除该文件,如果会话已关闭,则加密密钥将丢失。
通过我的代码运行PSScriptAnalyzer它(正确地)抱怨使用全局变量。这是一个问题,因为在某些时候我很想将其推送到存储库,所以我不能忽略该错误。
我也不想将密钥保存到磁盘,因为在PS会话结束时无法清除密钥。
我可以存储这个数据的更合适的地方吗? (当会话结束时会被擦除)
ETA
我正在寻找在全球范围内存储数据的替代方案,这种方式不会在PowerShell会话中持续存在。即当我关闭窗口时数据丢失。我已经在磁盘上加密了数据,我希望在会话结束时丢弃加密密钥。
答案 0 :(得分:0)
您可能希望将凭据保留在变量中(可能是$ script:scope 1)。我刚刚为此建立了一个功能。
function Set-Credentials
{
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true,ValueFromPipeline = $true,Position = 0)][ValidateNotNull()][String]$UserName,
[Parameter(Mandatory = $false,ValueFromPipeline = $true,Position = 1)][ValidateNotNull()][String]$UserPassword
)
if (-not$UserPassword)
{
$Password = Read-Host -Prompt "Specify password for $UserName" -AsSecureString
}
else
{
$Password = (ConvertTo-SecureString -String $UserPassword -AsPlainText -Force)
}
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList @($UserName, $Password)
Write-Output -InputObject $Credentials
}