Системный Администратор Windows – Telegram
Системный Администратор Windows
3.12K subscribers
15 photos
2 videos
24 links
🖥️ Windows для системных администраторов: управление, оптимизация, безопасность. Полезные советы, лайфхаки, PowerShell-скрипты, автоматизация и практические решения для работы с серверами и рабочими станциями.

Авторский канал.
Download Telegram
📕 Бэкап для администратора Windows: ошибки, риски и лучшие практики для системных администраторов, инженеров технической поддержки и начинающих IT-специалистов.

На открытом уроке 9 октября в 20:00 мск мы разберем как правильно и эффективно организовать резервное копирование в Windows.

📗 На вебинаре вы:
1. Сможете выбрать подходящую стратегию резервного копирования.
2. Попробуете использовать встроенные инструменты Windows для бэкапа.

📘 В результате на практике разберетесь, как тестировать и проверять работоспособность резервных копий и как отличать надёжный бэкап от «фикции».

👉 Регистрация и подробности о курсе Администратор Windows: https://vk.cc/cQahzf

Все участники открытого урока получат скидку на курс "Администратор Windows"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👋 Привет, админы!

Как массово проверить статус служб на нескольких серверах?

Причём не просто глянуть, работают или нет, а убедиться, что определённые критически важные сервисы (типа w32time, WinRM, TermService) действительно в состоянии Running.

Ниже собственно скрипт


$servers = @("server1", "server2", "server3")
$servicesToCheck = @("w32time", "WinRM", "TermService")

foreach ($server in $servers) {
Write-Host "🔍 Проверка $server" -ForegroundColor Cyan
foreach ($service in $servicesToCheck) {
$status = Get-Service -ComputerName $server -Name $service -ErrorAction SilentlyContinue
if ($status.Status -eq 'Running') {
Write-Host "$service: OK" -ForegroundColor Green
} else {
Write-Host "$service: НЕ РАБОТАЕТ!" -ForegroundColor Red
}
}
Write-Host ""
}


Удобно, когда нужно быстро прогнать по десятку машин.

👉 @win_sysadmin
👍12
👋 Привет, админы!

Проверяем, включен ли Secure Boot на машине.


Confirm-SecureBootUEFI


Если вернёт True - Secure Boot активен. False - выключен. А если вылетает ошибка, значит либо UEFI не используется, либо железо/OS не поддерживают Secure Boot.

Хочу напомнить, что Secure Boot - один из базовых элементов защиты от загрузки неподписанных (вредоносных) загрузчиков. Особенно актуально в среде, где есть автозагрузка ISO, PXE или кастомные live-образы.

А чтобы прогнать это по сети - можно использовать PowerShell Remoting:


Invoke-Command -ComputerName SERVER01 -ScriptBlock { Confirm-SecureBootUEFI }


Либо через Enter-PSSession, если хотите вручную посмотреть на конкретной машине.

👉 @win_sysadmin
👍7
👋 Привет, админы!

Нужно было настроить автологин для одного стендового сервера в изолированной сети - без домена, без пользователей, просто чтобы поднимался нужный софт после перезагрузки.

Решается это через редактирование реестра:


$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $RegPath -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $RegPath -Name "DefaultUsername" -Value "UserName"
Set-ItemProperty -Path $RegPath -Name "DefaultPassword" -Value "UserPassword"
Set-ItemProperty -Path $RegPath -Name "DefaultDomainName" -Value "$env:COMPUTERNAME"


⚠️ Обратите внимание: пароль хранится в открытом виде в реестре (DefaultPassword), поэтому использовать это стоит только в безопасной среде.

🛡️ Есть ещё один способ - через netplwiz, но он не автоматизируется скриптами. А если хотите чуть безопаснее — можно использовать специальные учетные записи без доступа к сети и минимальными правами.

🔄 После внесения изменений — либо ребут, либо shutdown /r /t 0 для применения.

👉 @win_sysadmin
👍9
Нам ваш заморский AI нафиг не нужон!

Сами сделаем свой AI на бесплатном вебинаре «On-prem LLM – свой распределённый AI-кластер за 2 часа».

📍На вебинаре узнаете:

1. как запускать крупные языковые модели без внушительных бюджетов. 
2. как организовать эффективный и масштабируемый инференс, не переплачивая за инфраструктуру. 
3. как подключить удобный веб-интерфейс (OpenWebUI) и обеспечить безопасность через CDN/WAF. 

После вебинара поймете, что выделить домашний кластер под серьёзные AI-задачи — вполне реальная и захватывающая  авантюра.

