Загрузка данных



#Requires -RunAsAdministrator
$ErrorActionPreference = "Continue"

$ErrorLog = "$env:ProgramData\AlwaysOn-setup.log"
Start-Transcript -Path $ErrorLog -Append | Out-Null

function Section($Name) {
    Write-Host "`n========== $Name ==========" -ForegroundColor Cyan
}

function TryPower($Arguments) {
    & powercfg @Arguments
    if ($LASTEXITCODE -ne 0) {
        Write-Host "Ошибка powercfg: $Arguments" -ForegroundColor Yellow
    }
}

Section "1. Питание"

TryPower @("/setactive", "SCHEME_MIN")
TryPower @("/change", "monitor-timeout-ac", "0")
TryPower @("/change", "monitor-timeout-dc", "0")
TryPower @("/change", "disk-timeout-ac", "0")
TryPower @("/change", "disk-timeout-dc", "0")
TryPower @("/change", "standby-timeout-ac", "0")
TryPower @("/change", "standby-timeout-dc", "0")
TryPower @("/change", "hibernate-timeout-ac", "0")
TryPower @("/change", "hibernate-timeout-dc", "0")
TryPower @("/hibernate", "off")

# Дополнительные параметры по GUID, чтобы не зависеть от локализации
$settings = @(
    # USB selective suspend
    @("2a737441-1930-4402-8d77-b2bebba308a3",
      "48e6b7a6-50f5-4782-a5d4-53bb8f07e226", 0),
    # PCI Express ASPM
    @("501a4d13-42af-4429-9fd1-a8218c268e20",
      "ee12f906-d277-404b-b6da-e5fa1a576df5", 0),
    # Кнопка питания
    @("4f971e89-eebd-4455-a8de-9e59040e7347",
      "7648efa3-dd9c-4e3e-b566-50f929386280", 0),
    # Кнопка сна
    @("4f971e89-eebd-4455-a8de-9e59040e7347",
      "96996bc0-ad50-47ec-923b-6f41874dd9eb", 0),
    # Закрытие крышки
    @("4f971e89-eebd-4455-a8de-9e59040e7347",
      "5ca83367-6e45-459f-a27b-476b1d01c936", 0),
    # Таймеры пробуждения
    @("238c9fa8-0aad-41ed-83f4-97be242c8f20",
      "bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d", 0)
)

foreach ($s in $settings) {
    $subgroup = $s[0]
    $setting = $s[1]
    $value = $s[2]
    TryPower @("/setacvalueindex", "SCHEME_CURRENT",
        $subgroup, $setting, "$value")
    TryPower @("/setdcvalueindex", "SCHEME_CURRENT",
        $subgroup, $setting, "$value")
}

TryPower @("/setactive", "SCHEME_CURRENT")

Section "2. Заставка текущего пользователя"

$desktop = "HKCU:\Control Panel\Desktop"
Set-ItemProperty $desktop ScreenSaveActive "0"
Set-ItemProperty $desktop ScreenSaverIsSecure "0"
Set-ItemProperty $desktop ScreenSaveTimeOut "0"

# Настройки политики заставки для текущего пользователя
$pol = "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop"
New-Item $pol -Force | Out-Null
Set-ItemProperty $pol ScreenSaveActive "0"
Set-ItemProperty $pol ScreenSaverIsSecure "0"

Section "3. Тайм-аут бездействия"

$security = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
$current = (Get-ItemProperty $security `
    -Name InactivityTimeoutSecs -ErrorAction SilentlyContinue).InactivityTimeoutSecs

if ($null -eq $current -or $current -eq 0) {
    Set-ItemProperty $security InactivityTimeoutSecs `
        -Type DWord -Value 0
    Write-Host "Тайм-аут отключён или не задан."
} else {
    Write-Host "Обнаружен тайм-аут $current секунд." -ForegroundColor Yellow
    Write-Host "Параметр не изменён автоматически: проверьте доменную GPO."
}

Section "4. Применение политик"

gpupdate /target:computer /force
gpupdate /target:user /force

Section "5. Проверка схемы и сна"

powercfg /getactivescheme
powercfg /availablesleepstates

Section "6. Проверка тайм-аутов"

powercfg /query SCHEME_CURRENT SUB_SLEEP
powercfg /query SCHEME_CURRENT SUB_DISK
powercfg /query SCHEME_CURRENT SUB_VIDEO
powercfg /query SCHEME_CURRENT SUB_USB
powercfg /query SCHEME_CURRENT SUB_PCIEXPRESS
powercfg /query SCHEME_CURRENT SUB_BUTTONS

Section "7. Проверка запросов питания"

powercfg /requests

Section "8. Проверка блокировки"

Get-ItemProperty $security `
    -Name InactivityTimeoutSecs -ErrorAction SilentlyContinue |
    Select-Object InactivityTimeoutSecs | Format-List

Get-ItemProperty $desktop `
    -Name ScreenSaveActive, ScreenSaverIsSecure, ScreenSaveTimeOut |
    Format-List

Section "9. Проверка обновлений Windows"

Get-Service wuauserv, UsoSvc -ErrorAction SilentlyContinue |
    Select-Object Name, Status, StartType | Format-Table -AutoSize

$wuPaths = @(
    "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU",
    "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"
)

foreach ($path in $wuPaths) {
    if (Test-Path $path) {
        Write-Host "`n$path"
        Get-ItemProperty $path | Format-List *
    } else {
        Write-Host "$path - отдельные параметры не заданы"
    }
}

Section "10. Последние перезагрузки"

Get-WinEvent -FilterHashtable @{
    LogName = "System"
    Id = 41, 1074, 6005, 6006, 6008
} -MaxEvents 15 -ErrorAction SilentlyContinue |
    Select-Object TimeCreated, Id, ProviderName, Message |
    Format-List

Section "11. Отчёт групповых политик"

$report = "$env:ProgramData\AlwaysOn-gpresult.html"
gpresult /h $report /f
Write-Host "Отчёт: $report"

Section "12. Завершение"

Write-Host "Настройка и диагностика завершены." -ForegroundColor Green
Write-Host "Журнал: $ErrorLog"
Write-Host "Обновления Windows не отключались."
Write-Host "Доменная политика может переопределять локальные параметры."

Stop-Transcript | Out-Null
Read-Host "Нажмите Enter для выхода"