Powershell Pipelinevariable?
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
eine kleine Powershellfrage.
Ich möchte für einige Server alle runtimebroker Prozesse auslesen und sie nach Usernamen gruppieren und sortieren.
Funktioniert auch:
$host = "server1,server2"
$host.split(",") | foreach {Invoke-Command $_ -ScriptBlock{Get-Process -Name runtimebroker -IncludeUserName} | Group-Object -Property username} | Sort-Object name
Count Name Group
----- ---- -----
1 KHA\user1 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user2 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user3 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user4 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user5 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user6 {System.Diagnostics.Process (RuntimeBroker)}
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:
Count Name Group
----- ---- -----
server1
1 KHA\user1 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user2 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user3 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user4 {System.Diagnostics.Process (RuntimeBroker)}
server2
1 KHA\user5 {System.Diagnostics.Process (RuntimeBroker)}
1 KHA\user6 {System.Diagnostics.Process (RuntimeBroker)}
oder, und das wär mir noch lieber, den Server in jeder Zeile mit dabei, also so:
Count Name Group Server
----- ---- ----- ---
1 KHA\user1 {System.Diagnostics.Process (RuntimeBroker)} server1
1 KHA\user2 {System.Diagnostics.Process (RuntimeBroker)} server1
1 KHA\user3 {System.Diagnostics.Process (RuntimeBroker)} server1
1 KHA\user4 {System.Diagnostics.Process (RuntimeBroker)} server1
1 KHA\user5 {System.Diagnostics.Process (RuntimeBroker)} server2
1 KHA\user6 {System.Diagnostics.Process (RuntimeBroker)} server2
Leider lassen das meine bescheidenen Powershellkenntnisse nicht zu. Irgendwie denke ich, dass mir PipelineVariable weiterhilft, aber wie genau?
Danke
Gruß
Martin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 565274
Url: https://administrator.de/contentid/565274
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
$hosts = "server1","server2"
Invoke-Command -Computername $hosts -ScriptBlock {
Get-Process -Name runtimebroker -IncludeUserName | Group username | Select *,@{n='Server';e={$env:Computername}}
} | Sort name
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
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
"Server1","Server2" | %{
Invoke-Command -ComputerName $_ -EA SilentlyContinue -ScriptBlock {gps -Name explorer -EA SilentlyContinue -IncludeUserName | group Username | ?{$_.count -gt 1}}
}