Спикеры:
🔝 Подмосковный Александр, менеджер продукта по направлению ML/AI/GPU в компании «Флант»
🔝 Виталий Лихачев, SRE в крупном нидерландском тревелтехе

📅23 октября в 19:00

Регистрация на вебинарпо ссылке 👈
🤡42👍1
👋 Привет, админы!

Сегодня покажу, как отключить автоматический вход в Windows, если его кто-то однажды настроил (и забыл).

🔧 Всё просто - правим те же ключи в реестре:


$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $RegPath -Name "AutoAdminLogon" -Value "0"
Remove-ItemProperty -Path $RegPath -Name "DefaultPassword" -ErrorAction SilentlyContinue


Если хотите полностью зачистить следы, можно ещё убрать DefaultUsername и DefaultDomainName, особенно если вход теперь идёт по другим учеткам или через домен:


Remove-ItemProperty -Path $RegPath -Name "DefaultUsername" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $RegPath -Name "DefaultDomainName" -ErrorAction SilentlyContinue


🎯 После этого автологин не будет срабатывать, и пользователь снова увидит окно входа.

Если нужно массово проверить, включен ли автологин на серверах, можно пробежаться скриптом по списку машин и вытащить AutoAdminLogon:


Invoke-Command -ComputerName (Get-Content servers.txt) -ScriptBlock {
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name "AutoAdminLogon"
}


👉 @win_sysadmin
👍9
👋 Привет, админы!

Если вдруг замечаете странную активность по RDP - сессии отваливаются, логов много, сервер грузится - самое время проверить, кто брутфорсит.

Вот быстрый способ вытащить неудачные попытки входа по RDP через события:


Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
} | Where-Object {
$_.Properties[10].Value -eq '10' # Logon Type 10 = RDP
} | Select-Object TimeCreated,
@{Name='Username';Expression={$_.Properties[5].Value}},
@{Name='IP';Expression={$_.Properties[18].Value}} |
Sort-Object TimeCreated -Descending | Select-Object -First 20


📌 Покажет:
- когда была попытка
- откуда (IP)
- под каким логином пытались зайти

👮‍♂️ Можно быстро зафайрволить источник, добавить в blacklist или передать в SIEM.

🛡️ Плюс к этому — рекомендую включить защиту учётных записей от перебора пароля:


net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15


👉 @win_sysadmin
👍12
📕 Контейнеризация в Windows Server для системных администраторов, инженеров технической поддержки и начинающих IT-специалистов.

На открытом уроке 22 октября в 20:00 мск мы разберем как использовать контейнеры в Windows Server.

📗 На вебинаре вы:
1. Узнаете, как использовать контейнеризацию для повышения гибкости и управляемости серверной инфраструктуры.
2. Освоите базовые команды и подходы к управлению контейнерами.

📘 В результате на практике развернете свой первый контейнер с помощью Docker и поймете принципы работы контейнеров в Windows Server.

👉 Регистрация и подробности о курсе Администратор Windows: https://vk.cc/cQwN9r

Все участники открытого урока получат скидку на курс "Администратор Windows"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
4
👋 Всем админам доброго раннего утра!

Сегодня коротко и по делу, что включить в Audit Policy, чтобы отслеживать все подключения по RDP. Без нужных политик никакой логгер не поможет.

🎯 Включаем аудит входа и сетевых логинов:


AuditPol /set /subcategory:"Logon" /success:enable /failure:enable
AuditPol /set /subcategory:"Logoff" /success:enable
AuditPol /set /subcategory:"Special Logon" /success:enable
AuditPol /set /subcategory:"Logon with explicit credentials" /success:enable /failure:enable


📝 После этого в логе Security начнут появляться события:
- 4624 - Успешный вход (в том числе по RDP - Logon Type 10)
- 4625 - Неудачный вход (ошибка пароля, нет такой учётки и т.п.)
- 4634 - Выход из системы
- 4778 и 4779 - Подключение и отключение от RDP-сессии

📌 Также полезно включить аудит групповой политики:


AuditPol /set /subcategory:"Other Logon/Logoff Events" /success:enable /failure:enable


👉 @win_sysadmin
👍171
👋 Привет, админы!

Если вы уже используете Wazuh (open-source SIEM), то грех не настроить сбор событий безопасности с Windows, особенно для анализа логинов и брутфорса по RDP.

Вот как это делается 👇



🛠️ Установка Wazuh Agent на Windows

1. Скачиваем агент отсюда: https://wazuh.com/

2. Устанавливаем с указанием менеджера (сервер Wazuh):


