Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 01:20 22-09-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru