ステートメント内のコードブロックと変数に関して簡単な質問があります。私のスクリプトはユーザー入力を収集し、後でPowerShellステートメントで使用できる文字列を作成します。
$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は$computersと同じ結果を返します。これにより、文字列変数を含むWhere-objectステートメントは何も実行していないと思います。
助けてくれてありがとう。