1. ホーム
  2. powershell

[解決済み] Powershell - 空のパイプ要素は許可されません。

2022-02-25 13:18:06

質問

結果をcsvファイルにパイプ出力しようとすると、次のようなエラーメッセージが表示されます - "空のパイプ要素は許可されていません"。なぜこのようなことが起こるのか、何か心当たりはありますか?

$apps = Import-CSV apps.csv
$computers = Import-CSV compobj.csv
foreach($computer in $computers) {    
    $computerLob = $computer.lob
    $lobApps = $apps | ? {$_.lob -eq $computerLob}
    foreach($app in $lobApps){
       $appLocation = $app.location
       $installed=Test-Path "\\$computerHostname\$appLocation"
       $computerHostname = $computer.hostname     
       $results = new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} | select Computer,App,Installed 
       $results 
    } 
} | Export-csv "results.csv" -NoTypeInformation

こんなことをやってみました。

$results | Export-csv "results.csv" -NoTypeInformation

をforeachループの中に入れても、最後のレコードしか返さない。

どうすればいいですか?

foreach文の中でアイテムを処理しながらも、パイプライン上にあることを期待しているのです。

これはよくあるエラーで、詳細は以下の記事で説明されています。 エッセンシャルPowerShell。foreach を理解する エッセンシャルPowerShell foreachを理解する(補遺) .

こんな感じで、欲しいものが実現できるはずです。

$apps = Import-CSV apps.csv
$computers = Import-CSV compobj.csv
$computers | foreach {
    $computer = $_
    $computerLob = $computer.lob
    $lobApps = $apps | ? {$_.lob -eq $computerLob}
    $lobApps | foreach {
       $app = $_
       $appLocation = $app.location
       $installed=Test-Path "\\$computerHostname\$appLocation"
       $computerHostname = $computer.hostname     
       new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 
    } 
} | Export-csv "results.csv" -NoTypeInformation