Ich möchte einen Remotecomputer neu starten, der zu einer Domäne gehört. Ich habe ein Administratorkonto, weiß aber nicht, wie ich es von Powershell aus verwenden soll.
Ich weiß, dass es ein Restart-Computer
Cmdlet gibt und dass ich Anmeldeinformationen übergeben kann, aber wenn meine Domain zum Beispiel ist mydomain
, ist mein Benutzername myuser
und mein Passwortmypassword
die richtige Syntax, um es zu verwenden?
Ich muss den Neustart planen, damit ich das Passwort nicht eingeben muss.
powershell
powershell-remoting
Alle Augen auf mich
quelle
quelle
Antworten:
Das Problem mit
Get-Credential
ist, dass immer nach einem Passwort gefragt wird. Es gibt jedoch einen Weg, dies zu umgehen, aber das Kennwort muss als sichere Zeichenfolge im Dateisystem gespeichert werden.Der folgende Artikel erklärt, wie dies funktioniert:
Zusammenfassend erstellen Sie eine Datei zum Speichern Ihres Kennworts (als verschlüsselte Zeichenfolge). In der folgenden Zeile werden Sie aufgefordert, ein Kennwort einzugeben und es dann
c:\mysecurestring.txt
als verschlüsselte Zeichenfolge zu speichern . Sie müssen dies nur einmal tun:Wenn Sie
-Credential
in einem PowerShell-Befehl ein Argument sehen, können Sie ein Argument übergebenPSCredential
. Also in deinem Fall:Möglicherweise benötigen Sie einen anderen
-Authentication
Schaltwert, da ich Ihre Umgebung nicht kenne.quelle
ConvertTo-SecureString "password" -AsPlainText -Force
.$password = ConvertTo-SecureString "password" -AsPlainText -Force
Es gibt noch einen anderen Weg, aber ...
TUN SIE DAS NICHT, WENN SIE IHR PASSWORT NICHT IN DER SCRIPT-DATEI WOLLEN (Es ist keine gute Idee, Passwörter in Skripten zu speichern, aber einige von uns nur wissen, wie.)
Ok, das war die Warnung, hier ist der Code:
$cred
wird die Anmeldeinformationen von John Doe mit dem Passwort "ABCDEF" haben.Alternative Mittel, um das Passwort einsatzbereit zu machen:
quelle
Zum Speichern von Anmeldeinformationen verwende ich zwei Funktionen (die normalerweise in einem Modul enthalten sind, das aus meinem Profil geladen wird):
Und das hier:
Sie verwenden es so:
Wenn die Anmeldeinformationsdatei nicht vorhanden ist, werden Sie beim ersten Mal dazu aufgefordert. Zu diesem Zeitpunkt werden die Anmeldeinformationen in einer verschlüsselten Zeichenfolge in einer XML-Datei gespeichert. Wenn Sie diese Zeile zum zweiten Mal ausführen, ist die XML-Datei vorhanden und wird automatisch geöffnet.
quelle
Ich muss SCOM 2012-Funktionen von einem Remote-Server ausführen, für den ein anderer Berechtigungsnachweis erforderlich ist. Ich vermeide Klartext-Passwörter, indem ich die Ausgabe einer Passwort-Entschlüsselungsfunktion als Eingabe an ConvertTo-SecureString übergebe. Aus Gründen der Übersichtlichkeit wird dies hier nicht gezeigt.
Ich schreibe meine Erklärungen gerne stark. Die Typdeklaration für $ strPass funktioniert ordnungsgemäß.
quelle
Hier sind zwei Möglichkeiten, wie Sie dies tun können, wenn Sie den Neustart planen.
Zuerst können Sie eine Aufgabe auf einem Computer mit Anmeldeinformationen erstellen, für die Rechte erforderlich sind, um eine Verbindung herzustellen und einen anderen Computer neu zu starten. Dadurch ist der Scheduler für die sichere Speicherung der Anmeldeinformationen verantwortlich. Der Neustartbefehl (ich bin ein Powershell-Typ, aber das ist sauberer.) Lautet:
SHUTDOWN /r /f /m \\ComputerName
Die Befehlszeile zum Erstellen einer geplanten Aufgabe auf dem lokalen Computer und zum Remote-Neustart einer anderen Aufgabe lautet:
SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f /m \\ComputerName" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU "domain\username" /RP "password"
Ich bevorzuge den zweiten Weg, bei dem Sie Ihre aktuellen Anmeldeinformationen verwenden, um eine geplante Aufgabe zu erstellen, die mit dem Systemkonto auf einem Remotecomputer ausgeführt wird.
SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU SYSTEM /S ComputerName
Dies funktioniert auch über die GUI. Geben Sie einfach SYSTEM als Benutzernamen ein und lassen Sie die Kennwortfelder leer.
quelle
Seien Sie sehr vorsichtig beim Speichern von Passwörtern auf diese Weise ... es ist nicht so sicher wie ...
quelle
Ich habe ein Beispiel gesehen, das Import / Export-CLIXML verwendet.
Dies sind meine Lieblingsbefehle für das Problem, das Sie lösen möchten. Und der einfachste Weg, sie zu benutzen, ist.
Wenn die Datei lokal nicht vorhanden ist, werden Sie aufgefordert, die Anmeldeinformationen einzugeben und zu speichern. Dies wird eine dauern
[pscredential]
Objekt ohne Probleme verwendet und die Anmeldeinformationen werden als sichere Zeichenfolge ausgeblendet.Verwenden Sie zum Schluss einfach die Anmeldeinformationen wie gewohnt.
Hinweis zur Sicherheit :
Speichern Sie Ihre Anmeldeinformationen sicher auf der Festplatte
Bearbeiten: Lesen Sie einfach die ursprüngliche Frage erneut. Das oben genannte funktioniert, solange Sie das
[pscredential]
auf der Festplatte initialisiert haben . Das heißt, wenn Sie das in Ihr Skript einfügen und das Skript ausführen, sobald es diese Datei erstellt, und dann das Skript unbeaufsichtigt ausführen, ist dies einfach.quelle
Lösung
Für Build-Maschinen
Ersetzen Sie im vorherigen Code die Werte für Benutzername und Kennwort durch geheime ("vor Protokollen verborgen") Umgebungsvariablen Ihrer Build-Maschine
Testergebnisse von
und du wirst sehen
quelle
Warum probierst du nicht etwas sehr Einfaches aus?
Verwenden Sie psexec mit dem Befehl 'shutdown / r / f / t 0' und einer PC-Liste von CMD.
quelle