2016-09-29 49 views
0

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

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

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

有没有更合适的地方我可以存储这些数据? (当会话关闭,将获得擦拭)

ETA

我正在寻找一个替代品在全球范围内存储数据,不会跨越PowerShell会话持续。即当我关闭窗口时,数据丢失。我已经在磁盘上加密了数据,我想在会话结束时丢弃加密密钥。

+0

你可以尝试注册表 –

+0

@KirillPashkov,将有同样的问题,因为文件系统,它是不是抹在会议结束 - 所以这将是可能得到的注册表项,并解密文件。 –

+0

使用'Export-CliXML':[“Export-CliXml cmdlet使用Windows Data Protection API加密凭证对象,这可以确保只有您的用户帐户才能解密凭证对象的内容。”](https:// technet .microsoft.com/en-us/library/hh849916.aspx) – TessellatingHeckler

回答

0

您可能想要将凭据保留在变量中(可能是$ script:范围一)。我希望前段时间为此建立一个功能。

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 
} 
+0

我已经修正了这个问题,以更好地说明我在找什么 –