没有调用ParameterFilter的模拟(Pester)

时间:2018-04-06 21:22:37

标签: powershell pester

enter image description here

我有一个字符串数组,$ ServerNames,有两个元素:' ServerName1'和' ServerName2'。然后我有一个相应的MOCK:

Mock 'Get-ADComputer' { $Server1; write-host 'test'}    
Mock 'Get-ADComputer' { $foo } -ParameterFilter { $Identity -eq "$(${server_names}[0])" }

没有过滤器的模拟被调用。有滤波器的那个没有。如果我删除了filter less mock,实际上会调用Get-ADComputer命令行开关。为什么赢得过滤后的模拟游戏?

F.Y.I。,我尝试了$ server_names [0],而不是在字符串中插入它们。

1 个答案:

答案 0 :(得分:1)

所以这里有一些事情发生。

  1. B#run()参数的输入为Identity

  2. PowerShell中的比较尝试转换无法直接比较的对象。这是从左到右完成的。

  3. 两个Microsoft.ActiveDirectory.Management.ADComputer个对象之间的比较只检查它们是否确实是同一个对象。单独创建的两个对象(即使具有相同的标准)将不会显示为相等。

  4. 简单的解决方法是反转比较

    ADComputer

    这样'ServerName' -eq $Identity 转换为字符串,而不是转换为$Identity对象的字符串。