PowerShell:如何通过where object cmdlet应用多个筛选器?

PowerShell:如何通过where object cmdlet应用多个筛选器?,powershell,Powershell,是否有更好的方法通过where object过滤对象,然后通过多个管道发送数据 $clients = Get-ADComputer -SearchBase "OU=Clients,DC=contoso,DC=com" -Filter * -Properties Description,OperatingSystem $clients | Where OperatingSystem -notli

是否有更好的方法通过
where object
过滤对象,然后通过多个管道发送数据

$clients = Get-ADComputer 
                -SearchBase "OU=Clients,DC=contoso,DC=com" 
                -Filter * 
                -Properties Description,OperatingSystem

$clients | Where OperatingSystem -notlike "*Windows 7*" 
                 | Where OperatingSystem -notlike "*Windows 10*"  
理想情况是一个复杂的过滤机制,就像我们可以用于
-Filter
参数一样。我本来希望能够使用如下内容

$Clients | Where { 
    (OperatingSystem -notlike "Windows 7") -and (OperatingSystem -notlike "Windows 10")
}

也许是这样的

$DesktopClients=@('Windows 7','Windows 10')
$Clients=$Clients -notmatch ($DesktopClients -join '|')

直接在查询中过滤比使用
Where Object
(首先检索所有对象)在事实之后过滤更有效。使用
-LDAPFilter
参数的示例:

Get-ADComputer -LDAPFilter "(&(!operatingSystem=Windows 7*)(!operatingSystem=Windows 10*))" -Properties operatingSystem,description
严格地说,这应该行得通

但是,您遇到的问题是,上面显示的简化的
Where Object
语法只在最简单的情况下有效。使用完整语法时,必须使用
$\uu
变量指定属性:

$clients | Where-Object {
    ($_.OperatingSystem -notlike '*Windows 7*') -and ($_.OperatingSystem -notlike '*Windows 10*')
}
但是,由于您使用的是
Get-ADComputer
,因此确实应该在该命令上使用
-Filter
属性。它将更快,并且对域控制器的工作也更少:

Get-ADComputer -SearchBase "OU=Clients,DC=contoso,DC=com" `
    -Filter "(OperatingSystem -notlike '*Windows 7*') -and (OperatingSystem -notlike '*Windows 10*')" `
    -Properties Description,OperatingSystem

(操作系统
->
($\u0.OperatingSystem
,正如@PetSerAl指出的那样,您的问题在于正确访问属性。-在Where对象筛选器中工作良好。这在PowerShell常见问题解答中出现过很多次。Active Directory是一个数据库。您永远不会从SQL数据库检索所有表上的所有列,然后在应用程序内存中对其进行筛选。LDAP也一样。感谢您的回复。我知道网络和域控制器的负担。但我必须补充一点,我正在对数据进行进一步处理,需要的不仅仅是“Windows 7”对象……因此提取“所有”数据(注意-searchBase限制)是更好的方法。
Get-ADComputer -SearchBase "OU=Clients,DC=contoso,DC=com" `
    -Filter "(OperatingSystem -notlike '*Windows 7*') -and (OperatingSystem -notlike '*Windows 10*')" `
    -Properties Description,OperatingSystem