ralfkausk
Goto Top

Mehrere Dienste auf mehreren Servern abfragen

Hallo zusammen

Ich stecke gerade etwas fest und bräuchte mal ein klein bisschen Hilfe.
Folgendes Problem
Ich habe eine Liste von Servern mit (verschiedenen) Diensten die ich, per PowerShell, abfragen muss.
In meinem jugendlichen Leichtsinn hatte ich mir vorgestellt ich sende eine Anfrage an den Server und hole direkt die Information für alle Dienste ein.
Anstatt für jeden Deinst den Server erneut zu kontaktieren.
Und da ist auch schon das Problem, das funktioniert aktuell nur mit einem Dienst!
Hier mal ein Beispiel

Beispiel eins (funktioniert mit einem Dienst)
$hostname = 'ServerOne'  
$servics = 'Service001'  
Get-Service -ComputerName $hostname | where { ( $_.Name -in $servics ) }

Nun ist es aber so, das ich am Anfang des Skripts eine Liste von Server und Diensten habe die ich prüfen muss
$services2check = @(
    ("ServerOne;Service001")  
    ("ServerTwo;'Service005','Service003'")  
    )

In einer "foreach"-Schleife terlege ich das dann in:
$hostname = ServerTwo
$services = 'Service005','Service003'

Wenn ich allerdings nun das Skript laufen lasse passiert rein gar nix.
Trage ich aber zum Beispiel mehrere Dienste namentlich, also ohne Variable, ein, dann bekomme ich ein Ergenis

Get-Service -ComputerName $hostname | Where-Object { $_.Name -in 'Service005','Service003' }  

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Kann mir jemand sagen warum das nicht funktioniert was ich vorhabe?


Danke im Voraus
Ralf

Content-ID: 579094

Url: https://administrator.de/contentid/579094

Ausgedruckt am: 05.11.2024 um 12:11 Uhr

certifiedit.net
certifiedit.net 13.06.2020 um 11:53:40 Uhr
Goto Top
Denke du musst die Liste als Array aufbauen.
Penny.Cilin
Penny.Cilin 13.06.2020 um 12:07:36 Uhr
Goto Top
Hm, geht das via Powershell nicht mit Invoke...?
144260
Lösung 144260 13.06.2020 aktualisiert um 13:03:59 Uhr
Goto Top
Bidde
$services2check = [ordered]@{
    "ServerOne" = @('Service001')  
    "ServerTwo" = @('Service005','Service003')  
}

$services2check.GetEnumerator() | %{
    Get-Service -ComputerName $_.Key -Name $_.Value
}
em-pie
em-pie 13.06.2020 um 16:32:16 Uhr
Goto Top
Moin,

Ich kann dir zwar nicht konkret helfen, aber das liest sich gerade, als wolltest du das Rad neu erfinden!?

Du schreibst zwar nichts genaueres über dein Vorhaben (was auch i.O. ist), aber könntest du nicht generell Tools wie Zabbix, Nagios, PRTG, ICINGA,... einsetzen...
Da wäre ja alles (ggf. mit Agents) schon fertig lauffähig...

Gruß
em-pie
ralfkausk
ralfkausk 15.06.2020 um 11:46:42 Uhr
Goto Top
@em-pie: Mein Vorhaben ist folgendes:
Ich muss Server Patchen und Updates einspielen.
Vor beginn und zum Abschluss Starte ich alle betroffenen Maschinen neu.
Außerdem kann durch die ein oder andere Installation selbst ein Neustart ausgelöst werden.
Für bestimmte Maschinen habe ich bestimmte Dienste genannt bekommen, die nach einem Neustart auf jeden Fall kontrolliert werden müssen, da sonst die Produktion in Gefahr ist.
Das Skript soll dementsprechend diese speziellen Maschinen und Dienste prüfen, und falls erforderlich neu starten.

Hätte ich wohl besser mal in meine ursprüngliche Frage geschrieben!
ralfkausk
ralfkausk 15.06.2020, aktualisiert am 18.06.2020 um 15:54:18 Uhr
Goto Top
@144260
Werde das sobald als möglich testen.
Vielen Dank

[Update]
Das war genau das was ich gesucht habe.

Dachte ursprünglich es handelt sich dabei um ein array.
Inzwischen habe ich erfahren, dieses Konstrukt nennt sich "Dictionary" oder "Hash Table"

Noch mal vielen Dank