2017-08-17 37 views
1

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

回答

2

我相信有经验丰富的人可以帮助解决这个问题,但PowerShell似乎并没有将此反斜杠用于此行,因此它将其转换为不喜欢它的AD Filter解析器。我没有在about_ActiveDirectory_Filter中找到任何可以解释这一点的内容。反支线仍然用来逃避角色。可能新行被传递给AD Filter解析器,它不喜欢它。

我所知道的,工程的解决办法是建立自己的脚本块到前手一个变量,并传递到Get-Aduser

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

你好@Matt,这帮助我得到了一个可接受的解决方法。我不必创建一个单独的脚本块。仅仅结束每一行就足够了,并且让解析器寻找更多(我认为?)。它不会让我把多行代码放在评论中 - 试图找出把它放在哪里... –

0

发布由@马特的回答启发多行代码示例。只需结束每行并(删除反标)就足够了。而且似乎让解析器继续寻找更多。下面是基于他的回答工作示例

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" 
+0

现在我觉得很愚蠢,因为这只是PowerShell分析器的基本工作原理。令我惊讶的是,我从来没有想过要省略反拨,因为大多数多行评论通常不需要这样做。 – Matt

+0

这让我在过去一无所有,我从不记得它,所以现在我们已经在SO QA中发布了所有永恒的东西;-)。感谢您帮助我解决这个问题!下次Google会为我找到这篇文章,我确定。 –