我想在powershell中监视Python脚本。为此,我正在使用Get-ProcessByName
。我想根据运行的单个脚本监视运行并将其ProcessID运行并存储在CSV文件中的单个Python和Java脚本。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脚本的名称。如何将所有脚本分开
从我的理解中, Win32_Process
已经拥有了您需要的所有信息。您可以使用Select-Object
和Calculated 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
。
我将使用此
Get-Process | where ProcessName -Match python