44 lines
No EOL
1.7 KiB
PowerShell
44 lines
No EOL
1.7 KiB
PowerShell
function Get-UserProcess {
|
|
<#
|
|
.SYNOPSIS
|
|
Remote and local view and stop processes
|
|
Using Get-Process and Invoke-Command via WinRM
|
|
.DESCRIPTION
|
|
Example:
|
|
Get-UserProcess localhost # default (Run as Administartor)
|
|
Get-UserProcess localhost -stop # stop process force
|
|
.LINK
|
|
https://github.com/Lifailon
|
|
#>
|
|
Param (
|
|
$srv="localhost",
|
|
[switch]$stop
|
|
)
|
|
if ($srv -like "localhost") {
|
|
$ps_out = ps -IncludeUserName | Sort-Object -Descending CPU | select ProcessName,Product,
|
|
ProductVersion,UserName,
|
|
@{Name="Processor Time sec"; Expression={[int]$_.CPU}},
|
|
@{Name="Processor Time min"; Expression={$_.TotalProcessorTime -replace "\.\d+$"}},
|
|
@{Name="Memory WS"; Expression={[string]([int]($_.WS / 1024kb))+"MB"}},
|
|
@{Name="Memory PM"; Expression={[string]([int]($_.PM / 1024kb))+"MB"}},
|
|
@{Name="RunTime"; Expression={((Get-Date) - $_.StartTime) -replace "\.\d+$"}},
|
|
Path | Out-GridView -Title "Local user processes" -PassThru
|
|
if ($stop -and $ps_out) {
|
|
$ps_out | Stop-Process -Force
|
|
}
|
|
} else {
|
|
$ps_out = icm $srv {ps -IncludeUserName} | Sort-Object -Descending CPU | select ProcessName,Product,
|
|
ProductVersion,UserName,
|
|
@{Name="Processor Time sec"; Expression={[int]$_.CPU}},
|
|
@{Name="Processor Time min"; Expression={$_.TotalProcessorTime -replace "\.\d+$"}},
|
|
@{Name="Memory WS"; Expression={[string]([int]($_.WS / 1024kb))+"MB"}},
|
|
@{Name="Memory PM"; Expression={[string]([int]($_.PM / 1024kb))+"MB"}},
|
|
@{Name="RunTime"; Expression={((Get-Date) - $_.StartTime) -replace "\.\d+$"}},
|
|
Path | Out-GridView -Title "Remote user processes to server $srv" -PassThru
|
|
if ($stop -and $ps_out) {
|
|
$session = New-PSSession $srv
|
|
icm -Session $session {Stop-Process -Name $using:ps_out.ProcessName -Force}
|
|
Remove-PSSession $session
|
|
}
|
|
}
|
|
} |