Zuerst ist $collection
$null
.
Dann wird, nachdem der ersten Schleifendurchlauf wird ein einziges $collection
ServiceController
Objekt, da nur $null + $object
$object
ist.
Bei der zweiten Schleifeniteration schlägt es fehl, weil ServiceController
keine Überlastungen für +
haben, so wie der Fehler Sie informiert.
Sie benötigen $collection
eine aktuelle Sammlung zu erklären, für +
(Sie @()
Array subexpression Operator verwenden können) sie arbeiten Art und Weise erwarten Sie:
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = @()
foreach($item in $a){
if($item.Status -like "Running"){
$collection = $collection + $item
}
}
Alternativ weisen Sie alle die Ausgabe von der Schleife direkt zu $collection
:
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = foreach($item in $a){
if($item.Status -like "Running"){
$item
}
}
Was natürlich mit einer einzigen Where-Object
Anweisung in der Pipeline vereinfacht werden könnte:
$collection = Get-Service App* |Where-Object {$_.Status -eq 'Running'}
Danke für Ihre Antwort! Wenn ich '$ collection = $ null 'in' $ collection = @() 'umschalte, bekomme ich die Fehlermeldung nicht mehr. Leider hat die Variable '$ collection' keinen Inhalt ... Hast du eine Idee warum? –
Und Sie wissen in der Tat, dass die ersten 10 Dienste, die von 'Get-Service' zurückgegeben werden, mindestens einen Dienst namens App * enthalten, der ausgeführt wird? –
Mein Gott! Ich habe einen dummen Fehler gemacht. Mit einer GUI arbeiten und Popups verwenden, um zu prüfen, ob alles in Ordnung ist. Sammlungen werden hier nicht in einem Popup angezeigt, daher dachte ich, die Variable wäre leer. Alles funktioniert, danke nochmal! –