繁体   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