msiexec /i "wazuh-agent-4.x.x.msi" /qn WAZUH_MANAGER="10.0.0.1" WAZUH_REGISTRATION_SERVER="10.0.0.1" WAZUH_AGENT_NAME="srv-win01"


3. После установки — правим C:\Program Files (x86)\ossec-agent\ossec.conf (если надо вручную задать имя, группы и т.п.)

4. Перезапускаем агент:


net stop wazuh-agent
net start wazuh-agent




📋 Что собирает агент?

По умолчанию:
- События из Security, System, Application
- Входы в систему (4624, 4625, 4778, 4779)
- Изменения в учётках, политиках, реестре
- Информация об установке/удалении софта

🎯 Всё это попадает в дашборд Wazuh и может быть обработано правилами: алерты, уведомления, триггеры.



🔥 Пример алерта в Wazuh при брутфорсе по RDP:


{
"rule": {
"id": "18107",
"level": 10,
"denoscription": "Windows RDP brute-force attempt detected",
"group": "windows, authentication_failed, brute_force"
},
"srcip": "192.168.1.200",
"user": "admin",
"location": "Security",
"full_log": "Logon failure: Type 10 (RemoteInteractive)"
}


📌 Это можно отправить на почту, в Telegram, или автоматизировать блокировку IP (например, через Active Responses).

💬 А вы уже пробовали Wazuh или у вас другая SIEM-система? Сравнивали с Graylog, Splunk, Sentinel?

👉 @win_sysadmin
👍95
👋 Доброй субботы, админы!

На днях столкнулся с интересной ситуацией: служба Windows Update на одном из серверов Windows Server 2019 просто отказалась стартовать. Перезапуск, reset компонентов — ничего не помогло.

Оказалось, что виноват битый файл базы данных обновлений. Решение оказалось простым, но мало кто его делает вручную:

🔥 Вот PowerShell-скрипт, который полностью сбрасывает Windows Update, включая очистку базы данных:


Stop-Service -Name wuauserv -Force
Stop-Service -Name bits -Force
Remove-Item -Path "C:\Windows\SoftwareDistribution" -Recurse -Force
Start-Service -Name wuauserv
Start-Service -Name bits


После этого сервер спокойно начал тянуть апдейты. Главное — не забудьте перезапустить сервисы, а лучше сразу проверить доступность обновлений:


Get-WindowsUpdate


(если стоит PSWindowsUpdate модуль)

💡Если хотите автоматизировать это на нескольких машинах — добавьте Invoke-Command и в путь!

👉 @win_sysadmin
👍15
👋 Доброго раннего утра, админы!

Как срочно проверить, кто и когда перезагружал сервер. Вроде бы задача простая, но в спешке иногда забываешь точные команды. Делюсь, чтобы не искать в следующий раз:

🕵️‍♂️ Ловим события перезагрузки через журнал:


Get-EventLog -LogName System -Source User32 | Where-Object { $_.EventID -eq 1074 } | Select TimeGenerated, Message | Sort-Object TimeGenerated -Descending


Этот запрос покажет, кто инициировал перезагрузку, с какой причиной и когда это было. Очень полезно при разборе неожиданных рестартов или плановых работ, которые никто "не помнит".

Дополнительно можно глянуть системные события ID 6006 (нормальное выключение) и 6005 (загрузка журнала, т.е. запуск системы):


Get-EventLog -LogName System | Where-Object { $_.EventID -eq 6006 -or $_.EventID -eq 6005 } | Select TimeGenerated, EventID | Sort-Object TimeGenerated -Descending


🔥 Удобно добавлять эти команды в свой набор “быстрых админских команд”.

👉 @win_sysadmin
👍11
👋 Привет, админы!

Сегодня расскажу про один кейс, который недавно словил на одном из файловых серверов. Пользователи начали жаловаться, что не могут открыть файлы по SMB - «доступ запрещен», хотя права вроде бы на месте.

📌 В Event Viewer (журнал Security) увидел кучу записей с кодом ошибки 0xc000006d (STATUS_LOGON_FAILURE). А рядом — ещё интереснее: Audit Failure, Logon Type 3, учетка domain\username.

🔥 Оказалось, что проблема была в сбитом времени на сервере — он отставал на 6 минут от контроллера домена. Из-за этого Kerberos-билеты считались просроченными, и аутентификация тупо ломалась.

📎 Решение:
1. Проверил текущую синхронизацию времени:

w32tm /query /status

2. Перезапустил службу времени и указал правильный NTP:

w32tm /config /manualpeerlist:"time.windows.com,0x9" /syncfromflags:manual /reliable:yes /update
Restart-Service w32time

