2012-06-24 77 views
2

假設我有一個自定義的PowerShell Cmdlet,它導出數據並使用密碼對其進行加密。如何安全地處理自定義書面PowerShell cmdlet中的密碼?

[Cmdlet(VerbsData.Export, "SampleData")] 
public class ExportSampleData : PSCmdlet 
{ 
    [Parameter(Mandatory = true)] 
    public string Password 
    { 
     get; 
     set; 
    } 

    /* additional parameters */ 
} 

如何妥善處理密碼安全?例如,我想阻止管理員在控制檯中輸入值時顯示值。其他選項包括讀取包含加密密碼的文件。

我知道PSCredential,但這需要一個用戶名,在這種情況下沒有任何意義。

+0

你是怎麼最終使用它?我有類似的問題。 –

+0

標記的答案。 – bloudraak

回答

3

如果你只是想獲取密碼,你可以用

Read-Host cmdlet與–asSecureString參數。

此參數掩碼輸入。

1

你可以在this answer中找到一種用計算機密碼(在安全機器上工作)的方法。

使用@Christian響應你可以把密碼盤是這樣的:

PS > $cred.Password | ConvertFrom-SecureString | Set-Content c:\temp\password.txt 

而且隨着retreive它:

$password = Get-Content c:\temp\password.txt | ConvertTo-SecureString 
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password 
+0

一旦我有密碼,這很有用。 – bloudraak

1

更改密碼參數SecureString的類型;如果管理員省略-Password參數,則PowerShell將通過提示管理員輸入必需參數並顯示astrisks來做正確的事情。

理想情況下,您的cmdlet的實現會將SecureString傳遞給本地支持SecureString的一些API(最安全);如果沒有,你將不得不從SecureString提取密碼。這裏有一篇關於如何實現的好文章:How to properly convert SecureString to String

1

如果您正在編寫C#PowerShell Cmdlet,並且其中一個參數需要用戶輸入密碼,則應該對其進行模糊處理。

要做到這一點,你必須using System.Security;

然後你的參數類型應該是SecureString

因此,使用你的例子:

[Cmdlet(VerbsData.Export, "SampleData")] 
public class ExportSampleData : PSCmdlet 
{ 
    [Parameter(Mandatory = true)] 
    public SecureString Password 
    { 
     get; 
     set; 
    } 

/* additional parameters */ 
} 
相關問題