2016-02-04 15 views
8

Là một quản trị Tôi có thể lấy một người sử dụng các quy trình bằng cách chạy nàyDanh sách quy trình cho người dùng hiện

Get-Process -IncludeUserName | Where UserName -match test

Nhưng như một tổ chức phi quản trị Tôi không thể sử dụng -IncludeUserName bởi vì "tham số Các 'IncludeUserName' đòi hỏi cao Quyền của người sử dụng".

Vì vậy, nếu tôi đăng nhập là kiểm tra người dùng, làm cách nào để chỉ liệt kê các quy trình của mình chứ không phải tất cả mọi thứ đang chạy?

Trả lời

5

Bạn có thể thực hiện điều đó thông qua WMI. Đây là một đoạn trích của một bài báo bạn có thể tìm thấy here.

$View = @(
@{l='Handles';e={$_.HandleCount}}, 
@{l='NPM(K)';e={ (Get-Process -Id $_.ProcessId).NonpagedSystemMemorySize/1KB -as [int]}}, 
@{l='PM(K)';e={ $_.PrivatePageCount/1KB -as [int]}}, 
@{l='WS(K)';e={ $_.WorkingSetSize/1KB -as [int]}}, 
@{l='VM(M)';e={ $_.VirtualSize/1mB -as [int]}}, 
@{l='CPU(s)';e={ (Get-Process -Id $_.ProcessId).CPU -as [int]}}, 
@{l='Id';e={ $_.ProcessId}}, 
'UserName' 
@{l='ProcessName';e={ $_.ProcessName}} 
) 
Get-WmiObject Win32_Process | % { $_ | 
    Add-Member -MemberType ScriptProperty -Name UserName -Value { 
     '{0}\{1}' -f $this.GetOwner().Domain,$this.GetOwner().User 
    } -Force -PassThru 
} | ? UserName -match $env:USERNAME | ft $View -AutoSize 
+1

trình như một say mê, cảm ơn bạn rất nhiều! – PatricF

6

Get-Process một mình sẽ không cung cấp cho bạn thông tin này, bạn sẽ cần WMI:

$owners = @{} 
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user} 
$ps = get-process | select processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}} 
foreach($p in $ps) { 
    if($p.Owner -eq $env:USERNAME) { 
     $p 
    } 
} 
+1

Làm việc thực sự tốt. Chỉ có thể đánh dấu một bài là câu trả lời và David Brabant là người đầu tiên. – PatricF

+0

Vâng, anh ấy xứng đáng và tôi cũng đã bình chọn câu trả lời của anh ấy. – Marc

1

Cám ơn mã của bạn. Dựa trên điều này, tôi đã tạo ra một phiên bản sửa đổi cho phép người dùng để giết (một tập hợp con của) các quy trình riêng của họ:

#Script to allow users to kill (a subset of) their own processes 
#Based on : https://stackoverflow.com/questions/35195221/list-process-for-current-user 
#Previously we used Task Nanny created by Michel Stevelmans which is a lot faster, but it did not show a process that was causing issues for our users. 
$UserProcesses = @() 
$Owners = @{} 
Get-WmiObject win32_process | Foreach{$owners[$_.handle] = $_.getowner().user} 
$Processes = Get-Process | select processname,Description,Id,@{l="Owner";e={$owners[$_.id.tostring()]}} 
Foreach($Process in $Processes) 
{ 
    IF($process.Owner -eq $env:USERNAME) 
    { 
     $UserProcesses += $Process 
    } 
} 
$UserProcessesToExclude = @(
    'concentr', #Citrix Connection Center 
    'conhost', #Console Window Host 
    'dwm', #Desktop Windows Manager 
    'explorer', #Explorer 
    'Receiver', #Citrix Receiver Application 
    'rundll32', #Windows host process (Rundll32) 
    'ssonsvr', #Citrix Receiver 
    'taskhost' #Host Process for Windows Tasks 
    'wfcrun32' #Citrix Connection Manager 
    'wfshell' #Citrix wfshell shell 
) 

$UserProcesses | Where{$_.ProcessName -notin $UserProcessesToExclude} | Out-GridView -Title 'Task killer - Select the process(es) you want to kill. Hold CTRL to select multiple processes.' -PassThru | Foreach{Stop-Process -id $_.Id} 
Các vấn đề liên quan