質問: "IF_000020" #べた書き getType(${global:if_id}) #関数呼び出し echo `n echo "##############返されたパラメータ:" echo "${global:subcon_type}" #jissekiを取っていればOK if($global:subcon_type -eq "9"){ echo 'エラー' } else{ echo $global:subcon_type } echo ' スクリプト終了' ``` <連携ファイル.csv> カテゴリ,IF_ID,種別,ファイル,有無 データ取込,IF_000010,DataT,ファイル1.zip,有 データ取込,IF_000010,DataT,ファイル2.zip,有 データ取込,IF_000010,DataT,ファイル3.zip,有 実績データ,IF_000020,jisseki,"ファイル1.zip",無 実績データ,IF_000020,jisseki,ファイル2.zip,無 契約データ取込,IF_000030,keiyaku,ファイル1.zip,無 契約データ取込,IF_000030,keiyaku,ファイル2.zip,無
回答: まず、最初に`Import-Csv '.\連携ファイル.csv' -Delimiter "," | ForEach-Object {$_."IF_ID" -eq $global:if_id }`でForeachまで実行していますがこちらをまずやめて `$CSVFile = Import-Csv '.\連携ファイル.csv' -Delimiter "," | Select-Object -First 1` とします。こうすることで`$CSVFile`に一つだけ結果を受け取ることができます。 このサイトを見るとわかりますがV3以降は`Select-Object -First`でちゃんとループから抜けられるようになっています。 あとは `if ($CSVFile -eq $null)`を使えば あるのか、ないのかで処理を分けることができます。 そんな感じでどうでしょうか? --追記-- すみません `foreach`は比較に使っていたのですね 誤解していました `Foreach`ではなく`Where-Object`を使ってそのあとに`Select-Object -First`を使ってください。 --追記-- すみません ちゃんと理解していませんでした。 まとめてから再度投稿します。 --追記-- 確認してきました。 psobjectに変換してから扱うと楽に扱えます。 サンプル ``` [psobject]$Psobj = Import-Csv '.\連携ファイル.csv' $Item = $psobj | Where-Object {$_.IF_ID -eq $global:if_id} | Select-Object -First 1 if ($Item -eq $null) { Write-Host "値が見つかりません" } else { Write-Host "`カテゴリ : $($Item.カテゴリ)" Write-Host "`IF_ID : $($Item.IF_ID)" Write-Host "`種別 : $($Item.種別)" Write-Host "`ファイル : $($Item.ファイル)" Write-Host "`有無 : $($Item.有無)" } ``` --追記-- 何度もごめんなさい わざわざ`[psobject]$psobj`なんてしなくても ``` $Item = $(Import-Csv '.\連携ファイル.csv') | Where-Object {$_.IF_ID -eq $global:if_id} | Select-Object -First 1 ``` で十分でした。 --追記-- すみません `$(Import-Csv '.\連携ファイル.csv')` の`$()`を外してください これでCSVが20万行とかあっても最初のほうにデータがあればすぐ終わります。 データが見つかり次第`impower-CSV`からちゃんと抜けれるはずです。 ``` $Item = Import-Csv '.\連携ファイル.csv' | Where-Object {$_.IF_ID -eq $global:if_id} | Select-Object -First 1 ```