我有一个字符串数组,$ 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],而不是在字符串中插入它们。
答案 0 :(得分:1)
所以这里有一些事情发生。
B#run()
参数的输入为Identity
PowerShell中的比较尝试转换无法直接比较的对象。这是从左到右完成的。
两个Microsoft.ActiveDirectory.Management.ADComputer
个对象之间的比较只检查它们是否确实是同一个对象。单独创建的两个对象(即使具有相同的标准)将不会显示为相等。
简单的解决方法是反转比较
ADComputer
这样'ServerName' -eq $Identity
转换为字符串,而不是转换为$Identity
对象的字符串。