Θα ήθελα να επανεκκινήσω έναν απομακρυσμένο υπολογιστή που ανήκει σε έναν τομέα. Έχω έναν λογαριασμό διαχειριστή, αλλά δεν ξέρω πώς να τον χρησιμοποιήσω από την powershell.
Ξέρω ότι υπάρχει το cmdlet Restart-Computer
και ότι μπορώ να περάσω διαπιστευτήρια, αλλά αν ο τομέας μου είναι για παράδειγμα mydomain
, το όνομα χρήστη μου είναι myuser
και ο κωδικός μου είναι mypassword
ποια είναι η σωστή σύνταξη για να το χρησιμοποιήσω;
Πρέπει να προγραμματίσω την επανεκκίνηση ώστε να μην χρειάζεται να πληκτρολογήσω τον κωδικό πρόσβασης.
Το πρόβλημα με το Get-Credential
είναι ότι θα ζητάει πάντα έναν κωδικό πρόσβασης. Ωστόσο, υπάρχει τρόπος να το παρακάμψετε αυτό, αλλά προϋποθέτει την αποθήκευση του κωδικού πρόσβασης ως ασφαλή συμβολοσειρά στο σύστημα αρχείων.
Το ακόλουθο άρθρο εξηγεί πώς λειτουργεί αυτό:
Συνοπτικά, δημιουργείτε ένα αρχείο για να αποθηκεύσετε τον κωδικό πρόσβασής σας (ως κρυπτογραφημένη συμβολοσειρά). Η ακόλουθη γραμμή θα ζητήσει έναν κωδικό πρόσβασης και στη συνέχεια θα τον αποθηκεύσει στο αρχείο c:\mysecurestring.txt
ως κρυπτογραφημένη συμβολοσειρά. Χρειάζεται να το κάνετε αυτό μόνο μία φορά:
read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt
Όπου βλέπετε ένα όρισμα -Credential
σε μια εντολή PowerShell τότε σημαίνει ότι μπορείτε να περάσετε ένα PSCredential
. Έτσι στην περίπτωσή σας:
$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>
Μπορεί να χρειαστείτε διαφορετική τιμή του διακόπτη -Authentication
επειδή δεν γνωρίζω το περιβάλλον σας.
Υπάρχει άλλος τρόπος, αλλά...
ΜΗΝ ΤΟ ΚΆΝΕΤΕ ΑΥΤΌ ΑΝ ΔΕΝ ΘΈΛΕΤΕ ΤΟΝ ΚΩΔΙΚΌ ΠΡΌΣΒΑΣΉΣ ΣΑΣ ΣΤΟ ΑΡΧΕΊΟ ΤΟΥ ΣΕΝΑΡΊΟΥ (Δεν είναι καλή ιδέα να αποθηκεύετε κωδικούς πρόσβασης σε σενάρια, αλλά μερικοί από εμάς θέλουν να ξέρουν πώς).
Εντάξει, αυτή ήταν η προειδοποίηση, εδώ είναι ο κώδικας:
$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 με τον κωδικό πρόσβασης "ABCDEF".
Εναλλακτικά μέσα για να έχετε τον κωδικό πρόσβασης έτοιμο για χρήση:
$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
Όσον αφορά την αποθήκευση των διαπιστευτηρίων, χρησιμοποιώ δύο λειτουργίες (που συνήθως βρίσκονται σε μια ενότητα που φορτώνεται από το προφίλ μου):
#=====================================================================
# 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
}
Και αυτή εδώ:
#=====================================================================
# 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
}
Το χρησιμοποιείτε έτσι:
$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)
Εάν το αρχείο διαπιστευτηρίων δεν υπάρχει, θα σας ζητηθεί η πρώτη φορά, σε εκείνο το σημείο θα αποθηκεύσει τα διαπιστευτήρια σε μια κρυπτογραφημένη συμβολοσειρά μέσα σε ένα αρχείο XML. Τη δεύτερη φορά που θα εκτελέσετε αυτή τη γραμμή, το αρχείο xml είναι εκεί και θα ανοίξει αυτόματα.