3. Синхронизировал вручную:

w32tm /resync /force


После этого всё заработало, ошибки исчезли, пользователи успокоились.

👉 @win_sysadmin
👍15🤯2👎1
Как я автоматизировал очистку Temp на всех ПК в домене

Иногда кажется, что папка %TEMP% - это черная дыра. Пользователи жалуются на тормоза, места на диске мало, а ты заходишь туда - и видишь архивы обновлений, временные файлы Office, кэш инсталляторов и прочий мусор за последние сто лет.

Руками чистить на каждом ПК? Нет уж. Я сделал это через PowerShell и GPO.


Решение:
Скрипт для очистки временных файлов запускается через планировщик задач от имени SYSTEM, раз в неделю. Вот пример скрипта:


$TempPath = "$env:TEMP"
Get-ChildItem -Path $TempPath -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -ErrorAction SilentlyContinue


Чтобы запускался на всех компах в домене:
1. Создал GPO с task scheduler (Computer Configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks)
2. Указал Action: Create, Run as: SYSTEM, триггер раз в неделю.
3. В Program/noscript указал powershell.exe, а в аргументах:
-ExecutionPolicy Bypass -File \\ваш-сервер\netlogon\clean_temp.ps1

Важно:
– Скрипт не трогает свежие файлы (новее 7 дней)
– Работает бесшумно, ничего не спрашивает
– Можно дополнительно чистить C:\Windows\Temp, если уверены


Вывод: Не запускайте такую штуку в logon-скриптах - это затормозит вход в систему. Лучше использовать планировщик задач. И, конечно, тестируйте сначала на паре машин — на всякий случай.

👉 @win_sysadmin
🔥17👍7🤔21
👋 Привет, админы!

Сегодня хочу поделиться полезным трюком, как отслеживать подключения к RDP - кто, когда и откуда логинился на сервер. Это особенно актуально, если вы не используете полноценный SIEM, но хотите держать руку на пульсе.

🔍 Используем журнал событий и PowerShell:


Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} |
Where-Object { $_.Properties[8].Value -eq '10' } |
Select-Object TimeCreated,
@{Name='User';Expression={$_.Properties[5].Value}},
@{Name='IP';Expression={$_.Properties[18].Value}} |
Sort-Object TimeCreated -Descending | Out-GridView


📌 Что делает скрипт:
- Ищет события успешного входа (4624),
- Фильтрует по типу логина 10 (удалённый интерактивный - это RDP),
- Показывает дату, пользователя и IP-адрес источника.

Очень удобно запускать на сервере и быстро проверять, кто заходил и когда. Можно адаптировать для логгера или отправки уведомлений.

👉 @win_sysadmin
👍19
👋 Привет, админы!

Сегодня хочу поделиться реальным кейсом из недавней практики. У нас один Windows Server 2019 внезапно перестал применять групповые политики, причем только для некоторых пользователей. Перезапуск gpupdate /force ничего не давал, а в логах висела ошибка "The processing of Group Policy failed. Windows attempted to read the file \\domain.local\sysvol\..." с кодом 1355.

🔥 Решение оказалось простым, но не сразу очевидным: проблема была в DNS!

Проверил настройки сетевого подключения — и оказалось, что в DNS стояли публичные адреса, а не наши контроллеры домена. Из-за этого сервер не мог найти свой DC.

📋 Быстрое исправление:
1. Настроил правильные DNS сервера на интерфейсе (IP адреса контроллеров домена).
2. Очистил кэш DNS:

ipconfig /flushdns

3. Перезапустил сетевые службы:

Restart-Service -Name "Dnscache","Netlogon","Kdc"

4. И только потом сделал:

gpupdate /force


После этого политики применились без ошибок!

Вывод: при любых странностях с доменом сначала проверяйте DNS. В 80% случаев проблема именно там.

👉 @win_sysadmin
👍141🔥1
👋 Привет, админы!

Сегодня расскажу про один неожиданный баг, с которым столкнулся на Windows Server 2022. После обновлений сервер перестал пускать пользователей по RDP. Ошибка - классическая: "The connection was denied because the user account is not authorized for remote login." Хотя у юзеров были все нужные права. 🤔

🔍 Копнул глубже - выяснилось, что в группе Remote Desktop Users внезапно исчезли все пользователи. Но в GPO права были заданы верно! Оказалось, что одно из обновлений сбросило локальные группы при конфликте с групповыми политиками.

💡 Решение:

1. Проверил GPO через gpresult /h report.html - нужные настройки есть.
2. Добавил пользователей обратно в группу через PowerShell:


