我有一個關於語句和變量內代碼塊的簡單問題。我的腳本收集用戶輸入並創建一個可以在以後的powershell語句中使用的字符串。Powershell - 用變量替換codeblock
$filter = @()
While ($filter[-1] -ne "end") {
$filter += read-host 'Type the name of an OU you want to filter or type "end" to start the script'
if ($filter[-1] -eq "end") {
break
}
$strFilter += "`$_`.DistinguishedName -notlike `"*" + $filter[-1] + "*`" "
$strFilter += "-and "
}
$strFilter = $strFilter.SubString(0,$strFilter.length-5)
基本上用戶將鍵入然而,許多單詞,這些單詞將被追加到字符串"$_.DistinguishedName -notlike "*<WORD>*""
與-and
一起扔,直到進入最後一個字。
這部分工作正常,它使用這個生成的字符串來收集似乎沒有工作的信息;我有一種感覺,這是非常簡單的,我只是想念。
例如:
$computers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties "OperatingSystem","CanonicalName","Description"
$filteredComputers = $computers | where-object { $strFilter }
$ filteredComputers返回相同的結果$電腦這使我相信,我的字符串變量在哪裏對象的語句沒有做任何事情。
感謝任何幫助,謝謝。
'($ strFilter | Where {$ dn-like $ _})。Count -eq 0'似乎將所有內容標記爲false,例如即使它不屬於任何域控制器OU,輸入字符串「域控制器」仍將返回false。它不是真的,因爲有0比賽?也許我誤解了一些東西? – smierdziel
這意味着它正在匹配'$ strFilter'中的某個過濾項。'$ strFilter'的內容是什麼?也許你在那裏有一個過濾條件不應該 - 也許是'**'? –
我不相信'**'正在匹配,如果你在第一個while循環期間按下輸入,將實例集合到數組中,那麼會出現'**',我通常會檢查這個試圖過濾我的結果。當我複製粘貼上面的例子時,foo不會被返回。 – smierdziel