Question [Concours ] import/export credentials (validé)
- Jacques Barathon
- Auteur du sujet
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 18 ans 3 mois #1299
par Jacques Barathon
[Concours ] import/export credentials (validé) a été créé par Jacques Barathon
Hello,
Je ravive le concours un peu en jachère ces derniers temps!
Pour un redémarrage, j'y vais tranquille, en postant deux petits scripts pour le prix d'un. En fait, je viens de les poster en réponse à un fil sur le forum \"Entraide débutants\", et je me suis dit \"ben, pourquoi pas les soumettre au concours?\". Or donc, voilà.
Ces deux scripts s'appellent export-credential et import-credential. Ils permettent de sauvegarder dans un fichier les credentials d'un utilisateur de manière à pouvoir les recharger à volonté (par exemple dans un script).
La manip est particulièrement utile quand on veut interroger des serveurs distants avec get-wmiobject mais que son propre compte n'a pas accès à ces serveurs:
Il faut alors utiliser get-credential pour saisir un nouveau couple login/mdp et passer le résultat à get-wmiobject via son paramètre -credential.
Problème, si on doit répéter la manip régulièrement au cours de sessions PowerShell différentes, voire si on doit scripter la manip, l'interactivité de get-credential devient une contrainte.
C'est là que mes petits scripts interviennent:
Etape 1: sauvegarde des credentials (à faire une fois pour toutes)
[code:1]
# export-credential.ps1
# v1
# janel, 27/11/07
param ($credential, $filename)
$credential.username > $filename
convertfrom-securestring $credential.password >> $filename
[/code:1]
Etape 2: chargement des Credentials (à utiliser à volonté)
[code:1]
# import-credential.ps1
# v1
# janel, 27/11/07
param ($filename)
$username,$password = type $filename
$pwd = convertto-securestring $password
new-object system.management.automation.PSCredential $username,$pwd
[/code:1]
Exemple d'usage:
[code:1]
# Une fois pour toutes:
PS> $cred = get-credential
PS> export-credential $cred c:\scripts\admin.txt
# Dans un script qui a besoin d'utiliser les credentials:
$cred = import-credential c:\scripts\admin.txt
get-wmiobject win32_operatingsystem -computer MONSERVEUR -credential $cred
[/code:1]
Voilà. L'avantage de cette technique (outre le fait qu'elle autorise la récupération des credentials sans avoir besoin de repasser par le popup Windows) est qu'elle préserve la confidentialité du mot de passe en le stockant sous sa forme cryptée.
La contrainte (liée à l'avantage) est qu'on ne peut importer les credentials qu'à partir du même compte qui les a saisis avec get-credential. En effet, la SecureString est générée à partir d'une clé détenue par le compte actif. Attention donc si vous utilisez import-credential dans un script: vous ne pourrez pas le planifier avec un autre compte. Ou alors, il faudra avoir exécuté la première étape à partir de cet autre compte également.
Janel
Message édité par: janel, à: 27/11/07 18:57<br><br>Message édité par: robin, à: 18/12/07 09:33
Je ravive le concours un peu en jachère ces derniers temps!
Pour un redémarrage, j'y vais tranquille, en postant deux petits scripts pour le prix d'un. En fait, je viens de les poster en réponse à un fil sur le forum \"Entraide débutants\", et je me suis dit \"ben, pourquoi pas les soumettre au concours?\". Or donc, voilà.
Ces deux scripts s'appellent export-credential et import-credential. Ils permettent de sauvegarder dans un fichier les credentials d'un utilisateur de manière à pouvoir les recharger à volonté (par exemple dans un script).
La manip est particulièrement utile quand on veut interroger des serveurs distants avec get-wmiobject mais que son propre compte n'a pas accès à ces serveurs:
Il faut alors utiliser get-credential pour saisir un nouveau couple login/mdp et passer le résultat à get-wmiobject via son paramètre -credential.
Problème, si on doit répéter la manip régulièrement au cours de sessions PowerShell différentes, voire si on doit scripter la manip, l'interactivité de get-credential devient une contrainte.
C'est là que mes petits scripts interviennent:
Etape 1: sauvegarde des credentials (à faire une fois pour toutes)
[code:1]
# export-credential.ps1
# v1
# janel, 27/11/07
param ($credential, $filename)
$credential.username > $filename
convertfrom-securestring $credential.password >> $filename
[/code:1]
Etape 2: chargement des Credentials (à utiliser à volonté)
[code:1]
# import-credential.ps1
# v1
# janel, 27/11/07
param ($filename)
$username,$password = type $filename
$pwd = convertto-securestring $password
new-object system.management.automation.PSCredential $username,$pwd
[/code:1]
Exemple d'usage:
[code:1]
# Une fois pour toutes:
PS> $cred = get-credential
PS> export-credential $cred c:\scripts\admin.txt
# Dans un script qui a besoin d'utiliser les credentials:
$cred = import-credential c:\scripts\admin.txt
get-wmiobject win32_operatingsystem -computer MONSERVEUR -credential $cred
[/code:1]
Voilà. L'avantage de cette technique (outre le fait qu'elle autorise la récupération des credentials sans avoir besoin de repasser par le popup Windows) est qu'elle préserve la confidentialité du mot de passe en le stockant sous sa forme cryptée.
La contrainte (liée à l'avantage) est qu'on ne peut importer les credentials qu'à partir du même compte qui les a saisis avec get-credential. En effet, la SecureString est générée à partir d'une clé détenue par le compte actif. Attention donc si vous utilisez import-credential dans un script: vous ne pourrez pas le planifier avec un autre compte. Ou alors, il faudra avoir exécuté la première étape à partir de cet autre compte également.
Janel
Message édité par: janel, à: 27/11/07 18:57<br><br>Message édité par: robin, à: 18/12/07 09:33
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 18 ans 3 mois #1372
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:[Concours Scripting] import/export credentials
Astucieux.
Validé
Validé
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- daniel soares
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 133
- Remerciements reçus 0
il y a 18 ans 1 mois #1654
par daniel soares
Réponse de daniel soares sur le sujet Re:[Concours ] import/export credentials (validé)
ces deux scripts sont devenus indispensables pour moi
alors je me suis permis de faire une petite modif
comme je gere beaucoup de comptes differents j'ai tout integré dans le meme fichier
mais voila ca bug quand j'utilise import-credential avec des comptes identiques dont l'un est dans un domaine et l'autre en workgroup
du genre
domaine1\comptegeneric
et
\comptegeneric (utilisé pour du workgroup
la recherche sur \"comptegeneric\" donnant 2 resultats ca plante mon select-string
la solution de contournement que j'ai trouvé n'est pas tres elegante
elle consiste a ajouter l'argument -list qui va selectionner la premiere occurence mais ca m'oblige a penser a stoquer dans mon fichier le compte \comptegeneric ( c'est a dire celui qui est le plus court)
avant le compte domaine1\comptegeneric
j'espere avoir ete clair
il est clair aussi que ce script ne fonctionnerai pas avec deux comptes identiques ayant des mdp differents
[code:1]
# import-credential.ps1
param ($credential)
$filename = \"$home\admin.txt\"
$credential = $credential |foreach {$_.Replace(\"\\",\"\\\"«»)}
$loccred =(select-string $credential $filename -list).LineNumber
$account = get-content $filename | where {$_.readcount -gt $loccred-1 -and $_.readcount -lt $loccred+2}
$username = $account[0]
$password = $account[1]
$secpwd = convertto-securestring $password
new-object system.management.automation.PSCredential $username,$secpwd
[/code:1]
[code:1]
# export-credential.ps1
$credential = Get-Credential
$filename = \"$home\admin.txt\"
if ((Test-Path $filename) -eq $false) {New-Item $filename}
$domaine,$account = $credential.username.split(\"\\\"«»)
$loccred =(select-string \"^$domaine\\$account\" $filename).LineNumber
if ($loccred -eq $null){
$credential.username | Out-File $filename -Encoding oem -Append -Force
convertfrom-securestring $credential.password | Out-File $filename -Encoding oem -Append -Force
\"compte créé\"
}
else {
$result = get-content $filename
$result[$loccred] = convertfrom-securestring $credential.password
$result | Set-Content $filename
\"mot de passe modifié\"
}
[/code:1]
alors je me suis permis de faire une petite modif
comme je gere beaucoup de comptes differents j'ai tout integré dans le meme fichier
mais voila ca bug quand j'utilise import-credential avec des comptes identiques dont l'un est dans un domaine et l'autre en workgroup
du genre
domaine1\comptegeneric
et
\comptegeneric (utilisé pour du workgroup
la recherche sur \"comptegeneric\" donnant 2 resultats ca plante mon select-string
la solution de contournement que j'ai trouvé n'est pas tres elegante
elle consiste a ajouter l'argument -list qui va selectionner la premiere occurence mais ca m'oblige a penser a stoquer dans mon fichier le compte \comptegeneric ( c'est a dire celui qui est le plus court)
avant le compte domaine1\comptegeneric
j'espere avoir ete clair
il est clair aussi que ce script ne fonctionnerai pas avec deux comptes identiques ayant des mdp differents
[code:1]
# import-credential.ps1
param ($credential)
$filename = \"$home\admin.txt\"
$credential = $credential |foreach {$_.Replace(\"\\",\"\\\"«»)}
$loccred =(select-string $credential $filename -list).LineNumber
$account = get-content $filename | where {$_.readcount -gt $loccred-1 -and $_.readcount -lt $loccred+2}
$username = $account[0]
$password = $account[1]
$secpwd = convertto-securestring $password
new-object system.management.automation.PSCredential $username,$secpwd
[/code:1]
[code:1]
# export-credential.ps1
$credential = Get-Credential
$filename = \"$home\admin.txt\"
if ((Test-Path $filename) -eq $false) {New-Item $filename}
$domaine,$account = $credential.username.split(\"\\\"«»)
$loccred =(select-string \"^$domaine\\$account\" $filename).LineNumber
if ($loccred -eq $null){
$credential.username | Out-File $filename -Encoding oem -Append -Force
convertfrom-securestring $credential.password | Out-File $filename -Encoding oem -Append -Force
\"compte créé\"
}
else {
$result = get-content $filename
$result[$loccred] = convertfrom-securestring $credential.password
$result | Set-Content $filename
\"mot de passe modifié\"
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 18 ans 1 mois #1656
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:[Concours ] import/export credentials (validé)
Très bien dan,
Je vais de ce pas rajouter ce script à notre bibliothèque de scripts
Je vais de ce pas rajouter ce script à notre bibliothèque de scripts
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Concours ] import/export credentials (validé)