簡體   English   中英

任務計划程序無法使用 PowerShell 腳本正確終止進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM