使用 PowerShell 獲取憑證

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 中使用 Get-Credential 獲取憑證
  2. 在 PowerShell 中使用 Get-Credential Cmdlet 而不提示獲取憑證
使用 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn