私はこの配列を持っています(簡略化):
$v = 3,5,3,6,8,3,5,7
すべての値が 3 より大きいかどうかを確認する必要があります。このタスクには Foreach または Foreach-Object が適していると思いますが、その仕組みがわかりません。
私はこのようなことを試しましたが、うまくいきません。
$v | Foreach-Object (if($_ -lt 10){Write-Host "$_ lt 10"})
編集:
君たちありがとう!ステートメントを次のように変更しました。
$v | Foreach-Object {if($_ -lt 10){$check_value = "True"}}
現在は機能していますが、単純化された配列は良い考えではないことに気付きました。私が使用している配列のデータは、MS SQL データベースから取得されます。配列を画面に表示すると数字が表示されますが、データの型は System.Data.DataRow であり、数字とは比較できません。エラーメッセージが表示されます:
Bad argument to operator '-lt': Could not compare "System.Data.DataRow" to "95". Error: "Cannot convert the "95" value of type "System.Int32" to type "System.Data.DataRow".".
EDIT2:
飛び散ったビット:
私はあなたのコードを使用しています。すべて正常に動作しますが、この比較を通過できません:
$rowsGreaterThanThree.Count -eq $v.Count
$rowsGreaterThanThree の値は次のとおりです。
ProcessorTime
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
3.1262399841282
0
0
0
0
0
および $v には以下が含まれます。
ProcessorTime
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
3.1262399841282
0
0
0
0
0
値は同じですが、「ProcessorTime」の下の $v にもう 1 行空白があります (ここでは表示されません)。$rowsGreaterThanThree.Count では、Count が 15 ではなく 16 になります。
私のコード: (ゼロがあるため、-gt を -ge に変更しました。動作中のバージョンでは、プロセッサが一定期間 95% を超えてロードされているかどうかを確認したいと考えています。)
$warning_values = @( $check | Where-Object { $_.ProcessorTime -ge 0 } )
if($warning_values.Count -eq $check.Count )
{
Write-Host -ForegroundColor "Warning!"
}
else { Write-Host "nothing"}