$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"
$test = Foreach ($user in $users){
Get-ADUser -Filter {Name -like "*$user*" } | Select-Object SamAccountName, Enabled
}
$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"
上記で実行すると、CSVに何もエクスポートされませんが、Write-Host "$User"
ユーザーのリストをエクスポートします。だから私はエクスポート機能が動作することを知っています。
このように実行すると:
$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"
$test = Foreach ($user in $users){
Get-ADUser -Filter {Name -like "*User 1*" } | Select-Object SamAccountName, Enabled
}
$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"
これは、$ user変数に行が含まれている回数の「ユーザー1」の結果(ドキュメントの最初のユーザーであり、これは例外の結果です)をCSVに入力します。だから私は私の検索方法が機能することを知っています。
だから私の質問/問題は、CSVファイルをループして、オブジェクトを使用して検索するときに実際に何かを見つける方法ですか?手動で入力した文字列を使用すると機能しますが、オブジェクトを使用すると機能しません。
CSVは次のようにフォーマットされます。
USER 1
USER 2
USER 3
USER 4
編集:問題はforeachループとは関係ありません、私が次を実行する場合:
$test = "TEST USER"
Get-ADUser -Filter {Name -eq "*$test*"}
それはまだ機能しません、フィルタリングがどのように行われるかである必要があります。
通常、複数の文字列の組み合わせとして検索フィルターを作成するときは、入力自体では作成しません。したがって、次のようにする代わりに(たとえば、あなたが見つけたとおり)
Get-ADUser -Filter {Name -like "*$user*"}
フィルターを作成して関数を呼び出します
$filter = "*" + $user + "*"
Get-ADUser -Filter {Name -like $filter}
これが、複数の文字列の組み合わせとしてLDAPフィルターを正常に構築する唯一の方法であることがわかりました。これにより、クエリを実行する前にフィルターを確認することもできます。
Eric Schnabelの下の私のコメントによると、フィルターの引用符内に「$」変数を入れないでください。フィルターを機能させるには、更新スクリプトに変数にワイルドカードを組み込む必要があります。
$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"
$test = Foreach ($user in $users){
$user = "*" + $user + "*"
Get-ADUser -Filter {Name -like $user } | Select-Object SamAccountName, Enabled}
$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"
私の編集で述べたように、それはフィルタリングと関係がありました。私は実際に私が解決策を見つけたので、かなり愚かだと感じています。
これは機能しません:
Get-ADUser -Filter {Name -like "*$user*" }
これはどちらも機能しません:
Get-ADUser -Filter {Name -like "$user" }
しかし、これはうまくいきます:
Get-ADUser -Filter {Name -like $user}
"または*がある場合、それは壊れてエラーメッセージなしでnu関数だけになります。
ここに解決策が見つかりました: http://www.powershellish.com/blog/2015-11-17-ad-filter