none
Get-Credential script powershell Task Sequence MDT/WDS RRS feed

  • 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

    lundi 4 novembre 2019 14:34

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




    lundi 4 novembre 2019 15:21
  • 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


    mercredi 6 novembre 2019 13:41

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




    lundi 4 novembre 2019 15:21
  • 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?

    lundi 4 novembre 2019 16:34
  • 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


    lundi 4 novembre 2019 17:33
  • Rebonjour,

    J'ai éssayé en remplaçant le chemin réseau par le chemin local sur la machine 172.16.1.12 et j'obtiens la même erreur.

    Cordialement

    Alexis

    mardi 5 novembre 2019 09:07
  • 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

    mardi 5 novembre 2019 09:33
  • 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

    mardi 5 novembre 2019 10:42
  • étrange,  c'est parceque $password n'est pas un secure string.

    Vous n'avez pas oublié le

    | ConvertTo-SecureString 

    ?

    quitte à la faire à la fin :

    $password= $password | ConvertTo-SecureString

    mardi 5 novembre 2019 11:11
  • 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 : 53

    le fichier existe bien et le chemin est correctement renseigné.

    mardi 5 novembre 2019 13:11
  • 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 ?

    mardi 5 novembre 2019 13:39
  • J'ai toujours la même erreur.
    mardi 5 novembre 2019 13:45
  • Vous pouvez tester en élevant en powershall admin ?  (run as administrator) ?
    mardi 5 novembre 2019 13:57
  • 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


    mercredi 6 novembre 2019 13:41
  • 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.


    mercredi 6 novembre 2019 13:52