安全密碼背後的概念是,在生產指令檔中,我們不應以可一眼看清的方式傳遞重要密碼。此動作嚴重缺乏安全性。因此,使用 PowerShell 可讓我們保護密碼或至少降低密碼可見度。我們會先討論安全字串的一般層面,然後再討論 Dell Command PowerShell Provider (DCPP) 如何運用 PowerShell 的固有功能來保護密碼。
假設我們要讀取使用者在主控台上的使用者名稱和密碼。我們知道使用者名通常不需要任何安全性,並可向所有人顯示。但是對於密碼,我們不應該讓陌生人知道使用者的密碼。我們可以使用以下命令來達到此要求:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
以上概述當我們必須保護密碼等重要資訊時,應如何提升安全性。在上方範例中,變數 $pass 的類型為 System.Security.SecureString
。在說明 DCPP 之前,我們會先介紹 PowerShell 提供的另外兩個廣泛使用的 cmdlet,以協助實現安全欄位。
這兩個命令是 ConvertTo-SecureString
和 ConvertFrom-SecureString
。 ConvertTo-SecureString
會將純文字轉換為類型 System.Security.SecureString
。範例如以下所示:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
在上方範例中,純文字 P@assword1
已轉換為類型 System.Security.SecureString
。這更像是參考資訊,不一定會受到廣泛使用。
下一個 cmdlet ConvertFrom-SecureString
是使用更廣泛的 cmdlet,用於將安全字串轉換為加密的標準字串。命令 ConvertTo-SecureString
的主要限制在於其輸出不能直接寫入檔案以供日後使用。我們必須使用 ConvertFrom-SecureString
,這會將 System.Security.SecureString
轉換為可便於儲存至檔案中的加密標準字串,以克服此限制。
我們會將純文字 P@ssword1
轉換為安全字串,然後將其輸出傳送到 ConvertFrom-SecureString
以取得可以安全且方便地儲存至檔案中的加密字串。
舉例來說,假設電腦上已設定管理員密碼,我們必須將其儲存至檔案中。我們可以使用以下方式達成:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
我們可以將此管理員密碼擷取為變數作為安全物件,如下所示:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
現在來想想該如何使用 DCPP 的安全密碼。在 DCPP 中,如果使用者的電腦已設定系統或管理員密碼,則針對所有 set
命令,我們必須傳送相應的密碼。因此,以純文字形式提供此密碼會違反安全性。我們必須以 System.Security.SecureString
來傳送密碼。此外,在傳送 SecureString
密碼時,我們必須使用 -PasswordSecure
切換值來傳送,而非一般 –Password
切換值。下方範例顯示使用者嘗試將 AdvancedBatteryChargeCfg
設為 Disabled
並傳送 SecureString
密碼:
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
此處 $pass 存有系統和管理員密碼,且類型為 System.Security.SecureString
。與上方的討論類似,我們可以將 $pass
讀取為:
$pass = Read-Host "Enter system/admin password" –AsSecureString
我們可以將 $pass
儲存至檔案中 (若有需要),作為:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
相關的文章: