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
}

任何帮助都会很棒:)

4

2 回答 2

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
}
于 2013-12-20T21:15:22.737 回答
0

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

$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
于 2013-12-20T01:36:54.113 回答