2017-08-17 36 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會爲我找到這篇文章,我確定。 –