1

在此处输入图像描述

我有一个字符串数组 $ServerNames,它有两个元素:“ServerName1”和“ServerName2”。然后我有一个相应的模拟:

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

没有过滤器的模拟被调用。有过滤器的没有。如果我删除过滤器较少的模拟,则实际调用 Get-ADComputer 命令行开关。为什么过滤后的模拟不会启动?

仅供参考,我尝试了 $server_names[0] 而不是将它们插入字符串中。

4

1 回答 1

2

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

  1. Identity参数类型为Microsoft.ActiveDirectory.Management.ADComputer

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

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

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

'ServerName' -eq $Identity

这种方式$Identity被转换为字符串,而不是字符串被转换为ADComputer对象。

于 2018-04-06T22:47:41.147 回答