Powershell Pipelinevariable?

albertminrich
Goto Top
Hallo,

eine kleine Powershellfrage.
Ich möchte für einige Server alle runtimebroker Prozesse auslesen und sie nach Usernamen gruppieren und sortieren.

Funktioniert auch:
Die Ausgabe sieht so aus:

Jetzt weiß ich aber nicht, welche Zeile zu welchem Server gehört.
Entweder hätte ich gerne eine Zeile, wenn ein neuer Server kommt, also so:

oder, und das wär mir noch lieber, den Server in jeder Zeile mit dabei, also so:

Leider lassen das meine bescheidenen Powershellkenntnisse nicht zu. Irgendwie denke ich, dass mir PipelineVariable weiterhilft, aber wie genau?

Danke
Gruß
Martin

Content-Key: 565274

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

Ausgedruckt am: 19.05.2022 um 03:05 Uhr

Mitglied: 143728
143728 16.04.2020 um 21:36:17 Uhr
Goto Top
Mitglied: AlbertMinrich
AlbertMinrich 16.04.2020 um 21:47:10 Uhr
Goto Top
Irgendwie hab ich übersehen, dass beim Befehl get-process der Servername ja bereits mit ausgegeben wird (pscomputername), erst durch Weiterleitung an Group-Object geht er wieder verloren, außer man gruppiert auch nach pscomputername


Ausserdem interessieren mich nur die User, bei denen der Prozess mehrmals läuft und hier brauch ich jetzt die Pipelinevariable.
Ausgabe sieht dann so aus:


Das passt soweit, jetzt geht's nur noch um Feinheiten:
  • Die Ausgabe erfolgt erst, wenn alle Server abgeklappert wurden. Das kann schon mal ein wenig dauern. Besser wäre, wenn nach jedem Server eine Ausgabe erfolgen würde für den jeweiligen Server
  • Gibt es auf einem Server gar keinen Prozess runtimebroker, wird ein Fehler ausgegeben. Das Script ackert zwar ohne Unterbrechung die restlichen Server klaglos durch, ist aber nicht schön:

Hat jemand eine Idee?
Danke
Martin
Mitglied: AlbertMinrich
AlbertMinrich 16.04.2020 um 21:55:03 Uhr
Goto Top
Zitat von @143728:


Danke, funktioniert, wobei bei deiner Lösung dieser Teil alleine auch schon reicht:

Weißt du vielleicht noch eine Lösung für meine anderen beiden Probleme(Feinheiten)?

Gruß
Martin
Mitglied: 143728
143728 17.04.2020 aktualisiert um 11:09:30 Uhr
Goto Top
Punkt 1: Die Pipeline komplett nur im Foreach Abschnitt ausgeben und keine CMDLets mehr hinter Foreach anhängen dann erfolgt die Ausgabe schrittweise für jeden Server.
Alternativ würde ich bei mehreren Servern paralellisieren, entweder mit Powershell Workflows, oder Powershell Jobs (Start-Job/Receive-Job /-asjob), dann ist das ganze auch schneller fertig. Beispiele finden sich hier im Forum.

Punkt 2: Stichwort: Parameter -ErrorAction SilentlyContinue bzw. Try Catch