PowerShell全局范围的替代方案

时间:2016-09-29 12:28:21

标签: powershell

我正在PS中编写一个缓存用户提供密码的函数。它通过加密密码并将其保存到磁盘,然后将加密密码和密钥保存为全局变量中的安全字符串来实现。这样,下次调用该函数时,它将可以访问该键。 x分钟后,作业将从磁盘中删除该文件,如果会话已关闭,则加密密钥将丢失。

通过我的代码运行PSScriptAnalyzer它(正确地)抱怨使用全局变量。这是一个问题,因为在某些时候我很想将其推送到存储库,所以我不能忽略该错误。

我也不想将密钥保存到磁盘,因为在PS会话结束时无法清除密钥。

我可以存储这个数据的更合适的地方吗? (当会话结束时会被擦除)

ETA

我正在寻找在全球范围内存储数据的替代方案,这种方式不会在PowerShell会话中持续存在。即当我关闭窗口时数据丢失。我已经在磁盘上加密了数据,我希望在会话结束时丢弃加密密钥。

1 个答案:

答案 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
}