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,