誰能幫助我解決正確的引號問題,我需要在Get-ADUser -Filter搜索中的名字和姓氏的變數旁邊使用通配符
。我相信我需要轉義單引號,但不能成功回傳。
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter "Name -like `*$LastADname`* $FirstADname`*"/span>
回傳。Get-ADUser : 決議查詢時出錯。'Name -like *Doe*John*' 錯誤資訊。'語法錯誤'在12號位置
這讓我知道它確實解決了變數,但沒有解決*。如果我把所有的單引號包裹在變數和*的雙引號中,就不會解決變數。像下面這樣
$LastADname = John
$FistADname = Doe
Get-ADUser -Filter 'Name -like "*$LastADname*$FirstADname*"'/span>
我認為這是因為上面的問題解決了,但是沒有產生任何的vaule。當我把var替換成文本時,它產生了結果
。Get- ADUser -Filter 'Name -like "*Doe*John*"'/span>
uj5u.com熱心網友回復:
你需要用單引號來包裹內部的過濾器字串:
Get-ADUser -Filter "Name -like '*$LastADname*$FirstADname*' "
你不需要用`來逃避*字符。第二次嘗試用單引號'包裹外層字串沒有成功,因為單引號字串是按字面意思渲染的。雙引號"字串允許你擴展變數,使用`的轉義序列,并回傳字串中的子運算式。
然而,如果目標欄位值包含
'(或可能包含,如果由一個變數控制),例如名稱O'Niel,這將破壞內部查詢,因為'將被決議為搜索詞的結束,并將導致一個錯誤,因為后面的內容幾乎肯定不是有效的表達語法。幸運的是,轉義引號很簡單,你不需要擔心使用`字符來轉義。
請看下面的例子,我們想找到所有名字欄位包含O'字串的用戶,就像上面的O'Niel例子。在這個例子中,搜索詞是用一個變數提供的,就像在OP的用例中。只需為-Filter字串使用雙引號,并為內部引號提供""(這與`"的呈現方式相同):
$term = "O'Niel"
Get-ADUser -Filter "Name -like ""*$term*""
這不會破壞內部查詢,因為現在"表示術語邊界,而不是'。
注意:如果你的搜索詞包含",你將需要用轉義來代替。如果您的搜索詞包含both'和",您就不能使用-Filter來搜索該特定詞。然而,你可以利用-LDAPFilter來做這件事,因為引號不被用作搜索詞的界限。
當您搜索回傳DistinguishedName的欄位時,事情會變得更復雜,但我不會用這些細節來干擾這個答案。請閱讀上述鏈接以了解更多資訊,我最終會在底部更新我的鏈接答案,提供關于轉義序列和DN/CN過濾的更多資訊。
請參閱我寫的這個答案,以了解有關在 RSAT AD cmdlets 中有效使用
-Filter引數的更多資訊。我已經更新了該答案,加入了關于過濾器轉義和處理 "帶引號的名稱 "情況的更完整的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316464.html
標籤:
上一篇:為docker容器創建一個空目錄
