2016-09-29 48 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

我已經修正了這個問題,以更好地說明我在找什麼 –