IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Pester et Enable-ADAccount


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut Pester et Enable-ADAccount
    Bonjour,

    Dans mon module PSCHSGActiveDirectory, j'ai une fonction Set-CHSGActiveUserActiveOn qui appelle 2 fonctions du module ActiveDirectory : Get-ADUser et Enable-ADAccount.

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Set-CHSGActiveUserActiveOn() {
        Param(
            [Parameter(
                Mandatory = $True,
                ValueFromPipeline = $True
            )]
            [String]$samAccountName
        )
        ...
        $user = Get-ADUser -Identity $samAccountName
        ...
        Enable-ADAccount -Identity $user
        ...
    }

    Ci-dessous, mon fichier de tests :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    BeforeAll {
        Import-Module PSCHSGActiveDirectory -Force
    }
     
    Describe 'Set-CHSGActiveUserActiveOn' {
        Context 'Without Reset Password' {
            BeforeAll {
                #Mock Get-ADUser -ModuleName PSCHSGActiveDirectory { }
                #Mock Enable-ADAccount -ModuleName PSCHSGActiveDirectory { }
            }
     
            It 'Tests Enable User' {
                PSCHSGActiveDirectory\Set-CHSGActiveUserActiveOn -User 'johndoe' | Should -BeNullOrEmpty
            }
        }
    }

    Lorsque je ne mock rien, le test bloque sur le Get-ADUser.

    Lorsque je ne mock que le Get-ADUser, le test bloque sur le Enable-ADAccount.

    Lorsque je mock les 2, le test bloque toujours sur le Enable-ADAccount avec le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    [-] Set-CHSGActiveUserActiveOn.Without Reset Password.Tests Enable User 42ms (40ms|2ms)
     ValidationMetadataException: L’argument est Null. Spécifiez une valeur valide pour l’argument, puis réessayez.
     ParameterBindingValidationException: Impossible de valider l'argument sur le paramètre «*Identity*». L’argument est Null. Spécifiez une valeur valide pour l’argument, puis réessayez.
    
    J'ai bien tenté de changer ma fonction Set-CHSGActiveUserActiveOn en mettant comme param un Microsoft.ActiveDirectory.Management.ADUser au lieu d'un string (ce qui au passage me permet de supprimer le Get-ADUser) mais le problème persiste.

    J'utilise les versions ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ModuleType Version    Name                                ExportedCommands
    ---------- -------    ----                                ----------------
    Manifest   1.0.1.0    ActiveDirectory                     {Add-ADCentralAccessPolicyMember, Add-ADComputerServiceAccount, Add-ADDomainControllerPasswordReplicationPolicy, Add-ADFineGrainedPasswordPolicySubject...}
    Binary     1.0.0.0    CimCmdlets                          {Export-BinaryMiLog, Get-CimAssociatedInstance, Get-CimClass, Get-CimInstance...}
    Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}
    Manifest   3.0.0.0    Microsoft.PowerShell.Security       {ConvertFrom-SecureString, ConvertTo-SecureString, Get-Acl, Get-AuthenticodeSignature...}
    Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
    Manifest   3.0.0.0    Microsoft.WSMan.Management          {Connect-WSMan, Disable-WSManCredSSP, Disconnect-WSMan, Enable-WSManCredSSP...}
    Script     5.3.1      Pester                              {Add-ShouldOperator, AfterAll, AfterEach, Assert-MockCalled...}
    Script     3.4.0      Pester                              {AfterAll, AfterEach, Assert-MockCalled, Assert-VerifiableMocks...}
    Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKeyHandler, Set-PSReadLineKeyHandler...}
    Je me demande quelle est la bonne syntaxe pour Mock cette fonction Enable-ADAccount.

    Vous remerciant par avance,

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Comme ça c'est bien
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        $user = Get-ADUser -Identity $samAccountName
        ...
        $user | Enable-ADAccount

    Si l'utilisateur viens d'être créé et qu'il n'a jamais utilisé son compte (changé de mot de passe) il me semble qu'il faut en définir un. Voir sujet similaire ici : https://www.powershell-scripting.com...%A9taire#31424
    Je ne sais pas si c'est cela ton problème.

    PS: C'est quoi un Mock ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut
    Bonjour,

    Merci pour le retour.

    En effet, on ne peut pas Enable-ADAccount un user qui n'a pas de mot de passe qui correspond à la politique de sécurité et il y a certainement d'autres contraintes mais ce n'est pas mon problème ici.

    L'objectif est de tester la fonction qui contient le Enable-ADAccount sans connexion à l'Active Directory en utilisant le module de tests unitaires Pester :
    https://pester-docs.netlify.app/docs/quick-start

    Le mock permet de remplacer une fonction par une autre. Par exemple, dans ma fonction à tester, j'ai un Get-ADUser. Les tests unitaires doivent pouvoir être effectués sans tenir compte de l'environnement. Autrement dit, on devrait pouvoir tester la fonction sans avoir accès à un Active Directory. Pour cela, on dit au script de test qu'on remplace la fonction native Get-ADUser par notre propre fonction Get-ADUser. Ainsi, chaque fois qu'il verra dans la fonction à tester Get-ADUser, il ne tentera pas de se connecter à un Active Directory mais il utilisera celle que j'ai écrite.

    Dans l'exemple ci-dessus, c'est cette ligne là :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    Mock Get-ADUser -ModuleName PSCHSGActiveDirectory { }

    J'aurais très bien pu aussi écrire :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Mock Get-ADUser -ModuleName PSCHSGActiveDirectory {
        Return New-Object Microsoft.ActiveDirectory.Management.ADUser Identity -Property @{
            SamAccountName = 'toto'
        }
    }

    Du coup, mon problème c'est qu'au lieu d'utiliser mon mock de Enable-ADAccount, il s'entête à vouloir des paramètres à la fonction native Enable-ADAccount et ça, je comprends pas.

Discussions similaires

  1. [VB.NET] ForeColor d'un control avec Enabled=False
    Par jennings dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/12/2004, 14h41
  2. DBGrid Enabled true/false > pb de rafraichissement
    Par Harry dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/10/2004, 16h50
  3. [VB.NET] ComboBox/Datagrid enabled mais pas en saisie
    Par Cereal123 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 14h11
  4. table en mode insertion et bouton enabled = true
    Par marie253 dans le forum Bases de données
    Réponses: 7
    Dernier message: 09/09/2004, 14h03
  5. [VB6] enabled récalcitrant
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 04/12/2002, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo