正如我警告我的那样,这很可能是重复的,但我没有在建议框中看到与我的问题类似的任何内容。这也很可能是一个非常简单的问题,但我真的不知道该如何向Google发送此类问题。之间有什么区别
Get-ADComputer -properties ipv4address -filter * | ? ipv4Address -ne $null
并且:
Get-ADComputer -properties ipv4address -filter {ipv4Address -ne $null}
对我来说,第一个有效,但第二个无效。错误指出“ $ null”尚未定义。我以为$ null随时可以在PowerShell中使用?有什么作用?
答案 0 :(得分:1)
如here所述,有两种方法来限制AD cmdlet的输出。
首先,您可以使用-LDAPFilter
或-Filter
参数来过滤输出。其次,您可以将结果通过管道传递到Where-Object
cmdlet。
在可能的情况下,第一种方法会更有效率,原因有两个:
筛选是在域控制器而不是本地上完成的 客户。域控制器更可能是服务器类 针对查询进行了优化的计算机。
过滤会导致较小的结果集通过网络从网络发送 客户端的域控制器。相反,Where-Object cmdlet仅在结果集完成后才在本地客户端上筛选 从远程计算机发送。
但是,当涉及到对Ip4Address进行过滤时,由于以下原因,我认为第二个示例不起作用:
对于IP地址(IPv4或IPv6),没有Active Directory计算机对象的属性。 Get-ADComputer
cmdlet使用[System.Net.Dns]::GetHostEntry($Computer).AddressList
从DNS检索地址,其中$ Computer是计算机的名称。这将返回一个IP地址数组,包括IPv4和IPv6。但是-IPv4Adress
或-IPv6Address
属性仅返回一个(或不返回)。