Выбор имени процесса по строке, содержащей WASP в Powershell
Я пытаюсь выбрать определенное имя процесса в скрипте Powershell с помощью WASP. Однако проблема в том, что каждый раз, когда процесс запускается, он выдает случайно сгенерированную строку перед расширением.
Это всегда включает расширение ".tmp", хотя. В любом случае я могу выбрать процесс, если он содержит.tmp в конце строки? В этом случае процесс, который я пытаюсь выбрать, является "is-RI4E5.tmp". Мне нужно выбрать это на основе этого, содержащего расширение в конце, ".tmp".
ProcessName ProcessId IsActive Handle Title Class
----------- --------- -------- ------ ----- -----
powershell_ise 8652 True 133330 Administrator: Windows PowerShell ISE HwndWrapper[PowerShell_ISE.exe;;cf...
is-RI4E5.tmp 6720 False 461306 Setup TApplication
explorer 5472 False 264168 VNC Server CabinetWClass
explorer 5472 False 985230 vnc - Search Results in SharedFiles (\\cas-fs1) (S:) CabinetWClass
chrome 7636 False 329808 Central Arizona Supply - Home - Google Chrome Chrome_WidgetWin_1
cmd 7592 False 264396 Administrator: C:\Windows\system32\cmd.exe ConsoleWindowClass
EXCEL 8860 False 1116322 Microsoft Excel - CAS Network IP Directory [Compatibility Mode] XLMAIN
EXCEL 8860 False 395668 Printers MS-SDIb
VNCScan 9104 False 198140 Bozteck VENM Console 2013.6.3.230 WindowsForms10.Window.8.app.0.378734a
EXCEL 8860 False 461030 CAS Network IP Directory [Compatibility Mode] MS-SDIb
1 ответ
Решение
Я бы предложил собрать все имена процессов до начала процесса WASP. После запуска соберите весь процесс снова и разведите две коллекции, используя Compare-Object. Это уменьшит вероятность ложного срабатывания, когда несколько процессов имеют суффикс ".tmp".
$beforeWasp = Get-Process | Where-Object { $_.Name -Like '*.tmp' }
# start process here
$afterWasp = Get-Process | Where-Object { $_.Name -Like '*.tmp' }
Compare-Object -ReferenceObject $beforeWasp -DifferenceObject $afterWasp -PassThru