まず、$collection
は$null
である。
$collection
は、$null + $object
が単なる$object
であるため、最初のループ反復後にServiceController
オブジェクトです。
2番目のループの繰り返しでは、ServiceController
にエラーが通知されるのと同じように+
のオーバーロードがないため、エラーが発生します。
あなたは、彼らは道あなたが期待する動作するように+
ため$collection
実際のコレクション(あなたが@()
配列部分式の演算子を使用することができます)を宣言する必要があります:直接ループからすべての出力を割り当て、
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = @()
foreach($item in $a){
if($item.Status -like "Running"){
$collection = $collection + $item
}
}
代わりに$collection
へ:もちろん、パイプライン内の単一Where-Object
文で簡単にすることができ
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = foreach($item in $a){
if($item.Status -like "Running"){
$item
}
}
:
$collection = Get-Service App* |Where-Object {$_.Status -eq 'Running'}
ありがとうございました! '$ collection = $ null'を' $ collection = @() 'に切り替えると、もうエラーメッセージは表示されません。残念ながら変数 '$ collection'には内容がありません...あなたはなぜアイデアを持っていますか? –
「Get-Service」によって返された最初の10のサービスには、実行中のApp *という名前のサービスが少なくとも1つ含まれていることが分かります。 –
私のゴッシュ!私はばかな間違いをした。 GUIを使って作業し、すべてがうまくいればポップアップをチェックする。ここでは、コレクションはポップアップに表示されないので、変数は空であると考えました。すべてが機能しています、もう一度ありがとう! –