Meilleur auteur de réponses
Get-Credential script powershell Task Sequence MDT/WDS

Question
-
Bonjour,
Depuis quelque temps je configure une solution de déploiement (WDS/MDT) toutefois j'ai un script POWERSHELL qui permet de placé l'ordinateur sur laquelle l'image ce déploie dans la bonne OU.
Ce script fonctionne parfaitement si je mets mon login et mon mot de passe en clair dans les variables, mais malheureusement cela pose un soucis de confidentialité assez énorme j'essaye donc de passer par la fonctionnalité Get-Credential. Malheureusement si j'exécute mon script la console qui me demande mes login/mdp apparait bien toutefois lorsque je lance un déploiement cette console n'apparaît pas et par conséquent le script ne s'exécute pas.
J'ai essayé de lancé mon powershell depuis un CMD mais cela ne fonctionne pas non plus.
J'ai également regardé du coté de ServiceUI.exe mais de toute évidence je ne dois pas rentrer la bonne syntaxe.
Voici ma question donc comment m'assurer que mon script powershell m'affiche bien la console de la ligne de code Get-Credential.
Cordialement
Alexis
Réponses
-
Bonjour,
avec un password dans un fichier (encrypté) ca irait ?
https://www.leeholmes.com/blog/2008/06/04/importing-and-exporting-credentials-in-powershell/
creer le fichier avec mdp : (mdp only)
ConvertTo-SecureString "password" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content \\mdt\deployementshare$\param\pass.txt
import dans l'application:
$password = Get-Content \\mdt\deployementshare$\param\pass.txt | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential("xx",$password)
Olivier
- Modifié Olivier Chantraine lundi 4 novembre 2019 15:24
- Marqué comme réponse Alexis Despretz mercredi 6 novembre 2019 14:02
-
J'ai réussi, l'erreur venez du fait que j'avais généré le mot de passe avec un autre utilisateur.
J'ai finalement contourner le problème et sécurisé mon déploiement avec un premier script qui va générer le mot de passe crypté (donc avec le mot de passe en clair dans le code source) dans un dossier accessible uniquement par les admins du domaine.
Ce script créeé le fichier password directement en local sur la machine déployée, ce fichier est ensuite utilisé par un second script pour joindre et placer ma machine dans la bonne OU.
Enfin un dernier script supprime le fichier password.
Voici le contenu des 3 scripts si ça peut en aider certains.
Create.ps1 (Création du fichier password)
ConvertTo-SecureString "MonMotDePasse" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content c:\Users\Administrateur\Documents\password.txt
JoinDomainOu.ps1 (Joint l'hôte au domaine et le positionne dans la bonne OU et l'ajoute dans les bons groupe)
import-module ActiveDirectory $domain = "mon.domaine" $password = Get-Content c:\Users\Administrateur\Documents\password.txt $password=$password | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential("MonLogin",$password) $ou = "OU=DOTNET,OU=DEVELOPPEUR,OU=CLIENTS,OU=ORDINATEURS,DC=Mon,DC=DOMAINE" Add-computer -DomainName $domain -Credential $credential -OUPath $ou Add-ADGroupMember “MONGROUPE1” –members $env:ComputerName$ -Credential $credential Add-ADGroupMember “MONGROUPE2” –members $env:ComputerName$ -Credential $credential
et enfin le script qui efface le fichier de mot de passe
REMOVEPASS.ps1
Remove-Item -Path c:\Users\Administrateur\Documents\password.txt
- Marqué comme réponse Alexis Despretz mercredi 6 novembre 2019 13:42
- Modifié Alexis Despretz mercredi 6 novembre 2019 13:43
Toutes les réponses
-
Bonjour,
avec un password dans un fichier (encrypté) ca irait ?
https://www.leeholmes.com/blog/2008/06/04/importing-and-exporting-credentials-in-powershell/
creer le fichier avec mdp : (mdp only)
ConvertTo-SecureString "password" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content \\mdt\deployementshare$\param\pass.txt
import dans l'application:
$password = Get-Content \\mdt\deployementshare$\param\pass.txt | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential("xx",$password)
Olivier
- Modifié Olivier Chantraine lundi 4 novembre 2019 15:24
- Marqué comme réponse Alexis Despretz mercredi 6 novembre 2019 14:02
-
Bonjour Olivier,
Merci pour ton retour, ne faut il pas rajouter une clé de cryptage quelque part?
J'ai une erreur lorsque j'execute manuellement la ligne:
$password = Get-Content \\mdt\deployementshare$\param\pass.txt | ConvertTo-SecureString
ConvertTo-SecureString : Clé non valide pour l’utilisation dans l’état spécifié.
Au caractère Ligne:1 : 66
+ ... ntent \\172.16.1.12\mdt$\params\password.txt | ConvertTo-SecureString
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (:) [ConvertTo-SecureString], CryptographicException
+ FullyQualifiedErrorId : ImportSecureString_InvalidArgument_CryptographicError,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
Cordialement
Alexis?
-
Tu as bien fait cette operation avant ?
Ca doit creer un fichier texte qui sera encrypté.
ConvertTo-SecureString "password" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content \\mdt\deployementshare$\param\pass.txt
si oui, tests la en local alors, plutot qu'en chemin réseau. ici, j'ai adapté le script sans savoir s'il y avait des restictiions dans le chemin unc de MDT
- Modifié Olivier Chantraine lundi 4 novembre 2019 17:40
-
-
Je viens de tester, avec mon compte admin dans mon environnement de test :
convertTo-SecureString "password" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content c:\script\pass.txt $password = Get-Content c:\script\pass.txt | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential("test",$password)
et c'est fonctionnel.
Il y a bien un fichier pass.txt qui s'est créer dans le répertoire cible ?
et il a un contenu type : 01000000d08c9ddf0115d111.... ?
Pourriez vous valider que le read est fonctionnel apres ceci ?
convertTo-SecureString "password" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content c:\script\pass.txt $password = Get-Content c:\script\pass.txt $password
Olivier
-
Oui le read est bien fonctionnel, en fait y'a pas de soucis le fichier est bien créer avec une série de caractères à l'intérieur, ici j'obtiens bien le contenu du fichier lorsque j'exécute $password (dans sa version crypté).
En revanche si j'essaye d'utiliser :
$credential = New-Object System.Management.Automation.PsCredential("monnomuser",$password)
J'obtiens l'erreur suivante :
New-Object : Surcharge introuvable pour « PSCredential » et le nombre d'arguments « 2 ».
Cordialement
Alexis
-
-
Justement avec le ConvertTo-SecureString j'obtiens la premiere erreur
$password = Get-Content g:\mdt\params\password.txt| ConvertTo-SecureString
ConvertTo-SecureString : Clé non valide pour l’utilisation dans l’état spécifié.
Au caractère Ligne:3 : 53le fichier existe bien et le chemin est correctement renseigné.
-
donc, testons
$password = Get-Content g:\mdt\params\password.txt $password (ici, il va display le contenu si c est ok) $password= $password | ConvertTo-SecureString
Est qu'il y a une erreur avec ces commandes ?
- Modifié Olivier Chantraine mardi 5 novembre 2019 13:39
-
-
-
J'ai réussi, l'erreur venez du fait que j'avais généré le mot de passe avec un autre utilisateur.
J'ai finalement contourner le problème et sécurisé mon déploiement avec un premier script qui va générer le mot de passe crypté (donc avec le mot de passe en clair dans le code source) dans un dossier accessible uniquement par les admins du domaine.
Ce script créeé le fichier password directement en local sur la machine déployée, ce fichier est ensuite utilisé par un second script pour joindre et placer ma machine dans la bonne OU.
Enfin un dernier script supprime le fichier password.
Voici le contenu des 3 scripts si ça peut en aider certains.
Create.ps1 (Création du fichier password)
ConvertTo-SecureString "MonMotDePasse" -AsPlainText -Force | ConvertFrom-SecureString | Set-Content c:\Users\Administrateur\Documents\password.txt
JoinDomainOu.ps1 (Joint l'hôte au domaine et le positionne dans la bonne OU et l'ajoute dans les bons groupe)
import-module ActiveDirectory $domain = "mon.domaine" $password = Get-Content c:\Users\Administrateur\Documents\password.txt $password=$password | ConvertTo-SecureString $credential = New-Object System.Management.Automation.PsCredential("MonLogin",$password) $ou = "OU=DOTNET,OU=DEVELOPPEUR,OU=CLIENTS,OU=ORDINATEURS,DC=Mon,DC=DOMAINE" Add-computer -DomainName $domain -Credential $credential -OUPath $ou Add-ADGroupMember “MONGROUPE1” –members $env:ComputerName$ -Credential $credential Add-ADGroupMember “MONGROUPE2” –members $env:ComputerName$ -Credential $credential
et enfin le script qui efface le fichier de mot de passe
REMOVEPASS.ps1
Remove-Item -Path c:\Users\Administrateur\Documents\password.txt
- Marqué comme réponse Alexis Despretz mercredi 6 novembre 2019 13:42
- Modifié Alexis Despretz mercredi 6 novembre 2019 13:43
-
Ok merci pour le retour.
n'hésitez pas à voter pour les réponses qui vous ont aidée.
Vous pouvez aussi proposer deux réponses. ca motive les gens qui aident quand la réponse donnée est reconnue.
- Modifié Olivier Chantraine mercredi 6 novembre 2019 13:57