Information

Cette article a été rédigé pour une présentation du French Powershell UserGroup.

Cette présentaton peut-être vu sur Youtube sur la chaine du FRPSUG

Les différentes façons d’utiliser les credentials…

Demande Initiale

Dès mes débuts sur powershell, je me suis très vite posé la question de la gestion des credentials dans mes scripts

Du besoin simple qui est peut-être géré de façon basique à l’utilisation des credentials dans des scripts automatiques j’ai longtemps cherché le meilleur moyen de faire.

Traitement de la demande

1. Get-Credential

La façon la plus simple d’utiliser les credentials et d’utiliser la commande de base

$cred = Get-Credential -Message "Message affiché dans la popup" -UserName MonUtilisateur

Le résultat est le suivant

PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString

Cette variable $cred peut-être utiliser par exemple dans la commande suivante

Enter-PSSession -ComputerName MonComputer -Credential $cred

2. ConvertFrom-SecureString : Stockage sur le disque

Une autre solution, un peu plus avancée, est de stocker le mot de passe dans un fichier sur le PC. Naturellement ce stockage doit se faire de facon sécurisée. Comme précédement il faut d’abord créer l’objet $Cred

$cred = Get-Credential -Message "Message affiché dans la popup" -UserName MonUtilisateur

Dans un second temps nous allons stocker le mot de passe de facon crypté sur le disque dur

$Cred.Password | ConvertFrom-SecureString | Out-File C:\temp\password.txt

Dans le fichier c:\temp\password.txt le mot de passe se trouve sous cette forme

01000000d08c9ddf0115d1118c7a00c04fc297eb0100000057670149ac674a41ad9d185a8a82724b0000000002000000000010660000000100002000000093aaaf1ed598a69bbfb4cc77e81dfeb2786f26db6184538833af18054ef1a8a3000000000e800000000200002000000098c97f4f344d0159f337966d55060ad3297cae7515938457a713ddd9eaac5cdf200000003d986891fb27cb3983f798082083ac734d97d6235a186d3cc43db26f63bd44684000000018620d4739c0a26a6261e8c9867e94605cd35c61090c982999d5bb09fb54ec7d9a3499ebeb304c67720edfa37a34fe7fd4bce8fd8468dbee5081f56c81f4ce46

Pour pouvoir utiliser ce mot de passe stocké de façon sécurisé, il faut d’abord le décrypter. Pour ce faire nous allons procéder de la façon suivante

$Username = "MonUtilisateur"
$SecurePassword = Get-Content c:\temp\password.txt | ConvertTo-SecureString
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$SecurePassword
PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString

Comme dans le point 1 on se retrouve avec une variable $Cred utilisable dans la commande

Enter-PSSession -ComputerName MonComputer -Credential $cred

3. Export-Clixml : Stockage sur le disque

L’avantage de cette méthodologie est que vous pouvez exploiter la polyvalence de PowerShell pour vous assurer que les données ne sont pas seulement exportées, mais également stockées de manière sécurisée à l’aide de chaînes sécurisées. Il convient de noter que ces fichiers d’informations d’identification créés ne peuvent être ouverts que par le même utilisateur sur le même système.

Pour créer le fichier d’export il faut procéder de la façon suivante

get-credential -message "mot de passe utilisateur ?" -UserName MonUtilisateur | Export-Clixml -Path "c:\temp\user.xml"

Le fichier c:\temp\user.xml contient les informations suivantes

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
      <S N="UserName">MonUtilisateur</S>
      <SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb0100000057670149ac674a41ad9d185a8a82724b00000000020000000000106600000001000020000000dadd8864c9b930a2eb07a6745ac4fb5711912c318c401f7e35bb91d4d1cc180b000000000e8000000002000020000000b5a862ba266c236357445b773ca38d73ed124cf82d863ac4c11e2b48d57fca4b2000000054180930ba9fd53a6c4bdd9d7f69c044c88072b0d411486bccc1ca3cca417bf440000000d6197eafe8a133235bd1b44e376c3ff02e94da9f39b7d24b9a68ef5dbd629e44180ce15c3e67830d758fa1296f60a98cb2371ef915990c921e728f44c72c4cbd</SS>
    </Props>
  </Obj>
</Objs>

Pour récupérer les informations il faut utiliser la commande

 $Cred = Import-Clixml -Path "c:\temp\user.xml"

encore une fois on récupére bien notre variable $Cred

PS > $cred

UserName                           Password
--------                           --------
MonUtilisateur System.Security.SecureString

Aujourd’hui, personnellement, j’utilise la méthode 3.