【问题标题】:Filtering PowerShell Get-ADComputer Module results using Properties使用属性过滤 PowerShell Get-ADComputer 模块结果
【发布时间】:2019-01-06 06:09:57
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您的问题的可能原因是 您在过滤器中使用了 非 ASCII 范围(“Unicode”)引号,我是 猜测(我自己无法验证)。

    虽然 PowerShell 自身 处理 ASCII 范围和等效的非 ASCII 范围引号可互换,但外部世界通常不会

    虽然可能并不明显,但您传递给-Filter 的参数外部世界,因为它是解释它的 Active Directory 提供程序,其语法规则不同 来自 PowerShell,尽管表面上相似。

    因此,您应该仅使用 ASCII 范围的引号来表述您的 -Filter 参数

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

    请注意,我使用 '...' - 单引号 - 来括起参数,而不是脚本块语法 ({ ... }),尽管(遗憾地)广泛使用 - 是 best avoided
    始终使用 字符串 - 绝不使用 脚本块 ({ ... }) - 传递 -Filter 参数

    【讨论】:

      猜你喜欢
      • 2012-07-16
      • 2013-06-14
      • 1970-01-01
      • 2018-04-07
      • 2018-11-12
      • 1970-01-01
      • 2018-09-27
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多