我有以下代碼:
$ErrCodes = Get-AlarmIDs_XML -fileNamePath $Paper_Dialog_FullBasePath
$excelDevice = Get_ErrorCodes -errorCodeListFilePath $outFilePath -ws "DEVICE COMPONENT MAP"
foreach ($errCode in $ErrCodes | Where-Object{$excelDevice.Common_Alarm_Number -eq $errCode.Value })
{
#$dataList = [System.Collections.Generic.List[psobject]]::new()
#$resultHelp = [System.Collections.Generic.List[psobject]]::new()
Write-Host "another:"
$err = $errCode.Value #get each error code to lookup in mdb file
$key = $errCode.Key
Write-Host $err
...
}
但它肯定會在不應該的時候進入 foreach 回圈。
我的意圖是使用 foreach,如果它在 $ErrCodes 中有一個值,那么它應該繼續下面的代碼。
如果您需要查看執行檔案讀取的函式,請告訴我,但資料結構如下所示:
$excelDevice:
[Object[57]]
[0]:@{Common_Alarm_Number=12-2000}
[1]:@{Common_Alarm_Number=12-5707}
[2]:@{Common_Alarm_Number=12-9}
[3]:@{Common_Alarm_Number=12-5703}
...
$ErrCodes:
[Object[7]]
[0]:@{Key=A;Value=12-5702}
[1]:@{Key=B;Value=12-5704}
[2]:@{Key=C;Value=12-5706}
[3]:@{Key=D;Value=12-5707}
...
所以我們只關心 $ErrCodes 中也存在于 $excelDevice 中的那些。
當我單步執行代碼時,由于某種原因,它進入了 12-5702 的 foreach 代碼,而它不應該存在(將 12-5702 列印到螢屏上)。我知道我不想使用 12-5702,因為它不在 $excelDevice 串列中。
我如何讓 Where-Object 過濾掉不在 $excelDevice 串列中的 $ErrCodes?我不想處理沒有此設備資料的錯誤代碼。
uj5u.com熱心網友回復:
現在,您正在測驗中的任何值(可能計算為陣列)是否與中的所有值$excelDevice.Common_Alarm_Number完全相同- 這沒有多大意義。$errCodes.Value
看起來您需要測驗每個錯誤代碼是否包含在$excelDevice.Common_Alarm_Number串列中。用于$_指代通過管道接收的各個輸入項:
foreach ($errCode in $ErrCodes | Where-Object{ $excelDevice.Common_Alarm_Number -contains $_.Value }) { ... }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437592.html
標籤:电源外壳 前锋 where-object
