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-Key: 579094

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

Printed on: April 26, 2024 at 03:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Jun 13, 2020 at 09:53:40 (UTC)
Goto Top
Denke du musst die Liste als Array aufbauen.
Member: Penny.Cilin
Penny.Cilin Jun 13, 2020 at 10:07:36 (UTC)
Goto Top
Hm, geht das via Powershell nicht mit Invoke...?
Mitglied: 144260
Solution 144260 Jun 13, 2020 updated at 11:03:59 (UTC)
Goto Top
Bidde
$services2check = [ordered]@{
    "ServerOne" = @('Service001')  
    "ServerTwo" = @('Service005','Service003')  
}

$services2check.GetEnumerator() | %{
    Get-Service -ComputerName $_.Key -Name $_.Value
}
Member: em-pie
em-pie Jun 13, 2020 at 14:32:16 (UTC)
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
Member: ralfkausk
ralfkausk Jun 15, 2020 at 09:46:42 (UTC)
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!
Member: ralfkausk
ralfkausk Jun 15, 2020, updated at Jun 18, 2020 at 13:54:18 (UTC)
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