2017-11-29 11 views
0

Ich versuche, das Kennwort eines lokalen Administratorkontos zu aktualisieren. Ich möchte das Passwort nicht im Klartext weitergeben, also habe ich einen Workflow (https://www.pdq.com/blog/secure-password-with-powershell-encrypting-credentials-part-2/) gefunden, mit dem ich PWs verschlüsseln kann.Ändern des lokalen Administratorkennworts mit verschlüsselter Password.txt

#Change password for TestAccount 
$User = 'TestAccount' 
$PasswordFile = "$PsScriptRoot\Password.txt" 
$KeyFile = "$PsScriptRoot\AES.key" 
$key = Get-Content $KeyFile 
$MyCredential = New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key) 

$adsiUser = [adsi]"WinNT://localhost/$User,user" 
$adsiUser.SetPassword($MyCredential.Password) 

erhielt ich den Fehler

Exception calling "SetPassword" with "1" argument(s): "Type mismatch. 
(Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))" 

mein Google-Fu erlaubt mir also mit

$decodedpassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($MyCredential.Password)) 

das Passwort zu entschlüsseln, aber jetzt gibt es eine Spur von Cookies in meinem Skript ... Gibt es eine Möglichkeit, dies als Secure String zu übergeben?

Danke, Paul

+0

Werfen Sie einen Blick auf diesen Artikel: https://blog.kloud.com.au/2016/04/21/using-saved-credentials-securely-in-powershell-scripts/ Es erklärt wie Sie Passwörter mit der Windows Data Protection API sicher speichern. Sie können das Passwort nicht auf dem Gerät speichern, ohne dass das Gerät das Passwort decodieren kann. Wenn das ein Problem ist, müssen Sie das Skript selbst verschleiern ... –

Antwort

0

Verwenden Sie die integrierte Methode GetNetworkCredential() das Klartext-Passwort aus dem Credential-Objekt

So ändern Sie diese Zeile erhalten:

$adsiUser.SetPassword($MyCredential.Password) 

zu diesem:

$adsiUser.SetPassword($MyCredential.GetNetworkCredential().Password) 

Für kurze Credential Save/Load T utorial:

#To Save Credential to file 
$pass = "123456" | ConvertTo-SecureString -AsPlainText -Force 
$pass | ConvertFrom-SecureString | Set-Content c:\temp\pass.txt 

#To Load Credential From Text 
$username = "userName" 
$encrypted = Get-Content c:\temp\pass.txt | ConvertTo-SecureString 
$credential = New-Object System.Management.Automation.PsCredential($username, $encrypted) 

#To Show the Plain text Password from the Credential Object 
$credential.GetNetworkCredential().Password 
Verwandte Themen