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
Please also mark the comments that contributed to the solution of the article
Content-Key: 565274
Url: https://administrator.de/contentid/565274
Printed on: April 19, 2024 at 14:04 o'clock
4 Comments
Latest comment
$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}}
}