反向PowerShell中的Get-ADUser多行过滤器
我有在PowerShell中使用Get-AdUser命令对多行过滤器表达式使用反斜杠(重音符号)时遇到问题。具体而言,我在Windows测试PowerShell的2.0 7.反向PowerShell中的Get-ADUser多行过滤器
工作示例(滤波器是全部在一行):
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 Filter解析器。我没有在about_ActiveDirectory_Filter中找到任何可以解释这一点的内容。反支线仍然用来逃避角色。可能新行被传递给AD Filter解析器,它不喜欢它。
我所知道的,工程的解决办法是建立自己的脚本块到前手一个变量,并传递到Get-Aduser
$sb = {
Name -like "Matt*" -and
Enabled -eq $True
}
Get-ADUser -Filter $sb
发布由@马特的回答启发多行代码示例。只需结束每行并(删除反标)就足够了。而且似乎让解析器继续寻找更多。下面是基于他的回答工作示例:
Get-ADUser -Filter {Name -like "Smith*" -and
Enabled -eq $True}
# Works as expected, drop backtick and end each line with -and (or similar)
滤镜和脚本块解析器奇怪的现象,但这种解决方法是可以接受我。要确认这似乎只是与故障命令的-Filter选项有关,请参阅以下示例,使用带有脚本块(back-tick多行转义工程)的直接powershell。
& {1 -eq 1 `
-and 2 -eq 2}
# This works as expected, output is "True"
现在我觉得很愚蠢,因为这只是PowerShell分析器的基本工作原理。令我惊讶的是,我从来没有想过要省略反拨,因为大多数多行评论通常不需要这样做。 – Matt
这让我在过去一无所有,我从不记得它,所以现在我们已经在SO QA中发布了所有永恒的东西;-)。感谢您帮助我解决这个问题!下次Google会为我找到这篇文章,我确定。 –
你好@Matt,这帮助我得到了一个可接受的解决方法。我不必创建一个单独的脚本块。仅仅结束每一行就足够了,并且让解析器寻找更多(我认为?)。它不会让我把多行代码放在评论中 - 试图找出把它放在哪里... –