2016-08-11 112 views
1

我正在創建一個腳本來處理我工作的學區的無人蔘與域加入。我們有幾個處理sysprep的IT人員,所以我創建了一個腳本來加密密碼以用於Add-Computer。在Windows中驗證密碼匹配Powershell

我遇到的麻煩是腳本需要兩個密碼條目,如果它們不匹配就重新啓動,但如果它們繼續,則繼續。我已經嘗試到目前爲止:

$s = {write-host "running script} 
&$s 
$pwd1 = Read-Host -AsSecureString "Enter Password" 
$pwd2 = Read-Host -AsSecureString "Enter Again" 
If($pwd1 -ceq $pwd2) { 
Write-host "match" 
} else { 
&$s 
} 

我想讓腳本自動使用戶重試,直到兩個密碼匹配。

編輯:想通了!這裏是供參考的代碼。感謝RowdyVinson!

do { 
Write-Host "I am here to compare the password you are entering..." 
$pwd1 = Read-Host "Password" -AsSecureString 
$pwd2 = Read-Host "Re-enter Password" -AsSecureString 
$pwd1_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd1)) 
$pwd2_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd2)) 
} 
while ($pwd1_text -ne $pwd2_text) 
Write-Host "Passwords matched" 
+0

一般來說加密的密碼是錯誤的解決方案,當攻擊者獲得管理員權限時,他將得到包含加密密碼和加密密鑰的數據庫。 – zaph

+0

我認爲,但我們是一個相對較小的地區,而且我的同事們每次都厭倦了爲域加入而輸入證書,所以我的腳本在第一次登錄時運行,然後(通過unattend.xml)另一次C:\ Windows \ Panther中的批處理文件刪除所有內容,一旦域加入。此外,加密的密碼是作爲主圖像創建的,在域加入之前永遠不會獲得互聯網訪問權限。只要域加入,文件就會再見。有人不得不偷盜硬盤。 –

回答

2

您在比較兩個安全字符串,因此您需要先解密它們。這裏有你想要做什麼的實現:

Write-Host "Hey..!! I am here to compare the password you are entering..." 
$pwd1 = Read-Host "Passowrd" -AsSecureString 
$pwd2 = Read-Host "Re-enter Passowrd" -AsSecureString 
$pwd1_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd1)) 
$pwd2_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd2)) 


if ($pwd1_text -ceq $pwd2_text) { 
Write-Host "Passwords matched" 
} else { 
Write-Host "Passwords differ" 
} 

,這是我得到了來自:http://techibee.com/powershell/compare-secure-strings-entered-through-powershell/422

也可能相關:https://www.roelvanlisdonk.nl/2010/03/23/show-password-in-plaintext-by-using-get-credential-in-powershell/

+1

我永遠無法讓自己喜歡回到純文本字符串的方法。只是爲了有一個替代方案:'(New-Object PSCredential'。',$ SecureString).GetNetworkCredential()。Password'。唉,它仍然適度複雜。 –

+0

謝謝你的工作!我的下一個問題是,如果密碼不同,我該如何重新啓動它?所以這個腳本讓你繼續重試直到它們匹配。 –

+1

回答了我自己的問題!我會更新代碼。 –