Jump to content

Powershell 3.0 für Einsteiger - Microsoft Virtual Academy


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben (bearbeitet)

Hi,

 

mache derzeit den "Powershell 3.0 für Einsteiger" Kurs auf microsoftvirtualacademy.com

 

Soweit läuft alles gut, jedoch komme ich bei der folgenden Aufgabe nicht weiter:

 

A8: Rufen Sie eine Liste aller Services auf. Sortieren Sie diese Liste nach dem Status und färben Sie die Ausgabe entweder in Rot oder Grün, je nachdem, ob der Status des jeweiligen Service „stopped" oder „running" ist. Hinweis: Verwenden Sie zunächst sort-object von der vorherigen Übung. Verwenden Sie dann die Foreach Schleife, aber statt nur write-host zu nehmen, bauen Sie eine If Abfrage davor ein. Den Status eines Service bekommen Sie wie gewohnt mit $_.status, die möglichen Werte sind „stopped" oder „running". Zur Syntax: Die If Bedingung kommen in runde Klammern (), der Ausgabebefehl in {} Klammern. PowerShell überwacht die gesetzten Klammern und verlangt, dass Sie diese auch schließen. Vergessen Sie nicht die Schlussklammer } des ForEach Cmdlets! Wenn Sie am Ende in einer >> Zeile stehen, schliessen Sie diese mit 2x Return ab, um die umgebrochenen Zeilen auszuführen. Ignorieren Sie die weiteren Möglichkeiten neben „stopped" und „runnign" und verzichten Sie einfachheitshalber auf die ElseIf Abfrage.

 

Habe noch wenig Erfahrungen mit scripten/programmieren - daher auch noch nichts mit If Funktionen zu tun gehabt.

Bitte um Info was an ->

 

 

get-service | sort-object Status | if ($_.Status -eq "Running") {Write-Host 
-Foregroundcolor blue}

 

 falsch ist

bearbeitet von x1337
Geschrieben

Das hat jetzt nicht mit deinem If zu tun, das ist korrekt. In der Aufgabe steht, dass du eine foreach Schleife nehmen sollst. Bei dir werden dem if das komplette Objekt mit allen Services und nicht ein einzelner Service übergeben.

Geschrieben

Und wie würde das korrekt aussehen? Stehe gerade ziemlich auf der Leitung...

 

Bzw. was wäre zusätzlich an der oben von mir angegebenen If Funktion falsch?

Bekomme immer folgende Meldung...

 

if : Die Benennung "if" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:36
+ get-service | sort-object Status | if ($_.Status -eq "Running") {Write-Host -For ...
+                                    ~~
    + CategoryInfo          : ObjectNotFound: (if:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Geschrieben

Ich mache es dir mal beispielhaft vor (du willst ja lernen und keine fertige Lösung)

 

cmd-let | foreach-object { if($_.property -eq 'foo'){ write-host $_.foo } }

 

D.h. alle Objekte aus "cmd-let" werden einzeln im Scriptblock bearbeitet und für jedes Element eine If Abfrage gemacht.

  • Like 1
Geschrieben (bearbeitet)

Vielen Dank für deine Antwort :)

 

Was ich jedoch noch nicht verstanden habe, wie ich zu diesem Befehl:

Get-Service | ForEach-Object { if($_.Status -eq 'running'){Write-Host $_.Status $_.Name -ForegroundColor red}}

die "stopped" Services dazu gebe - dass diese zB auch in grün ausgegeben werden.

  • nochmal eine Pipeline mit den selben Commands für stopped?

Danke.

bearbeitet von x1337
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...