iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: param ( [string] $NirCmd = "$env:LOCALAPPDATA\Programs\nirsoft\nircmd.exe", [string] $FullName = "$PSScriptRoot\xrEngine.exe", [string] $Arguments = "-dbg", [string] $HeadphonesOut = "Headphones", [string] $SpeakersOut = "Динамики", [int] $Threshold = 70 ) [IO.FileInfo] $File = Get-Item $FullName -ErrorAction Stop [string] $FileName = $File.Name [string] $FileBaseName = $File.BaseName [string] $WorkDir = $File.DirectoryName function Get-3DEngineUsageByProcesses { param ( [Parameter(Mandatory, ValueFromPipeline)] [Diagnostics.Process[]] $Processes, $SampleInterval = 1, $MaxSamples = 1 ) begin { $ErrorActionPreference = 'STOP' [hashtable] $CounterParams = @{ Counter = "\GPU Engine(*engtype_3d)\Utilization Percentage" SampleInterval = $SampleInterval MaxSamples = $MaxSamples } $Counters = Get-Counter @CounterParams | Select-Object -ExpandProperty countersamples } process { foreach ($Process in $Processes) { [int[]] $ProcessIDs = $Process.ForEach{ $_.ID } foreach ($ID in $ProcessIDs) { $Counter = $Counters | Where-Object InstanceName -Match $ID $Usage = $Counter.ForEach{ [Math]::Round($_.CookedValue, 2) } if ($Counter) { [PSCustomObject] @{ Name = $Process.Name ID = $ID Usage = $Usage } } } } } } Push-Location & $NirCmd "setdefaultsounddevice" "$HeadphonesOut" Set-Location $WorkDir & .\$FileName $Arguments [Diagnostics.Process[]] $Process = Get-Process $FileBaseName [bool] $Condition = $true while ($Condition) { if ($Process.Count -gt 0) { [PSCustomObject[]] $Usage = Get-3DEngineUsageByProcesses $Process if ($Usage) { [double] $Total = ($Usage.Usage | Measure-Object -Sum).Sum if ($Total -ge $Threshold) { $Condition = $false } else { Start-Sleep -Milliseconds 500 } } } } $Process.ForEach{ $PSItem.ProcessorAffinity = 7 } Start-Sleep -Seconds 2 $Process.ForEach{ $PSItem.ProcessorAffinity = 15 } while (Get-Process $FileBaseName) { Start-Sleep -Seconds 2 } & $NirCmd "setdefaultsounddevice" "$SpeakersOut" Pop-Location exit |
|