3

私はこの配列を持っています(簡略化):

$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"}
4

2 に答える 2

5

単純 :)

PS> $v -gt 3
5
6
8
5
7

または

$v | Where-Object { $_ -gt 3 }
于 2012-09-11T13:17:20.077 に答える
2

Shay の例は完璧です:Where-Object配列からアイテムをフィルタリングするために使用します。

オブジェクトはDataRowオブジェクトであるため、列をフィルター処理する必要があります。

$rowsGreaterThanThree = @( $v | Where-Object { $_.ColumnName -gt 3 } )
if( $rowsGreaterThanThree.Count -eq $v.Count )
{
  Write-Host "All the rows are greater than 3!"
}

ColumnNameフィルター処理する実際の値を含む列の名前に置き換えます。

WHERE節を使用して SQL でこれを行うこともできます。

SELECT * FROM Table WHERE Column > 3

次に、必要な値だけを SQL Server から取得します。もちろん、スクリプトでフィルタリングされていない値も必要になる場合があります。

于 2012-09-11T15:48:47.433 に答える