我正在尝试通过我们的组策略部署脚本,该策略将在后台运行并监视名为“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
}
任何帮助都是超级的:)
答案 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
}