PowerShell 中 Get-ADUser 多行过滤器的反引号

Backtick for Get-ADUser multi-line filter in PowerShell

我在使用 Get-AdUser 命令在 PowerShell 中对多行过滤器表达式 使用反引号(重音符)时遇到问题。具体来说,我正在 Windows 7.

上测试 PowerShell 2.0

一个工作示例(过滤器都在一行上):

Get-ADUser -Filter {Name -like "Smith*" -and Enabled -eq $True}
# This works as expected, a list of matching objects is returned on pipeline

一个错误的例子(过滤器被分割成多行):

Get-ADUser -Filter {Name -like "Smith*" `
-and Enabled -eq $True}
# Error message indicates "Operator not supported at position [of backtick]

第二个损坏的示例(多行过滤器 -and 在反引号之前):

Get-ADUser -Filter {Name -like "Smith*" -and `
Enabled -eq $True}
#Error message indicates "Syntax error at position [of backtick]"

请提供解决方法示例或解释不支持这些多行过滤器的原因。我无法弄清楚这一点,但这似乎应该是 PowerShell 中一种简单而常见的操作类型。

我相信更有经验的人可以帮助解决这个问题,但是 PowerShell 似乎没有为这一行消耗反引号,所以它进入了不喜欢它的 AD 过滤器解析器。我在 about_ActiveDirectory_Filter 中没有找到任何可以准确解释这一点的内容。不过,反引号仍用于转义字符。换行符可能正在传递给 AD 过滤器解析器,但它不喜欢它。

我知道可行的解决方法是事先将您的脚本块构建到一个变量中,然后将其传递给 Get-Aduser

$sb = {
    Name -like "Matt*" -and
    Enabled -eq $True
}
Get-ADUser -Filter $sb

发布受@Matt 回答启发的多行代码示例。每行以 -and (删除反引号)结束就足够了。 -and 似乎让解析器寻找更多。这是基于他的回答的一个工作示例

Get-ADUser -Filter {Name -like "Smith*" -and
Enabled -eq $True}
# Works as expected, drop backtick and end each line with -and (or similar)

过滤器和脚本块解析器的行为很奇怪,但我可以接受此解决方法。要确认这似乎只与 trouble 命令的 -Filter 选项有关,请参阅以下 使用带有脚本块的直接 powershell 的示例 (反引号多行转义有效)。

& {1 -eq 1 `
-and 2 -eq 2}
# This works as expected, output is "True"