Rad bi ponovno zagnal oddaljeni računalnik, ki pripada domeni. Imam skrbniški račun, vendar ne vem, kako naj ga uporabim iz powershella.
Vem, da obstaja cmdlet Restart-Computer
in da lahko posreduje poverilnice, vendar če je moja domena na primer mydomain
, moje uporabniško ime je myuser
in moje geslo je mypassword
, kakšna je prava sintaksa za njegovo uporabo?
Načrtovati moram ponovni zagon, tako da mi ni treba vnesti gesla.
Težava z Get-Credential
je, da vedno zahteva geslo. To je mogoče zaobiti, vendar je treba geslo shraniti kot varen niz v datotečnem sistemu.
V naslednjem članku je razloženo, kako to deluje:
Če povzamemo, ustvarite datoteko za shranjevanje gesla (kot šifriran niz). Naslednja vrstica bo zahtevala geslo in ga nato shranila v c:\mysecurestring.txt
kot šifriran niz. To morate storiti samo enkrat:
read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt
Kjer koli v ukazu PowerShell vidite argument -Credential
, to pomeni, da lahko posredujete PSCredential
. Torej v vašem primeru:
$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>
Morda boste potrebovali drugačno vrednost stikala -Authentication
, ker ne poznam vašega okolja.
Obstaja tudi drug način, vendar...
TEGA NE POČNITE, ČE NE ŽELITE, DA JE VAŠE GESLO V DATOTEKI SKRIPT (Shranjevanje gesel v skripte ni dobra ideja, vendar nekateri od nas radi vedo, kako.)
Ok, to je bilo opozorilo, tukaj je koda:
$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
bo imel poverilnice Johna Doe z geslom "ABCDEF".
Alternativni način za pripravo gesla za uporabo:
$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
Glede shranjevanja poverilnic uporabljam dve funkciji (ki sta običajno v modulu, ki se naloži iz mojega profila):
#=====================================================================
# 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
}
In to:
#=====================================================================
# 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
}
Uporabite ga takole:
$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)
Če datoteka s poverilnicami ne obstaja, boste prvič pozvani k vpisu, nato pa bodo poverilnice shranjene v šifriranem nizu znotraj datoteke XML. Ko drugič zaženete to vrstico, bo datoteka xml tam in se bo odprla samodejno.