2012-12-21 71 views
0

所以基本上我想要寫一個PowerShell腳本將出口價值爲Windows服務器備份備份日誌的最後1天,格式化信息成一個可愛的小桌子,然後SMTP發送它到客戶本地Exchange外部的外部位置。我有一個可用於此目的的智能主機,以及憑證等。我如何避免保存用戶名和密碼在PowerShell腳本

但我不想以純文本形式在Powershell中存儲UN和密碼,或讓腳本以純文本形式運行憑據。

有沒有辦法解決這個問題?

乾杯!

+0

你打算如何運行它?手動,作爲計劃任務?有了手冊,你可以要求輸入(並使用'-assecurestring'來「隱藏」密碼輸入)。使用任務計劃程序,您可以分配憑據來運行作業/任務,因此只需在配置時輸入您的帳戶信息即可。考慮創建一個非個人帳戶,對這樣的腳本擁有有限權限。 –

+3

請參閱此SO問題的答案:http://stackoverflow.com/questions/13842611/how-to-pass-credentials-to-rename-command/13844113#13844113 –

回答

0

我設法通過採取密碼作爲安全字符串,並將其保存,作爲一個「加密的標準字符串」到一個文件名爲類似避開類似的問題「帳戶用戶 .pwd」,其中帳戶是與密碼關聯的帳戶的名稱,並且用戶是生成安全字符串的用戶(只有該用戶才能夠解密該文件)。

這非常類似於@Keith使用,如果你按照上面的問題本身在他的評論的鏈接方式。下面的方法更容易遵循,因爲它不直接與[System.Runtime.InteropServices.Marshal]類相關。

從文件的內容轉換的密碼後面是更多地參與,但在這裏是通過工藝步驟的例子:

# Create credential object by prompting user for data 
$Credential = Get-Credential 

# Encrypt the password to disk 
$Credential.Password | ConvertFrom-SecureString | Out-File Account.User.pwd 

# Now to read it back again... 
$SecureString = Get-Content Account.User.pwd | ConvertTo-SecureString 

# Create credential object programmatically 
$NewCred = New-Object System.Management.Automation.PSCredential("Account",$SecureString) 

# Reveal the password! 
$NewCred.GetNetworkCredential().Password 

思考這個辦法:

  1. 抵制誘惑在最後一步將密碼轉儲到變量中,以防止其在內存中以明文方式懸停(直到變量被丟棄)。每次從PSCredential進行轉換都不需要花費太多打字費用。
  2. 只有生成該文件的用戶才能讀取它;如果多個用戶需要訪問共享帳戶的密碼,則每個用戶都必須生成這樣的文件(因此建議使用文件命名)。
  3. 這不需要僅限於密碼。您想要加密到磁盤的任何字符串都可以用作原始憑證對象中的「密碼」。數據庫連接字符串,尤指那些使用用戶名和密碼的人,想起​​...
  4. 使用文件系統安全性/ ACL將不需要的人員從pwd文件中刪除。
  5. 使用密碼在磁盤上創建文件,即使它是一個加密的字符串,可能不符合人們的喜好。短期使用第三方密碼管理系統,這是使用文件系統的安全性有明確的文本文件,一個明顯的改善。你知道發生了...

的更多信息:

相關問題