TUTOS.EU

Crypter un mot de passe dans un script powershell

Comment stocker le mot de passe d'un compte de façon sécurisée dans powershell

Vous devez exécuter la procédure depuis le serveur sur lequel le script sera exécuté et avec le compte qui va lancer le script.

Lancez une session powershell

De base, dans un script, vous pouvez convertir votre mot de passe et écrire sa clé dans un fichier.

Notez que la procédure ne concerne que le mot de passe. Vous ne saisissez pas le login à utiliser.
C'est le compte qui lance la procédure de cryptage du mot de passe qui est utilisé.
La clé de cryptage devra être utilisée dans un script lancé avec le même compte qui a crypté le mot de passe.
Si dessous la clé est écrite dans un fichier. De ce fait la procédure peut être exécuté par un compte de service administré (par exemple)

$masecurestring = ConvertTo-SecureString -AsPlainText "MonMotdepasseAconvertir" -force
$macle = $masecurestring | ConvertFrom-SecureString

$varCheminRepertoireScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition)
out-file -filepath "$varCheminRepertoireScript\MaCle.txt" -InputObject $macle #Ecriture du résultat dans le fichier MaCle.txt
Lien vers le fichier : cliquez ici Copier le code

Avec la commande suivante, vous pouvez aussi générer une fenêtre dans laquelle il faudra saisir le login/mot de passe à sécuriser :

$credential = Get-Credential
Lien vers le fichier : cliquez ici Copier le code

Entrez le login/mdp

Puis obtenez la clé du mot de passe qui est stocké dans une SecureString avec cette commande :

$credential.Password | ConvertFrom-SecureString
Lien vers le fichier : cliquez ici Copier le code

Récupérez la clé :

Maintenant vous pouvez utilisez la clé dans vos script sur ce serveur. La clé correspond à votre mot de passe crypté.
Il vous faut stocker cette clé dans une variable en la convertissant au préalable avec la fonction ConvertTo-SecureString -String

$password = ConvertTo-SecureString -String "mot_de_passe_crypté"
Lien vers le fichier : cliquez ici Copier le code

Exemple :

Maintenant créez un objet credential qui va stocker le couple login/mot de passe et qui pourra par la suite être utilisé dans le reste du script :

$creds = New-Object -TypeName System.Management.Automation.PsCredential -ArgumentList ("MonLogin", $password)
Lien vers le fichier : cliquez ici Copier le code

Cet objet créé, vous pouvez récupérer le mot de passe en clair ainsi :

write-host $creds.getnetworkcredential().Password​
Lien vers le fichier : cliquez ici Copier le code

Vous pourrez, par exemple, passer un login/mot de passe a des utilitaires tel que psexec :

psexec -u $creds.UserName -p $creds.getnetworkcredential().Password
Lien vers le fichier : cliquez ici Copier le code

Ou utiliser directement l'objet credential dans vos scripts powershell :

gwmi -namespace "root\rsop\computer" -query "select * from RSOP_GPO" -computername $ip_context -credential $creds
Lien vers le fichier : cliquez ici Copier le code

2