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

时间:2017-08-17 16:47:54

标签: powershell escaping multiline backticks

我在使用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中一个简单而常见的操作类型。

2 个答案:

答案 0 :(得分:2)

我确信更有经验的人可以帮助解决这个问题,但PowerShell对此行似乎没有使用反引号,因此它正在向不喜欢它的AD Filter解析器使用。我在about_ActiveDirectory_Filter中找不到任何可以解释这一点的内容。 Backtick仍然习惯于逃避角色。可能新行被传递给AD Filter解析器,它不喜欢它。

我知道的解决方法是先将脚本块构建到变量中并将其传递给Get-Aduser

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

答案 1 :(得分:0)

发布受@ Matt答案启发的多行代码示例。用 - 和(删除反向标记)结束每一行就足够了。 - 似乎让解析器继续寻找更多。根据他的答案,这是一个工作示例

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

使用过滤器和脚本块解析器的奇怪行为,但这种解决方法对我来说是可以接受的。要确认这似乎与故障命令的-Filter选项有关,请参阅以下示例,使用带有脚本块的直接PowerShell (反向勾选多行转义工作)。

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