Add-LocalGroupMember -Group "Remote Desktop Users" -Member "DOMAIN\username"


3. Чтобы автоматизировать проверку и добавление нужных участников - вот мини-скрипт:


$users = @("DOMAIN\user1", "DOMAIN\user2")
foreach ($u in $users) {
if (-not (Get-LocalGroupMember -Group "Remote Desktop Users" -Member $u -ErrorAction SilentlyContinue)) {
Add-LocalGroupMember -Group "Remote Desktop Users" -Member $u
Write-Host "$u добавлен в Remote Desktop Users"
}
}


Если на сервере действует GPO, которая перезаписывает локальную группу RDP Users - добавление вручную не поможет, всё снова очистится при следующем применении политики. В таком случае правьте GPO или используйте Restricted Groups/Group Policy Preferences.

👉 @win_sysadmin
👍9🔥41
👋 Привет, админы!

Сегодня расскажу про один недокументированный нюанс с задачами в Планировщике Windows, с которым недавно столкнулся сам. Был у меня скрипт, который по расписанию должен запускаться от имени системной учетной записи (SYSTEM). Всё настроено правильно, вручную запускается - работает. Но вот по расписанию не срабатывает. Без ошибок, без логов, просто тишина. 🤔

🔍 После копания выяснилось: если задача запускается от SYSTEM, но в свойствах включена опция "Запускать только при входе пользователя", - она НЕ выполнится, потому что SYSTEM не входит в систему в классическом понимании.

💡 Решение:

1. Зайти в свойства задачи.
2. Переключить опцию на: "Выполнять вне зависимости от входа пользователя".
3. Обязательно включить галку "Не сохранять пароль", если используете обычную учетку (для SYSTEM это не критично).

📌 Ну и по возможности включайте логирование в задаче - пусть пишет вывод скрипта в файл, так проще отлавливать подобные "невидимые" фейлы.

👉 @win_sysadmin
👍131
Как переехать с Prometheus на VictoriaMetrics и для чего?

VictoriaMetrics снижает стоимость хранения, требует меньше ресурсов, легко масштабируется и совместима с экосистемой Prometheus. Но с VictoriaMetrics нужно уметь работать! 

На видеокурсе от Слёрма вы за 3 часа сможете:

💡 научиться быстро и без боли разворачивать VictoriaMetrics;
💡 освоить 3 способа переезда с Prometheus;
💡 получите готовый чек-лист для миграции, чтобы избежать 99% ошибок новичков;
💡 аргументированно доказать тимлиду или CTO, что переход на VictoriaMetrics сэкономит компании много красивых денег!

За 1 день освоить востребованный инструмент или продолжать маяться с Prometheus? Выбор за вами.

Все подробности ➡️ по ссылке.
1
👋 Привет, админы!

Недавно столкнулся с проблемой - один из пользователей жаловался, что «всё долго открывается», особенно сетевые папки. На первый взгляд - обычная история, но решил покопать глубже.

📌 Оказалось, виноват механизм автоматического поиска сетевых принтеров и папок, который Windows выполняет при каждом открытии проводника. На слабых или загруженных машинах это может серьезно замедлить работу.

Быстрое решение - отключить этот механизм через реестр или GPO. Вот способ через PowerShell:


Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "NoNetCrawling" -Value 1


Этот параметр отключает автоматическое сканирование сети на предмет расшаренных ресурсов. Пользователь сам откроет то, что нужно - без лишних тормозов. Проверено - сразу стал отзывчивее проводник и пропали лаги при открытии «Сеть».

👉 @win_sysadmin
👍19🔥8
👋 Привет, админы!

Куда уходит свободное место на диске? Думаешь, что всё под контролем, а потом бац - и диск C: в красной зоне. Особенно часто такое встречал на серверах с включённым журналированием или забытым логированием.

📌 Накидал скрипт, который помогает быстро найти топ папок и файлов, пожирающих пространство:


$path = "C:\"
Get-ChildItem -Path $path -Recurse -ErrorAction SilentlyContinue |
Where-Object { -not $_.PSIsContainer } |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="SizeMB";Expression={[math]::round($_.Length / 1MB, 2)}} -First 20


Что бы посмотреть топ папок, используй du из Sysinternals:


.\du.exe -q -l 1 C:\


(если не знаешь - du.exe можно взять отсюда)

Очень выручает, когда нужно быстро понять, что разрослось - профили пользователей, временные файлы, лог-файлы от софта, который никто не трогал годами...

👉 @win_sysadmin
🔥9👍6💩21