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