[英]Task Scheduler can't kill a process properly using PowerShell script
我想使用任務計划程序和 PowerShell 腳本殺死一個進程。 當特定進程啟動時,任務調度程序會觸發 PS 腳本。 該腳本獲取進程 ID 並嘗試停止它。 我的問題是,在進程完成其工作之前,腳本無法終止進程。 但是,我想在腳本觸發后立即終止該進程,而無需等待任何內容。 請注意,我要殺死的進程也以管理員權限運行,並以 window 模式運行(不在后台)
計划任務設置:以具有最高權限的 SYSTEM 運行。 我還使用了 executionPloicyBypass 參數,如下所示: powershell -ExecutionPolicy Bypass -File C:\Scripts\KillProcess.ps1
。
在腳本中,我基本上有以下代碼
$process = Get-Process -Id $pid
$process.PriorityClass = 'High'
$events=Get-WinEvent -FilterHashtable @{LogName="Security"; Id = <eventId>; StartTime = [datetime]::Now.AddMinutes(-5)} |Where-Object -Property Message -Match '<string to search for>' | Where-Object -Property Message -Match ('<string to search for>') -ErrorAction Stop
if (!$events[0].message) {
Exit
}
else {
$processes = @()
#for each event, get process Id and kill it.
#this is because the process can spawn multiple process.
foreach ($event in $events) {
#parse the process Id.-*
$processId=[int][regex]::Match($event.message,'Process\sID\:\s+(0x.+)\s').captures.groups[1].Value
$processes += $processId
}
$processes = $processes | Select -Unique
foreach ($proc in $processes) {
Stop-Process -Id $proc -Force -ErrorAction SilentlyContinue
}
}
當我以管理員身份運行 PowerShell ISE 並在那里手動運行腳本時,它會立即終止該進程。 但是,當任務調度程序觸發腳本時,它會等待進程完成其工作。 我對任務調度程序做錯了嗎?
我不知道Stop-Process
有什么問題,但我通過首先使用Get-Process -Id $proc
進程 object 將其更改為process.Kill()
方法。 現在它可以正常工作了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.