Ich möchte einen Remotecomputer neu starten, der zu einer Domäne gehört. Ich habe ein Administratorkonto, aber ich weiß nicht, wie ich es über die Powershell verwenden kann.
Ich weiß, dass es ein Cmdlet "Restart-Computer" gibt und dass ich Anmeldeinformationen übergeben kann, aber wenn meine Domäne z. B. "mydomain", mein Benutzername "myuser" und mein Kennwort "mypassword" ist, wie lautet die richtige Syntax für die Verwendung?
Ich muss den Neustart planen, damit ich das Passwort nicht eingeben muss.
Das Problem mit Get-Credential
ist, dass es immer nach einem Passwort fragt. Es gibt jedoch einen Weg, dies zu umgehen, aber dazu muss das Passwort als sichere Zeichenkette im Dateisystem gespeichert werden.
Der folgende Artikel erklärt, wie das funktioniert:
PSCredentials ohne Eingabeaufforderung verwenden
Zusammenfassend lässt sich sagen, dass Sie eine Datei erstellen, in der Sie Ihr Passwort (als verschlüsselte Zeichenfolge) speichern. Die folgende Zeile fordert Sie zur Eingabe eines Passworts auf und speichert es als verschlüsselte Zeichenfolge in "c:\mysecurestring.txt". Sie müssen dies nur einmal tun:
read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt
Wenn Sie in einem PowerShell-Befehl ein "Credential"-Argument sehen, bedeutet dies, dass Sie ein "PSCredential" übergeben können. In Ihrem Fall also:
$username = "domain01\admin01"
$password = Get-Content 'C:\mysecurestring.txt' | ConvertTo-SecureString
$cred = new-object -typename System.Management.Automation.PSCredential `
-argumentlist $username, $password
$serverNameOrIp = "192.168.1.1"
Restart-Computer -ComputerName $serverNameOrIp `
-Authentication default `
-Credential $cred
<any other parameters relevant to you>
Möglicherweise benötigen Sie einen anderen Wert für den Schalter Authentication
, da ich Ihre Umgebung nicht kenne.
Es gibt einen anderen Weg, aber...
TUN SIE DIES NICHT, WENN SIE IHR PASSWORT NICHT IN DER SKRIPTDATEI HABEN WOLLEN (Es ist keine gute Idee, Passwörter in Skripten zu speichern, aber einige von uns wollen einfach wissen, wie.)
Ok, das war die Warnung, hier ist der Code:
$username = "John Doe"
$password = "ABCDEF"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
$cred
wird die Anmeldedaten von John Doe mit dem Passwort "ABCDEF" haben.
Alternative Mittel, um das Passwort zur Verwendung bereitzustellen:
$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
Für die Speicherung von Anmeldeinformationen verwende ich zwei Funktionen (die sich normalerweise in einem Modul befinden, das von meinem Profil geladen wird):
#=====================================================================
# Get-MyCredential
#=====================================================================
function Get-MyCredential
{
param(
$CredPath,
[switch]$Help
)
$HelpText = @"
Get-MyCredential
Usage:
Get-MyCredential -CredPath `$CredPath
If a credential is stored in $CredPath, it will be used.
If no credential is found, Export-Credential will start and offer to
Store a credential at the location specified.
"@
if($Help -or (!($CredPath))){write-host $Helptext; Break}
if (!(Test-Path -Path $CredPath -PathType Leaf)) {
Export-Credential (Get-Credential) $CredPath
}
$cred = Import-Clixml $CredPath
$cred.Password = $cred.Password | ConvertTo-SecureString
$Credential = New-Object System.Management.Automation.PsCredential($cred.UserName, $cred.Password)
Return $Credential
}
Und diese hier:
#=====================================================================
# Export-Credential
# Usage: Export-Credential $CredentialObject $FileToSaveTo
#=====================================================================
function Export-Credential($cred, $path) {
$cred = $cred | Select-Object *
$cred.password = $cred.Password | ConvertFrom-SecureString
$cred | Export-Clixml $path
}
Man benutzt es so:
$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)
Wenn die Datei mit den Anmeldedaten nicht existiert, werden Sie beim ersten Mal dazu aufgefordert. Dann werden die Anmeldedaten in einer verschlüsselten Zeichenfolge in einer XML-Datei gespeichert. Beim zweiten Mal, wenn Sie diese Zeile ausführen, ist die XML-Datei vorhanden und wird automatisch geöffnet.