2016-08-11 2 views
1

Ich bin ein Skript zu schaffen für den Schulbezirk ich Beitritt unbeaufsichtigt Domäne zu behandeln arbeiten. Wir haben mehrere IT-Leute, die mit sysprep umgehen, also erstelle ich ein Skript, das Passwörter für Add-Computer verschlüsselt.Überprüfen Sie Passwörter Spiel in Windows Powershell

Woran ich Probleme habe, ist ein Skript, das zwei Kennworteinträge enthält und neu startet, wenn sie nicht übereinstimmen, aber wenn sie es tun, wird es fortgesetzt. Was ich bisher versucht habe:

$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 
} 

Ich möchte das Skript automatisch veranlassen, dass der Benutzer es wiederholt, bis beide Passwörter übereinstimmen.

EDIT: Es herausgefunden! Hier ist der Code für die Referenz. Danke an 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

Im allgemeinen Verschlüsselung Passwörtern die falsche Lösung ist, Wenn der Angreifer Administratorzugriff erhält, erhält er die Datenbank einschließlich der verschlüsselten Passwörter und des Verschlüsselungsschlüssels. – zaph

+0

Ich dachte darüber nach, aber wir sind ein relativ kleiner Distrikt, und meine Kollegen wurden es einfach leid, jedes Mal Anmeldeinformationen für den Domainbeitritt einzugeben, also habe ich mein Skript bei der ersten Anmeldung ausgeführt, dann (über unattend.xml) eine andere Batch-Datei in C: \ Windows \ Panther löscht alles, sobald die Domäne verbunden wurde. Außerdem werden die verschlüsselten Passwörter wie das Master-Image erstellt, das bis zum Beitritt der Domain keinen Internetzugang erhält. Sobald die Domäne verbunden ist, gehen die Dateien auf Wiedersehen. Jemand müsste die HDD stehlen. –

Antwort

2

Sie möchten zwei sichere Zeichenfolgen vergleichen, daher müssen Sie sie zuerst entschlüsseln. Hier ist eine Implementierung von dem, was Sie zu tun versuchen:

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" 
} 

und das ist, wo ich das aus: http://techibee.com/powershell/compare-secure-strings-entered-through-powershell/422

auch möglicherweise relevant: https://www.roelvanlisdonk.nl/2010/03/23/show-password-in-plaintext-by-using-get-credential-in-powershell/

+1

Ich könnte mich nie dazu bringen, diese Methode zu mögen, um zu einer einfachen Textzeichenfolge zurückzukehren. Nur um eine Alternative zu haben: '(New-Objekt PSCredential '.', $ SecureString) .GetNetworkCredential(). Password'. Leider ist es immer noch mäßig verschachtelt. –

+0

Danke das hat funktioniert! Meine nächste Frage wäre, wie bekomme ich es neu zu starten, wenn die Passwörter unterschiedlich sind? Das Skript lässt Sie so lange wiederholen, bis sie übereinstimmen. –

+1

Beantwortete meine eigene Frage! Ich werde den Code aktualisieren. –

Verwandte Themen