我很新,Pester
所以请多多包涵。我们正在尝试对一个非常大的脚本进行测试,该脚本执行一些活动目录查询并验证数据。我已将其简化为以下示例:
假人.ps1
Param (
[String]$OU,
[String[]]$Groups
)
$AllOUusers = Get-ADUser -Filter * -SearchBase $OU
$GroupMemberUsers = foreach ($G in $Groups) {
Get-ADGroupMember $G -Recursive | Get-ADUser -Properties whenCreated
}
Dummy.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
$Params = @{
OU = 'OU=users,DC=contoso,DC=com'
Groups = 'Group1', 'Group2'
}
Describe 'test' {
Mock Get-ADGroupMember {
[PSCustomObject]@{SamAccountName = 'Member1'}
[PSCustomObject]@{SamAccountName = 'Member2'}
}
Mock Get-ADUser {
[PSCustomObject]@{SamAccountName = 'User1'}
[PSCustomObject]@{SamAccountName = 'User2'}
[PSCustomObject]@{SamAccountName = 'User3'}
}
Mock Get-ADUser {
[PSCustomObject]@{SamAccountName = 'User4'}
[PSCustomObject]@{SamAccountName = 'User5'}
} -ParameterFilter {$identity -eq 'User1'}
."$here\$sut" @Params
it 'test 1' {
($AllOUusers | Measure-Object).Count | Should -BeExactly 3
}
it 'test 2' {
($GroupMemberUsers | Measure-Object).Count | Should -BeExactly 2
'User4', 'User5' | Should -BeIn $GroupMemberUsers.SamAccountName
}
}
错误:
Cannot validate argument on parameter 'Identity'.
在上述情况下,我们首先尝试收集特定 OU 中的所有用户帐户,然后收集特定安全组的所有成员。当我们拥有成员时,我们Get-ADUser
再次使用 CmdLet 来获取这些特定成员的更多详细信息。
最终目标是Mock
第一个Get-ADUser
返回所有用户帐户,第二个Mock
仅Get-ADUser
返回基于组成员身份(或模拟组成员身份)的一组特定用户帐户。
系统详情
- PowerShell 5.1
- 纠缠 4.1.1。
- 视窗服务器 2012 R1
- 广告模块 1.0.0.0。