任务计划程序无法使用 PowerShell 脚本正确终止进程
Task Scheduler can't kill a process properly using PowerShell script
我想使用任务计划程序和 PowerShell 脚本终止进程。
当特定进程启动时,任务计划程序会触发 PS 脚本。该脚本获取进程 ID 并尝试停止它。
我的问题是,在进程完成其工作之前,脚本无法终止进程。但是,我想在脚本触发后立即终止进程,而无需等待任何事情。请注意,我要杀死的进程还 运行s 具有管理员权限,并且 运行s 在 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
获取进程对象将其更改为 process.Kill()
方法。现在可以正常使用了。
我想使用任务计划程序和 PowerShell 脚本终止进程。 当特定进程启动时,任务计划程序会触发 PS 脚本。该脚本获取进程 ID 并尝试停止它。 我的问题是,在进程完成其工作之前,脚本无法终止进程。但是,我想在脚本触发后立即终止进程,而无需等待任何事情。请注意,我要杀死的进程还 运行s 具有管理员权限,并且 运行s 在 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
获取进程对象将其更改为 process.Kill()
方法。现在可以正常使用了。