Jump to content

IF Abfrage mit Powershell


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

Empfohlene Beiträge

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.

 

Link zu diesem Kommentar

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 von RHaneberg
Link zu diesem Kommentar

Hier zB eine Möglichkeit ...

 

$svcs = get-service | Sort-Object Name
foreach($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
        }
    }

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

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...