Je voudrais redémarrer un ordinateur distant qui appartient à un domaine. J’ai un compte administrateur mais je ne sais pas comment l’utiliser à partir de powershell.
Je sais qu'il existe une cmdlet Restart-Computer
et que je peux passer des informations d'identification mais si mon domaine est par exemple mydomain
, mon nom d'utilisateur est myuser
et mon mot de passe est mypassword
, quelle est la bonne syntaxe pour l'utiliser ?
J'ai besoin de planifier le redémarrage pour ne pas avoir à taper le mot de passe.
Le problème avec Get-Credential
est qu'il demandera toujours un mot de passe. Il existe cependant un moyen de contourner ce problème, mais il implique de stocker le mot de passe sous forme de chaîne sécurisée sur le système de fichiers.
L'article suivant explique comment cela fonctionne :
En résumé, vous créez un fichier pour stocker votre mot de passe (sous forme de chaîne cryptée). La ligne suivante demandera un mot de passe puis le stockera dans c:\mysecurestring.txt
sous forme de chaîne cryptée. Vous n'avez à le faire qu'une seule fois :
read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt
Chaque fois que vous voyez un argument -Credential
dans une commande PowerShell, cela signifie que vous pouvez passer un PSCredential
. Donc dans votre cas :
$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>
Vous pouvez avoir besoin d'une valeur différente pour le commutateur -Authentication
car je ne connais pas votre environnement.
Il y a un autre moyen, mais...
NE FAITES PAS CELA SI VOUS NE VOULEZ PAS QUE VOTRE MOT DE PASSE FIGURE DANS LE FICHIER DU SCRIPT. (Ce n’est pas une bonne idée de stocker les mots de passe dans les scripts, mais certains d’entre nous aiment savoir comment faire).
Ok, c'était l'avertissement, voici le 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
aura les informations d'identification de John Doe avec le mot de passe "ABCDEF" ;.
Autre moyen d'obtenir le mot de passe prêt à être utilisé :
$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force
En ce qui concerne le stockage des informations d'identification, j'utilise deux fonctions (qui sont normalement dans un module qui est chargé à partir de mon profil) :
#=====================================================================
# 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
}
Et celle-ci :
#=====================================================================
# 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
}
Tu l'utilises comme ça :
$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)
Si le fichier d'identification n'existe pas, vous serez invité la première fois, à ce moment-là, il stockera les informations d'identification dans une chaîne cryptée dans un fichier XML. La deuxième fois que vous exécutez cette ligne, le fichier xml est là et sera ouvert automatiquement.