はじめに
if文を使ってWhere-ObjectのCmdletを実行したい場合の方法を備忘録として残しておきます。
実行環境
カテゴリ | 内容 |
---|---|
OS | Windows 11 Pro 22H2 |
PSVersion | 5.1.22621.1778 |
Where-Objectの呼び出しに条件ロジックを組み込む
基本的にパイプラインではif文などのような条件文を全体に対して直接使うことはできません。
"ComputerName","IPAddress","Remark"
"A0001","10.0.0.1","Sample001"
"A0002","10.0.0.2","Sample002"
"A0003","10.0.0.3","Sample003"
"A0004","10.0.0.4","Sample004"
まずはエラーとなるケースを見てみます。
パイプライン中にif文を使って条件分岐させてみます。
# エラーとなるケース
Import-Csv "C:\Test\sample.csv" | if ($execFlg -eq $true) { Where-Object {$_.ComputerName = 'A0001'}}
# エラー内容
if : 用語 'if' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパ
スが正しいことを確認してから、再試行してください。
ifというコマンドレットが認識できないのでエラーとなります。
ですので、条件分岐したい場合はWhere-Object内に組み込む必要があります。
$execFlg = $true
$result = Import-Csv "C:\Test\sample.csv" | Where-Object {
if($execFlg -eq $true) {
$_.ComputerName -eq 'A0001'
} else {
$_.ComputerName -eq 'A0002'
}
}
# Result
ComputerName IPAddress Remark
------------ --------- ------
A0001 10.0.0.1 Sample001
最後に
Where-Object内に組み込めばif文などが利用できるようになります。
同様にSelect-Objectなどでも利用することができますので、是非ご参考までに!