bernardo 10 Geschrieben 20. August 2013 Melden Teilen Geschrieben 20. August 2013 Hallo zusammen, ich bin grade an der MS Virtual Academy den Powershell Kurs für Einsteiger am durchexerzieren und stoße bei einer Übungsaufgabe auf ein Lösungsproblem. In dem Buch von Frank Koch welches auszugsweise als Lehrmaterial dient, ist folgende Aufgabe: 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. Die Lösung zur angesprochenen vorherigen Übung war folgende: get-service | ForEach-Object {write-host -ForegroundColor red $_.Name $_.Status} Das Ergebnis ist, das alle Services in rot ausgegeben werden. Meine Lösung für die obenstehende Aufgabe wäre nun folgenede: get-service | Sort-Object status | ForEach-Object {If ($_.status -match "running") { write-host -ForegroundColor green $_.Name $_.Status } if ($_.status -match "stopped") { write-host -ForegroundColor red $_.Name $_.Status } } Das Ergebnis ist, das mir alle Services in grün angezeigt werden. Es sollen aber die laufenden in grün und die angehaltenen in rot angezeigt werden. Wenn ich die zweite "if" Bedingung inklusive Anweisung weglasse, dann erhalte ich nur die laufenden Services in grün angezeigt. Ich scheine wohl irgendwo einen entscheidenden Fehler zu machen. Ich würde mich über eure Hilfe sehr freuen, damit ich diese Wissenslücke schliesen kann. Zitieren Link zu diesem Kommentar
RHaneberg 10 Geschrieben 20. August 2013 Melden Teilen Geschrieben 20. August 2013 (bearbeitet) Entweder versteh ich das Problem falsch oder du hast hier was anderes reinkopiert als du bei dir ausführst ;) Wenn ich dein unteres Script bei mir laufen lasse werden mir erst alle gestoppten Dienste in rot und danach alle laufenden Dienste in grün angezeigt. Das war doch das erwartete Ergebnis? Edit: Da es ja nur zwei Stati gibt geht das auch einfach so: get-service | Sort-Object status | ForEach-Object {If ($_.status -match "running") { write-host -ForegroundColor green $_.Name $_.Status } else { write-host -ForegroundColor red $_.Name $_.Status } } bearbeitet 20. August 2013 von RHaneberg Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 20. August 2013 Melden Teilen Geschrieben 20. August 2013 Der TO hat 2x if, es muss hier aber ein if und ein else sein (alternativ ein ifelse statt dem 2. if). Zitieren Link zu diesem Kommentar
TorstenM 20 Geschrieben 20. August 2013 Melden Teilen Geschrieben 20. August 2013 Hier zB eine Möglichkeit ... $svcs = get-service | Sort-Object Nameforeach($sv in $svcs) { if($sv.Status -eq "Running") { write-host -ForegroundColor Green $sv.Status $sv.Name $sv.DisplayName } else { write-host -ForegroundColor Red $sv.Status $sv.Name $sv.DisplayName } } Zitieren Link zu diesem Kommentar
bernardo 10 Geschrieben 20. August 2013 Autor Melden Teilen Geschrieben 20. August 2013 (bearbeitet) Echt merkwürdig, jetzt habe ich grade den Code nochmal kopiert und in der ISE ausgeführt und erhalte genau das gewünschte Ergebnis. Vielen Dank für eure posts. Beitrag kann geschloßen werden. Schönen Abend noch allerseits! bearbeitet 20. August 2013 von bernardo Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.