powershell中的Get-ProcessesByName用于监视正在运行的各个python脚本

时间:2018-02-12 19:09:29

标签: powershell process-monitoring windows-process

我想监视PowerShell中的python脚本。为此我使用Get-ProcessByName。我想监视运行的各个python和JAVA脚本,并根据运行的单个脚本将其processId存储在csv文件中。 Get-ProcessByName列出同一行中的所有python或JAVA进程。如何分隔不同行中的所有脚本名称。我目前正在做的是 -

$process = [System.Diagnostics.Process]
$outputTime = $process::GetProcessesByName($processName.ProcessName)[0].TotalProcessorTime.TotalMilliseconds
$name = ($process::GetProcessesByName($processName.ProcessName)[0]) | Select-Object -ExpandProperty ProcessName
$extra = Get-WmiObject -Class Win32_Process -Filter "name = '$name.exe'" | Select-Object -ExpandProperty CommandLine

这里在$extra我得到了所有python脚本的名称。如何分离所有脚本

2 个答案:

答案 0 :(得分:2)

根据我的理解Win32_Process已经拥有了您需要的所有信息。如果需要,您可以使用Select-ObjectCalculated Properties进行修改。

Get-WmiObject -Class Win32_Process |
    Where-Object {$_.Name -eq 'python.exe'} | 
    Select-Object -Property Name, 
        @{Name         = 'Script'
          Expression   = {$_.CommandLine -replace 
                          '(.*)\\(?<py>.*\.py)|(.*)\ (?<py>.*\.py.*)', 
                          '${py}'}
        }, 
        @{
            Name       = 'CpuTime'
            Expression = {($_.KernalModeTime + $_.UserModeTime) / 10000000} 
        } | 
    Sort-Object -Property CpuTime -Descending

这会输出类似

的内容
    Name       Script                 CpuTime
    ----       ------                 -------
    python.exe completion.py preview  1,65625
    python.exe Untitled-1.py         0,015625

当然,这适用于java.exe或其他甚至多个进程。如果您不想输出完整的CommandLine,请将第一个Calculated Property替换为CommandLine

答案 1 :(得分:0)

我会用这个

Get-Process | where ProcessName -Match python