2017-12-18 2 views
0

Ich versuche zu laufen:Wie kann ich einen PowerShell-Remote-Befehl im Hintergrund ausführen, ohne mein Kennwort fest codieren zu müssen?

Invoke-Command -Computer $computer -ScriptBlock {...} 

Aber ich den Fehler winrm Fehler „Zugriff verweigert“ und ich bin zögerlich folgendes zu verwenden:

Invoke-Command -Computer $computer -Credential $cred -ScriptBlock {...} 

wo $ cred ist:

Es muss remote ausgeführt werden und es muss still sein. Also kann ich das PSCredential Popup-Fenster nicht mitten im Skript haben.

Kann mir bitte jemand zeigen oder auf ein Dokument verweisen, das mich zu einer möglichen Lösung führt?

Vielen Dank im Voraus.

+0

Hat jemand anderes vor, dieses Skript neben Ihnen zu verwenden? – TheIncorrigible1

+0

Nur ich, aber andere können es sehen. – Ben

+0

@ Die Lösung von TheMadTechnician funktioniert für Sie, aber das verschlüsselte Passwort ist nur auf Ihr Benutzerkonto auf dem Computer beschränkt, auf dem Sie es erstellen. Ich würde vorschlagen, einen Registrierungsschlüssel anstelle einer Datei für etwas dieser Art zu erstellen. – TheIncorrigible1

Antwort

1

Eine Sache, die Sie tun können, ist das Passwort zu verschlüsseln und auf der Festplatte zu speichern. Dann können Sie diese Datei lesen und das verschlüsselte Kennwort in eine sichere Zeichenfolge konvertieren und daraus ein Berechtigungsobjekt erstellen. Beachten Sie, dass dies mit dem Konto ausgeführt werden muss, mit dem das Skript ausgeführt wird.

'$uper$secret1' | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Set-Content .\AccountPass.txt 

Das wird Ihr Passwort auf der Festplatte in einer Textdatei speichern. Wenn Sie die Textdatei öffnen wird es in etwa so aussehen:

01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b584d55e9c47c942904dd30531d3ad070000000002000000000003660000c0000000100000003060266c3c4333a41e7f0e92176fb3d50000000004800000a000000010000000a2c8bbb2a3666c092004bb5e66fd440320000000636a413a6905789e0f3521cea3d8703405897cd5948da955192bcccd08990ffc1400000068c1 

5f8ac088ef0972dfce7d5a20ff3bbcdac4cc nun das Konto, das die Datei erstellt wird die einzige sein, die sie entschlüsseln kann, aber das Konto kann dann laufen:

$Password = Get-Content .\AccountPass.txt | ConvertTo-SecureString 
$Creds = New-Object System.Management.Automation.PSCredential ("$env:UserDomain\$env:UserName",$Password) 

Jetzt haben Sie ein Anmeldedatenobjekt, ohne ein Passwort im Klartext speichern zu müssen. Wie bereits erwähnt, ist das einzige Konto, das das Passwort in der Textdatei entschlüsseln kann, dasjenige, das die Textdatei generiert hat, und die Textdatei muss aktualisiert werden, wenn das Passwort geändert wird.

+0

Es ist auch beschränkt auf Maschine, wenn Sie sich ausschließlich auf DPAPI verlassen. – TheIncorrigible1

+0

Also, wenn ich dieses Skript auf Tonnen von Maschinen laufen würde, müsste ich das Passwort auf jedem Rechner speichern? – Ben

+0

@Ben Korrigieren. DPAPI stützt sich auf das aktuelle Benutzerkonto und den Fingerabdruck der Maschine (in den einfachsten Worten), auf den sich die ConvertTo-SecureString-Implementierung stützt. – TheIncorrigible1

Verwandte Themen