Skip to content

Instantly share code, notes, and snippets.

@themaximax
Last active October 21, 2024 13:17
Show Gist options
  • Save themaximax/2fa3caae3ddee839fae6944aaf02ae39 to your computer and use it in GitHub Desktop.
Save themaximax/2fa3caae3ddee839fae6944aaf02ae39 to your computer and use it in GitHub Desktop.
Скрипт автоматической настройки компьютера для работы через ЕСПД. В нем реализована настройка прокси для всех пользователей компьютера, если компьютер не в домене, что чаще всего бывает в школах.
# Основные переменные
$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