使用属性过滤PowerShell Get-ADComputer Module结果

时间:2018-07-30 02:47:05

标签: powershell

我一直在使用PowerShell查询域并过滤域内域客户端和服务器上的结果以用于报告。

我有一个有效的PowerShell命令,该命令利用“ Get-ADComputer”模块列出域的所有成员,并在可以导​​出到csv的表中显示OS和OS属性。

PS C:\Users\Account.Domain> Get-ADComputer -Filter * -Property * | Format-Table Name,OperatingSystem,OperatingSystemService
Pack,OperatingSystemVersion -Wrap –Auto

Name            OperatingSystem                   OperatingSystemServicePack OperatingSystemVersion
----            ---------------                   -------------------------- ----------------------
SRV-DC02        Windows Server 2012 R2 Datacenter                            6.3 (9600)
SRV-DC01        Windows Server 2012 R2 Datacenter                            6.3 (9600)
SRV-FTP01       Windows Server 2012 R2 Datacenter                            6.3 (9600)
SRV241          Windows Server 2008 R2 Standard   Service Pack 1             6.1 (7601)
Computer01      Windows 7 Professional            Service Pack 1             6.1 (7601)
Computer02      Windows 8.1 Pro                                              6.3 (9600)

我正在尝试利用此命令的2个附加版本来进一步过滤上述结果,并且仅显示包含“ OperatingSystem”的Get-ADComputer Properties字段的条目,其中包含单词“ Windows Server”。此PowerShell命令引发语法错误,我不确定原因是什么?

PS C:\Users\Account.Domain> Get-ADComputer -Filter {OperatingSystem -Like “Windows *Server*”} -Property * | Format-Table Na
me,OperatingSystem,OperatingSystemServicePack -Wrap –Auto
Get-ADComputer : Error parsing query: 'OperatingSystem -Like “Windows *Server*”' Error Message: 'syntax error' at
position: '23'.
At line:1 char:1
+ Get-ADComputer -Filter {OperatingSystem -Like “Windows *Server*”} -Property * |  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Get-ADComputer], ADFilterParsingException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Micr
   osoft.ActiveDirectory.Management.Commands.GetADComputer

该命令的第二次迭代与第一次相反。它应排除所有包含“服务器”一词的条目,但是此命令也不起作用,并引发以下语法错误?

PS C:\Users\Account.Domain> Get-ADComputer -Filter {OperatingSystem -NotLike “*server*”} -Property * | Format-Table Name,Op
eratingSystem,OperatingSystemServicePack -Wrap -Auto
Get-ADComputer : Error parsing query: 'OperatingSystem -NotLike “*server*”' Error Message: 'syntax error' at position:
'26'.
At line:1 char:1
+ Get-ADComputer -Filter {OperatingSystem -NotLike “*server*”} -Property * | Forma ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Get-ADComputer], ADFilterParsingException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Micr
   osoft.ActiveDirectory.Management.Commands.GetADComputer

谢谢。

1 个答案:

答案 0 :(得分:1)

问题的可能原因是您在过滤器中使用了非ASCII范围(“ Unicode”)引号,我将< em> guessing 不支持(我自己无法验证)。

PowerShell 本身可互换地对待ASCII范围和等效的非ASCII范围引号 ,而外部世界通常不会这样做。。 / p>

虽然可能不太明显,但是您传递给-Filter 的参数是外界的,因为它是Active Directory提供程序对其进行解释的,其语法规则 differ < / em>来自PowerShell,尽管存在表面上的相似之处。

因此,您应该仅使用ASCII范围引号来构成-Filter参数

-Filter 'OperatingSystem -like "Windows *Server*"'
-Filter 'OperatingSystem -notlike "Windows *Server*"'

请注意,我使用'...'(单引号)将参数括起来,而不是脚本块语法({ ... }),尽管(令人遗憾地)广泛使用,但脚本块语法却{{3 }}。
始终使用字符串-永远不要使用脚本块{ ... })-传递-Filter参数。。 >