Bir etki alanına ait olan uzak bir bilgisayarı yeniden başlatmak istiyorum. Bir yönetici hesabım var ama powershell'den nasıl kullanacağımı bilmiyorum.
Bir Restart-Computer
cmdlet'i olduğunu ve kimlik bilgilerini geçebileceğimi biliyorum, ancak etki alanım örneğin mydomain
, kullanıcı adım myuser
ve şifrem mypassword
ise bunu kullanmak için doğru sözdizimi nedir?
Parolayı yazmak zorunda kalmamak için yeniden başlatmayı zamanlamam gerekiyor.
Get-Credential` ile ilgili sorun, her zaman bir parola istemesidir. Bunu aşmanın bir yolu vardır, ancak parolayı dosya sisteminde güvenli bir dize olarak saklamayı içerir.
Aşağıdaki makale bunun nasıl çalıştığını açıklamaktadır:
Özetle, parolanızı saklamak için bir dosya oluşturursunuz (şifrelenmiş bir dize olarak). Aşağıdaki satır bir parola isteyecek ve ardından bunu c:\mysecurestring.txt
dosyasında şifrelenmiş bir dize olarak saklayacaktır. Bunu yalnızca bir kez yapmanız gerekir:
read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt
Bir PowerShell komutunda -Credential
bağımsız değişkenini gördüğünüz her yerde, bir PSCredential
geçirebileceğiniz anlamına gelir. Yani sizin durumunuzda:
$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>
Ortamınızı bilmediğim için farklı bir -Authentication
anahtar değerine ihtiyacınız olabilir.
Başka bir yol daha var, ama...
ŞIFRENIZIN KOMUT DOSYASINDA OLMASINI ISTEMIYORSANIZ BUNU YAPMAYIN (Parolaları komut dosyalarında saklamak iyi bir fikir değildir, ancak bazılarımız nasıl olduğunu bilmek ister).
Tamam, bu uyarıydı, işte kod:
$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', John Doe'nun kimlik bilgilerini "ABCDEF" parolasıyla içerecektir.
Şifreyi kullanıma hazır hale getirmek için alternatif araçlar:
$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
Kimlik bilgilerinin saklanmasıyla ilgili olarak, iki işlev kullanıyorum (normalde profilimden yüklenen bir modülde bulunan):
#=====================================================================
# 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
}
Ve bu da:
#=====================================================================
# 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
}
Bu şekilde kullanıyorsun:
$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)
Eğer kimlik bilgisi dosyası mevcut değilse, ilk seferinde size sorulacaktır, bu noktada kimlik bilgilerini bir XML dosyası içinde şifrelenmiş bir dizede saklayacaktır. Bu satırı ikinci kez çalıştırdığınızda, xml dosyası orada olacak ve otomatik olarak açılacaktır.