Last active
October 21, 2024 13:17
-
-
Save themaximax/2fa3caae3ddee839fae6944aaf02ae39 to your computer and use it in GitHub Desktop.
Скрипт автоматической настройки компьютера для работы через ЕСПД. В нем реализована настройка прокси для всех пользователей компьютера, если компьютер не в домене, что чаще всего бывает в школах.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Основные переменные | |
$proxyServer = "10.0.46.52:3128" | |
# какие адреса не проксируем, через ; | |
$bypassList = "192.168.*;10.*;localhost;127.*" | |
$cert = "ca-root.crt" | |
# каким пользователям не назначаем прокси | |
$excludeList = "Public", "maximax;)" | |
$wifiProfile = "wifi.xml" | |
# Для совместимости со старыми версиями powershell, где нет этих переменных | |
if ($PSScriptRoot -eq $null) { | |
$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition | |
} | |
if ($PSCommandPath -eq $null) { | |
$PSCommandPath = $MyInvocation.MyCommand.Definition | |
} | |
#Проверка прав администратора, если их нет то перезапускаем скрипт с правами админа | |
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) | |
If (-Not $isAdmin) { | |
Write-Warning 'Нет прав администратора!' | |
Write-Host 'Пробую запустить с правами админа...' | |
Write-Host "`nНажмите `"Да`" в окне `"Контроль учетных записей пользователей`"" | |
Start-Sleep 1 | |
Start-Process powershell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File `"$PSCommandPath`"" -Verb RunAs | |
Exit | |
} | |
# Функция установки прокси для IE | |
function SetProxyIE ([string]$Path) { | |
Set-ItemProperty -Path Registry::"$Path" -Name "ProxyEnable" -Value 1 -Force | |
Set-ItemProperty -Path Registry::"$Path" -Name "ProxyServer" -Value $proxyServer -Force | |
Set-ItemProperty -Path Registry::"$Path" -Name "ProxyOverride" -Value $bypassList -Force | |
} | |
# Очень мощная Функция :) | |
function WriteOK () { | |
Start-Sleep -Milliseconds 150 | |
Write-Host "`t- ОК" -ForegroundColor Green | |
} | |
Write-Host ".: Скрипт настройки школьного интернета (ЕСПД) v1.0 ~ vk.com/itmax :." -ForegroundColor Yellow | |
Write-Host "======================================================================" | |
Set-Location $PSScriptRoot | |
# 0. Импорт профилья wi-fi | |
$wifiAdapter = Get-NetAdapter | Where-Object {$_.PhysicalMediaType -match '802.11'} | |
# Если найден wi-fi адаптер, то импортируем профиль из xml | |
if ($wifiAdapter) { | |
Write-Host "Обнаружен wi-fi адаптер, настраиваю" -NoNewline | |
netsh wlan add profile filename="$wifiProfile" user=all > $null | |
WriteOK | |
} | |
# 1. Установка корневого сертификата Ростелекома | |
Write-Host "> Устанавливаю корневой сертификат Ростелекома" -NoNewline | |
if (Test-Path $cert) { | |
Import-Certificate -FilePath $cert -CertStoreLocation Cert:\LocalMachine\Root | Out-Null | |
WriteOK | |
} else { | |
Write-Host "Файл сертификата не найден $cert" -ForegroundColor Red | |
} | |
# 2. Настройка прокси для WinHTTP | |
Write-Host "> Настраиваю прокси для Windows (WinHTTP)" -NoNewline | |
netsh winhttp set proxy proxy-server="$proxyServer" bypass-list="$bypassList" > $null | |
WriteOK | |
# 3. Установка прокси для залогиненных пользователей | |
# Получаем список пользователей | |
$users = Get-CimInstance -Class Win32_UserAccount | Select-Object Name, SID | |
# Получаем список всех SID из реестра HKEY_USERS, чтобы найти активные сессии | |
$registrySIDs = Get-ChildItem -Path "Registry::HKEY_USERS" | Select-Object -ExpandProperty PSChildName | |
$activeUsers = $users | Where-Object { $registrySIDs -contains $_.SID } | |
$activeUsers | ForEach-Object { | |
$userName = $_.Name | |
Write-Host "> Настраиваю прокси для пользователя $userName" -NoNewline | |
SetProxyIE -Path "HKU\$($_.SID)\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | |
WriteOK | |
$excludeList += $userName | |
} | |
# 4. Устанавливаем прокси для всех остальных пользователей | |
$users = Get-ChildItem -Path "C:\Users" -Directory -Force -Exclude $excludeList | |
$users = $users | Where-Object { $_.Attributes -notmatch 'ReparsePoint'} | |
# Обработаем циклом | |
foreach ($user in $users) { | |
$userName = $user.Name | |
Write-Host "> Настраиваю прокси для пользователя $userName" -NoNewline | |
$datPath = Join-Path -Path $user.FullName -ChildPath "NTUSER.DAT" | |
#монтируем файл реестра офф-лайн пользователей | |
reg load "HKU\$userName" $datPath > $null | |
SetProxyIE -Path "HKU\$userName\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | |
reg unload "HKU\$userName" > $null | |
WriteOK | |
} | |
Write-Host "______________________________________________________________________" | |
Write-Host "> Готово! Все настройки выполнены!" -ForegroundColor Green | |
Start-Sleep 5 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment