在后台运行的PowerShell脚本,无论何时运行,都会将特定进程优先级更改为低

时间:2013-12-19 22:34:36

标签: powershell powershell-v2.0 powershell-v1.0

我正在尝试通过我们的组策略部署脚本,该策略将在后台运行并监视名为“3dsmax.exe”的进程。每次启动此过程时,我都要确保其优先级设置为“低”。

我对Powershell的理解非常有限。 我尝试使用不同的论坛合并以下内容,但这似乎不起作用,我相信这将在第一次出现后终止,这是不可取的。我使用“calc.exe”作为测试过程。

#requires -version 2.0

Register-WmiEvent -Class win32_ProcessStartTrace -SourceIdentifier processStarted



$prog = 'calc.exe'
$newEvent = Wait-Event -SourceIdentifier processStarted

If ($progs -match $newEvent.SourceEventArgs.NewEvent.ProcessName)
{ 
    $prog = Get-Process -Name calc
    $prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::Low
}

任何帮助都是超级的:)

2 个答案:

答案 0 :(得分:0)

这是另一种方法。当我测试时,“:: Low”无法识别,不得不使用:: Idle。编辑:添加foreach? |循环以在多个实例的情况下抑制错误。添加了Idle循环以开始脚本以在打开时捕获任何预先存在的进程。

$prog = Get-Process -Name calc | ?{$_.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::Idle}

    while($true)
    {
        $Query = "select * from __instanceCreationEvent within 1 where targetInstance isa 'win32_Process' AND TargetInstance.Name = 'calc.exe'"
            $Eventwatcher = New-Object management.managementEventWatcher $Query

            $Event = $Eventwatcher.waitForNextEvent()

            $prog = Get-Process -Name calc | ?{$_.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::Idle}
    }

这里有一些.vbs剪辑无形地打开应用程序,因此您的用户无法获得PowerShell窗口。

command = "powershell.exe -nologo -command C:\IDLER.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0

答案 1 :(得分:0)

这是一个很好的方法吗? 它似乎有效,但我不确定这是一个很好的方式进入无限循环与上述问题。

while($true)
{
    $Query = "select * from __instanceCreationEvent within 1 where targetInstance isa 'win32_Process' AND TargetInstance.Name = 'calc.exe'"
        $Eventwatcher = New-Object management.managementEventWatcher $Query

        $Event = $Eventwatcher.waitForNextEvent()

        $prog = Get-Process -Name calc
        $prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::Idle
}