使用 PowerShell 獲取憑證
PSCredential 物件是一種創造性的方式,可以安全地儲存憑證並將其傳遞給各種服務。許多本機和第三方 cmdlet 在許多不同的命令上都需要 PSCredential 物件。此外,憑證是 Windows PowerShell 中普遍存在的物件。
本文將討論如何使用 Windows PowerShell Get-Credential
cmdlet 並在沒有任何提示的情況下獲取憑證。
在 PowerShell 中使用 Get-Credential
獲取憑證
通常,要建立 PSCredential 物件,我們會使用 Get-Credential
cmdlet。上述 cmdlet 是 Windows PowerShell 接收輸入以建立 PSCredential 物件的最常見方式。該物件主要由使用者名稱和密碼組成。
每次執行時,它都會在命令列中提示輸入使用者名稱和密碼,或者會出現一個彈出對話方塊,詢問使用者的憑證。
在 PowerShell 中使用 Get-Credential
Cmdlet 而不提示獲取憑證
例如,我們正在開發一個在計劃任務中執行的自動化指令碼,或者是一些更強大的自動化框架的一部分。在這種情況下,沒有人操作控制檯來輸入使用者名稱和密碼。因此,最好從頭開始構建 PSCredential 物件。
建立沒有互動的 PSCredential 物件涉及加密過程。PSCredential 物件需要純文字使用者名稱和加密密碼。
要加密密碼,我們需要將標準字串轉換為安全字串。我們通過使用 ConvertTo-SecureString
cmdlet 來做到這一點。我們可以將純文字密碼傳遞給這個 cmdlet,因為它是純文字,所以我們必須使用 -PlainText
和 -Force
引數。這兩個引數都表明我們正在傳遞一個純文字字串,不需要確認。
$pass = ConvertTo-SecureString 'MySecretPassword' -AsPlainText -Force
建立安全字串後,就該建立 PSCredential 物件了。為此,我們可以使用 New-Object
cmdlet 來定義 System.Management.Automation.PSCredential
的物件。PSCredential 類有一個建構函式,它將接受純文字使用者名稱和我們可以用作引數的安全字串密碼。
$credential = New-Object System.Management.Automation.PSCredential ('user01', $pass)
我們現在有一個 PSCredential 物件,其中我們的純文字使用者名稱和安全字串密碼儲存在一個變數中。我們現在可以將 $credential
變數傳遞給幾個需要 -Credential
引數的命令,這將非常有效。要驗證它是否是使用預期的使用者名稱和密碼建立的,我們可以引用 UserName
屬性,顯示你之前使用的使用者名稱。
示例程式碼:
$credential.Username
輸出:
user01
密碼通過安全字串加密,但如果你在同一臺計算機上讀取密碼並登入使用者,我們可以使用 GetNetworkCredential()
方法以純文字形式檢視密碼。因此,在 $credential
變數的末尾附加 GetNetworkCredential()
,但請注意,一旦執行,你將不知道控制檯上列印的密碼。
示例程式碼:
$credential.GetNetworkCredential()
輸出:
UserName Domain
-------- ------
user01
要檢視密碼,你需要在 GetNetworkCredential()
返回的物件上使用 Password 屬性。返回的密碼應該與你提供給 PSCredential 建構函式的密碼相同。
示例程式碼:
$credential.GetNetworkCredential().Password
輸出:
MySecretPassword
現在我們已經驗證了 $credential
變數包含我們的使用者名稱和密碼,我們可以使用該變數作為 Get-Credential
cmdlet 中的引數。
Get-Credential -Credential $credential
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn