👋 Привет, админы!
Из жизни. На продакшн-сервере внезапно упал веб-сервис — выяснилось, что SSL-сертификат истёк в 00:01, а пользователи начали получать ошибки подключения. Пришлось оперативно проверять все сертификаты.
🔥 Для быстрой диагностики я написал PowerShell-скрипт, который подключается к списку серверов, собирает все сертификаты и рассчитывает, сколько дней осталось до их истечения:
Этот скрипт выводит таблицу с оставшимися днями жизни (DaysLeft) каждого сертификата, упорядоченную по возрастанию. Те, у которых
💬 А как вы мониторите сроки действия сертификатов в своих средах? Пишете ли свои PowerShell-модули, используете встроенные возможности SCOM/Ansible или сторонние решения? Делитесь в комментариях!
👉 @win_sysadmin
Из жизни. На продакшн-сервере внезапно упал веб-сервис — выяснилось, что SSL-сертификат истёк в 00:01, а пользователи начали получать ошибки подключения. Пришлось оперативно проверять все сертификаты.
🔥 Для быстрой диагностики я написал PowerShell-скрипт, который подключается к списку серверов, собирает все сертификаты и рассчитывает, сколько дней осталось до их истечения:
$servers = @("web01","web02","web03")
$results = foreach($server in $servers) {
Write-Verbose "Проверяю сертификаты на $server"
Get-ChildItem -Path "\\$server\C$\Windows\System32\certsrv\CertEnroll" -Recurse -Include *.cer,*.pfx |
ForEach-Object {
try {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($_.FullName)
[PSCustomObject]@{
Server = $server
Subject = $cert.Subject
NotAfter = $cert.NotAfter
DaysLeft = ($cert.NotAfter - (Get-Date)).Days
}
} catch {
Write-Warning "Не удалось загрузить сертификат из $($_.FullName) на $server"
}
}
}
$results | Sort-Object DaysLeft | Format-Table -AutoSize
Этот скрипт выводит таблицу с оставшимися днями жизни (DaysLeft) каждого сертификата, упорядоченную по возрастанию. Те, у которых
DaysLeft≈0 или отрицательно, сразу бросаются в глаза. В реальной инфраструктуре я добавил отправку результата по e-mail через Send-MailMessage и запланировал задачу в Task Scheduler с ежедневным запуском.💬 А как вы мониторите сроки действия сертификатов в своих средах? Пишете ли свои PowerShell-модули, используете встроенные возможности SCOM/Ansible или сторонние решения? Делитесь в комментариях!
👉 @win_sysadmin
👍8
👋 Привет, админы!
Сегодня словил интересный баг с WinRM на новых машинах в домене. После настройки через GPO и попытки подключения по PowerShell Remoting — облом:
Хотя DNS работает, ping проходит, GPO с настройками WinRM прилетела. Где собака зарыта? 🐶
🔍 Проблема оказалась в отсутствии регистрации SPN для машины в AD. Без него Kerberos просто не может авторизовать подключение. Решается вот так:
Если машин много — автоматизируем через PowerShell:
⚠️ Конечно, нужны права на запись SPN (обычно у админа домена). После регистрации SPN — всё взлетело без ошибок.
💬 А у тебя были проблемы с WinRM или Kerberos? Как настраиваешь remoting — вручную, через DSC, GPO или Ansible?
👉 @win_sysadmin
Сегодня словил интересный баг с WinRM на новых машинах в домене. После настройки через GPO и попытки подключения по PowerShell Remoting — облом:
WinRM cannot process the request. The following error occurred while using Kerberos authentication: Cannot find the computer X. Verify that the computer exists on the network and that the name provided is spelled correctly.
Хотя DNS работает, ping проходит, GPO с настройками WinRM прилетела. Где собака зарыта? 🐶
🔍 Проблема оказалась в отсутствии регистрации SPN для машины в AD. Без него Kerberos просто не может авторизовать подключение. Решается вот так:
setspn -S WSMAN/имя_компьютера имя_компьютера
Если машин много — автоматизируем через PowerShell:
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
foreach ($comp in $computers) {
setspn -S "WSMAN/$comp" $comp
}
⚠️ Конечно, нужны права на запись SPN (обычно у админа домена). После регистрации SPN — всё взлетело без ошибок.
💬 А у тебя были проблемы с WinRM или Kerberos? Как настраиваешь remoting — вручную, через DSC, GPO или Ansible?
👉 @win_sysadmin
👍11
Вебинар
Используй ЕССМ по полной!
🗓 20.06.2025
🕒 14:00 по МСК
1) Будь в курсе!
- события: источники, правила генерации
- аварии: правила генерации и закрытия, корреляция событий, каналы уведомлений
2) Управляй!
- язык шаблонов Jinja2 и его основные конструкции
- написание шаблонов конфигурации для автоматизации типовых задач администратора
3) Инициализируй!
- реализация механизма ZTP
- как достать коммутатор из коробки и автоматически настроить его
👉 Регистрация
Ведущий вебинара:
Алексей Листаров — инженер с многолетним опытом работы в крупном операторе связи. Сертифицированный преподаватель нашего авторизованного центра Академии Eltex.
#eltex #eltexcm #webinar #вебинар #naice #eccm
@eltexcm
#реклама
О рекламодателе
Используй ЕССМ по полной!
🗓 20.06.2025
🕒 14:00 по МСК
1) Будь в курсе!
- события: источники, правила генерации
- аварии: правила генерации и закрытия, корреляция событий, каналы уведомлений
2) Управляй!
- язык шаблонов Jinja2 и его основные конструкции
- написание шаблонов конфигурации для автоматизации типовых задач администратора
3) Инициализируй!
- реализация механизма ZTP
- как достать коммутатор из коробки и автоматически настроить его
👉 Регистрация
Ведущий вебинара:
Алексей Листаров — инженер с многолетним опытом работы в крупном операторе связи. Сертифицированный преподаватель нашего авторизованного центра Академии Eltex.
#eltex #eltexcm #webinar #вебинар #naice #eccm
@eltexcm
#реклама
О рекламодателе
👍2❤1
👋 Привет, админы!
Недавно делал деплой для пачки новых серверов и по старой памяти вручную создавал нужные GPO. Потом подумал — а зачем, если всё можно автоматизировать? 💡
🔥 Делюсь скриптом, который создаёт и настраивает GPO, а потом линкует её к OU. Всё через PowerShell:
📌 Под капотом это обычная настройка через
💬 А ты автоматизируешь управление GPO? Может, используешь AGPM или предпочитаешь работать через GUI? Делись опытом!
👉 @win_sysadmin
Недавно делал деплой для пачки новых серверов и по старой памяти вручную создавал нужные GPO. Потом подумал — а зачем, если всё можно автоматизировать? 💡
🔥 Делюсь скриптом, который создаёт и настраивает GPO, а потом линкует её к OU. Всё через PowerShell:
# Имя новой политики и OU
$gpoName = "WinRM Config"
$ou = "OU=Servers,DC=domain,DC=local"
# Создаём политику, если её ещё нет
if (-not (Get-GPO -Name $gpoName -ErrorAction SilentlyContinue)) {
New-GPO -Name $gpoName
}
# Настраиваем WinRM в этой политике
$gpo = Get-GPO -Name $gpoName
Set-GPRegistryValue -Name $gpo.DisplayName -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows\WinRM\Service" `
-ValueName "AllowAutoConfig" -Type DWord -Value 1
Set-GPRegistryValue -Name $gpo.DisplayName -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows\WinRM\Service" `
-ValueName "AllowUnencryptedTraffic" -Type DWord -Value 0
# Линкуем GPO к нужному OU
New-GPLink -Name $gpoName -Target $ou -Enforced $false
📌 Под капотом это обычная настройка через
Set-GPRegistryValue, но ты можешь добавлять туда любые параметры — фаервол, автологон, аудит и т.д.💬 А ты автоматизируешь управление GPO? Может, используешь AGPM или предпочитаешь работать через GUI? Делись опытом!
👉 @win_sysadmin
👍7❤1
👋 Привет, админы!
Продолжая тему SPN, сегодня расскажу, как отслеживать изменения SPN в AD. Был у меня кейс: один коллега удалил SPN у критического сервера (по ошибке, конечно 😅), и всё — WinRM лег, приложения не коннектятся. Алертов не было. Делать так — нельзя.
🔥 Вот скрипт, который можно повесить на задачу по расписанию. Он проверяет наличие SPN
📌 Можно доработать — писать в лог, интегрировать с SIEM, триггерить webhook в Zabbix и т.д. Главное — не терять SPN из виду. Один сбой может стоить кучи нервов.
💬 А ты мониторишь SPN? Или больше полагаешься на ручной аудит/расследование постфактум? Поделись, как у тебя это организовано!
👉 @win_sysadmin
Продолжая тему SPN, сегодня расскажу, как отслеживать изменения SPN в AD. Был у меня кейс: один коллега удалил SPN у критического сервера (по ошибке, конечно 😅), и всё — WinRM лег, приложения не коннектятся. Алертов не было. Делать так — нельзя.
🔥 Вот скрипт, который можно повесить на задачу по расписанию. Он проверяет наличие SPN
WSMAN/имя_компьютера и шлёт алерт, если он исчез:
$computers = Get-ADComputer -Filter * -Properties ServicePrincipalName
$missingSpn = @()
foreach ($comp in $computers) {
$expectedSpn = "WSMAN/$($comp.Name)"
if (-not ($comp.ServicePrincipalName -contains $expectedSpn)) {
$missingSpn += $comp.Name
}
}
if ($missingSpn.Count -gt 0) {
$body = "На следующих машинах отсутствует SPN WSMAN:`n" + ($missingSpn -join "`n")
Send-MailMessage -To "[email protected]" -From "[email protected]" `
-Subject "❗ Отсутствует SPN WSMAN" -Body $body -SmtpServer "smtp.domain.local"
}
📌 Можно доработать — писать в лог, интегрировать с SIEM, триггерить webhook в Zabbix и т.д. Главное — не терять SPN из виду. Один сбой может стоить кучи нервов.
💬 А ты мониторишь SPN? Или больше полагаешься на ручной аудит/расследование постфактум? Поделись, как у тебя это организовано!
👉 @win_sysadmin
👍6
Media is too big
VIEW IN TELEGRAM
🚀 MEETUPxSPRINT OFFER для инженеров технической поддержки от YADRO
Хочешь узнать, как устроена техническая поддержка в одной из ведущих технологических компаний России? Приходи на онлайн-митап от YADRO! Расскажем, покажем, ответим на любые вопросы — и дадим возможность попасть в команду всего за 3 дня!
🔥 Программа митапа:
✔️ Сервисная служба YADRO: основные ресурсы и направления
Василий Бронников, Руководитель отдела техподдержки решений
✔️ Наши продукты: уникальные характеристики и возможности
Андрей Антоненко, Ведущий инженер техподдержки TATLIN
✔️ Реальные кейсы: как команды решают сложные задачи
Дмитрий Сафонов, Руководитель группы L1-поддержки TATLIN.UNIFIED
🔥 Что тебя ждёт:
➖ Реальные кейсы и инсайты из практики техподдержки
➖ Доклады от инженеров YADRO: продукты, процессы, особенности
➖ Живое общение с командой и ответы на вопросы о работе и технологиях
👨💻 А если ты задумываешься о новой работе — у тебя есть возможность быстро попасть в команду YADRO и получить оффер за 3 дня. Для этого нужно пройти короткий тест. Сделать это можно уже сейчас, а также во время или после митапа — выбирай, как тебе удобно (но заявки принимаем до 6 июля).
📌 Тест можно пройти по ссылке.
➖➖➖
🗓 26 июня, начало в 19:00 мск, четверг
🌐 ОНЛАЙН
✅ Регистрация на мероприятие
Реклама. ООО "ЭВРОНЕ.РУ". ИНН 3663057399. erid: 2VtzqxHGr6J
Хочешь узнать, как устроена техническая поддержка в одной из ведущих технологических компаний России? Приходи на онлайн-митап от YADRO! Расскажем, покажем, ответим на любые вопросы — и дадим возможность попасть в команду всего за 3 дня!
🔥 Программа митапа:
Василий Бронников, Руководитель отдела техподдержки решений
Андрей Антоненко, Ведущий инженер техподдержки TATLIN
Дмитрий Сафонов, Руководитель группы L1-поддержки TATLIN.UNIFIED
🔥 Что тебя ждёт:
➖ Реальные кейсы и инсайты из практики техподдержки
➖ Доклады от инженеров YADRO: продукты, процессы, особенности
➖ Живое общение с командой и ответы на вопросы о работе и технологиях
👨💻 А если ты задумываешься о новой работе — у тебя есть возможность быстро попасть в команду YADRO и получить оффер за 3 дня. Для этого нужно пройти короткий тест. Сделать это можно уже сейчас, а также во время или после митапа — выбирай, как тебе удобно (но заявки принимаем до 6 июля).
📌 Тест можно пройти по ссылке.
➖➖➖
🗓 26 июня, начало в 19:00 мск, четверг
🌐 ОНЛАЙН
✅ Регистрация на мероприятие
Реклама. ООО "ЭВРОНЕ.РУ". ИНН 3663057399. erid: 2VtzqxHGr6J
Please open Telegram to view this post
VIEW IN TELEGRAM
👋 Привет, админы!
Помнишь, мы говорили про мониторинг SPN? Так вот — одно дело заметить пропажу, а другое — сразу восстановить, пока не прилетели тикеты от пользователей и не начался хаос.
🔥 Вот PowerShell-скрипт, который проверяет наличие SPN
📌 Советую запускать это от имени учётки с правами на изменение SPN в AD. Можно повесить на планировщик или встроить в CI/CD пайплайн, если сервера поднимаются автоматически.
💡 Плюс: можно логировать в файл или отправлять уведомление при каждом восстановлении — для прозрачности.
💬 А у тебя бывали случаи, когда SPN пропадал и ломал всё? Как автоматизируешь восстановление? Делись кейсами в комментах 👇
👉 @win_sysadmin
Помнишь, мы говорили про мониторинг SPN? Так вот — одно дело заметить пропажу, а другое — сразу восстановить, пока не прилетели тикеты от пользователей и не начался хаос.
🔥 Вот PowerShell-скрипт, который проверяет наличие SPN
WSMAN/имя_компьютера и добавляет его обратно, если нужно:
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter * -Properties ServicePrincipalName
foreach ($comp in $computers) {
$spn = "WSMAN/$($comp.Name)"
if (-not ($comp.ServicePrincipalName -contains $spn)) {
try {
Write-Host "Восстанавливаю SPN для $($comp.Name)..." -ForegroundColor Yellow
setspn -S $spn $comp.Name
}
catch {
Write-Host "❌ Ошибка для $($comp.Name): $_" -ForegroundColor Red
}
}
}
📌 Советую запускать это от имени учётки с правами на изменение SPN в AD. Можно повесить на планировщик или встроить в CI/CD пайплайн, если сервера поднимаются автоматически.
💡 Плюс: можно логировать в файл или отправлять уведомление при каждом восстановлении — для прозрачности.
💬 А у тебя бывали случаи, когда SPN пропадал и ломал всё? Как автоматизируешь восстановление? Делись кейсами в комментах 👇
👉 @win_sysadmin
🔥4👍2❤1
👋 Привет, админы!
Сегодня разберём неочевидную, но важную тему: кто может изменять SPN в AD — и почему это может быть проблемой. Был у меня случай, когда обычный сервисный аккаунт внезапно “помог” и снёс SPN у пары серверов. Угадайте, сколько времени ушло на восстановление? 🙃
🔍 По умолчанию владельцем SPN является компьютер или учётка, которой принадлежит объект AD. Но если у пользователя есть права
💡 Как проверить, кто может править SPN на конкретном объекте?
📌
✅ Чтобы ограничить доступ, можно:
* Убрать из ACL лишние делегирования (например, у сервисных аккаунтов).
* Создать отдельную группу SPN-админов, у которой будет право на редактирование, и только у неё.
* Мониторить изменения SPN через
💬 А как ты контролируешь права на SPN? Сталкивался с ситуацией, когда “лишний” доступ ломал Kerberos или WinRM?
👉 @win_sysadmin
Сегодня разберём неочевидную, но важную тему: кто может изменять SPN в AD — и почему это может быть проблемой. Был у меня случай, когда обычный сервисный аккаунт внезапно “помог” и снёс SPN у пары серверов. Угадайте, сколько времени ушло на восстановление? 🙃
🔍 По умолчанию владельцем SPN является компьютер или учётка, которой принадлежит объект AD. Но если у пользователя есть права
Write servicePrincipalName — он может спокойно его менять.💡 Как проверить, кто может править SPN на конкретном объекте?
# Показываем ACL для объекта
$comp = Get-ADComputer -Identity "server01"
$acl = Get-ACL "AD:\$($comp.DistinguishedName)"
$acl.Access | Where-Object { $_.ActiveDirectoryRights -like "*WriteProperty*" -and $_.ObjectType -eq "bf9679c0-0de6-11d0-a285-00aa003049e2" }
📌
bf9679c0... — это GUID атрибута servicePrincipalName. Всё, что найдено — потенциальные редакторы SPN.✅ Чтобы ограничить доступ, можно:
* Убрать из ACL лишние делегирования (например, у сервисных аккаунтов).
* Создать отдельную группу SPN-админов, у которой будет право на редактирование, и только у неё.
* Мониторить изменения SPN через
Security Event Log или Auditing в AD.💬 А как ты контролируешь права на SPN? Сталкивался с ситуацией, когда “лишний” доступ ломал Kerberos или WinRM?
👉 @win_sysadmin
👍3❤1👏1
👋 Привет, админы!
Поймал недавно одну неприятную ситуацию на проде — перестали запускаться скрипты PowerShell через Task Scheduler. Причём руками всё работает, а в планировщике — ноль реакции. Думаю, многим знакома такая картина.
🔍 В чём была проблема:
Оказалось, после обновления безопасности Windows один из серверов начал блокировать запуск скриптов из-за политики исполнения (
🛠️ Решение простое — всегда явно указывай политику исполнения при запуске из планировщика:
И не забудь, что путь к скрипту должен быть абсолютным, иначе Task Scheduler не найдёт файл, особенно если он запускается от
📌 если нужно логирование — добавь вывод в файл:
💬 А у тебя были случаи, когда планировщик Windows молчал как партизан? Как отлавливаешь такие баги?
👉 @win_sysadmin
Поймал недавно одну неприятную ситуацию на проде — перестали запускаться скрипты PowerShell через Task Scheduler. Причём руками всё работает, а в планировщике — ноль реакции. Думаю, многим знакома такая картина.
🔍 В чём была проблема:
Оказалось, после обновления безопасности Windows один из серверов начал блокировать запуск скриптов из-за политики исполнения (
ExecutionPolicy). А в задаче стояло просто powershell.exe -File ..., без указания параметров.🛠️ Решение простое — всегда явно указывай политику исполнения при запуске из планировщика:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
И не забудь, что путь к скрипту должен быть абсолютным, иначе Task Scheduler не найдёт файл, особенно если он запускается от
SYSTEM или другого сервиса без профиля.📌 если нужно логирование — добавь вывод в файл:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1" >> C:\Logs\backup.log 2>&1
💬 А у тебя были случаи, когда планировщик Windows молчал как партизан? Как отлавливаешь такие баги?
👉 @win_sysadmin
👍12❤1
👋 Привет, админы!
Недавно один из серверов начал ругаться на нехватку места на диске. Визуально — всё в порядке, но свободного осталось меньше 1 ГБ. Надо было срочно найти, кто пожрал диск. Делюсь простым, но мощным PowerShell-способом найти самые тяжёлые файлы:
📦 Поиск топ-10 самых больших файлов на диске:
Что делает скрипт:
* Рекурсивно обходит все файлы (
* Отбрасывает каталоги (
* Сортирует по размеру
* Показывает путь и размер в МБ
📍 Хочешь ограничить область поиска? Просто меняй
⚡ Очень выручает, когда надо быстро понять, где «накапало» мусора — особенно в
💬 А у тебя есть свой любимый способ находить крупные файлы в Windows? Используешь PowerShell, WinDirStat или что-то кастомное?
👉 @win_sysadmin
Недавно один из серверов начал ругаться на нехватку места на диске. Визуально — всё в порядке, но свободного осталось меньше 1 ГБ. Надо было срочно найти, кто пожрал диск. Делюсь простым, но мощным PowerShell-способом найти самые тяжёлые файлы:
📦 Поиск топ-10 самых больших файлов на диске:
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue |
Where-Object { -not $_.PSIsContainer } |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="SizeMB";Expression={"{0:N2}" -f ($_.Length / 1MB)}} -First 10
Что делает скрипт:
* Рекурсивно обходит все файлы (
-Recurse)* Отбрасывает каталоги (
Where-Object { -not $_.PSIsContainer })* Сортирует по размеру
* Показывает путь и размер в МБ
📍 Хочешь ограничить область поиска? Просто меняй
-Path, например:
-Path "C:\Users", "D:\Temp"
⚡ Очень выручает, когда надо быстро понять, где «накапало» мусора — особенно в
TEMP, профилях пользователей или логах каких-нибудь нестабильных приложений.💬 А у тебя есть свой любимый способ находить крупные файлы в Windows? Используешь PowerShell, WinDirStat или что-то кастомное?
👉 @win_sysadmin
👍10❤4🔥4🐳1
👋 Привет, админы!
Сегодня хочу поделиться полезным приёмом из практики hardening Windows — поиск старых и потенциально уязвимых локальных админов.
В некоторых организациях после внедрения GPO или изменений в AD остаются локальные админы, про которых все забыли. А это — отличная лазейка для lateral movement. Особенно если это старые учетные записи с паролями, установленными вручную.
📌 Вот PowerShell-однострочник, который покажет всех локальных админов на машине:
А если нужно проверить сразу несколько машин, удобно использовать
📍 Особенно обратите внимание на пользователей с
✅ Регулярный аудит локальных групп — одна из простейших, но мощных мер для повышения безопасности.
💬 А вы чистите локальных админов вручную или автоматизировали? Может, делаете это через GPO или Ansible/Intune?
👉 @win_sysadmin
Сегодня хочу поделиться полезным приёмом из практики hardening Windows — поиск старых и потенциально уязвимых локальных админов.
В некоторых организациях после внедрения GPO или изменений в AD остаются локальные админы, про которых все забыли. А это — отличная лазейка для lateral movement. Особенно если это старые учетные записи с паролями, установленными вручную.
📌 Вот PowerShell-однострочник, который покажет всех локальных админов на машине:
Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource
А если нужно проверить сразу несколько машин, удобно использовать
Invoke-Command:
$servers = @("SRV1", "SRV2", "SRV3")
Invoke-Command -ComputerName $servers -ScriptBlock {
Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource
}
📍 Особенно обратите внимание на пользователей с
PrincipalSource = "Local". Если такие учетки не используются по делу — удаляйте или отключайте.✅ Регулярный аудит локальных групп — одна из простейших, но мощных мер для повышения безопасности.
💬 А вы чистите локальных админов вручную или автоматизировали? Может, делаете это через GPO или Ansible/Intune?
👉 @win_sysadmin
👍6❤1
👋 Привет, админы!
Пару дней назад наткнулся на странную ситуацию: на одном из серверов пользователей начало выкидывать из сессий RDP. В логах — «The remote session was disconnected because there are no Remote Desktop License Servers available…». Хотя лицензии были, сервер активирован, всё по канонам.
📌 Причина оказалась банальной: служба Remote Desktop Licensing не стартовала автоматически после перезагрузки. А ведь настроена была как Automatic. Иногда и такое бывает — что-то тормозит при старте, и служба не успевает.
🛠 Решение? Завёл себе скрипт на PowerShell, который проверяет статус нужных RDS-служб и перезапускает их при необходимости:
Можно засунуть в планировщик с триггером «при запуске системы» — и пусть подстраховывает.
💬 А у вас бывали проблемы с запуском RDS-компонентов? Или, может, делаете аудит служб другим способом? Делитесь опытом!
👉 @win_sysadmin
Пару дней назад наткнулся на странную ситуацию: на одном из серверов пользователей начало выкидывать из сессий RDP. В логах — «The remote session was disconnected because there are no Remote Desktop License Servers available…». Хотя лицензии были, сервер активирован, всё по канонам.
📌 Причина оказалась банальной: служба Remote Desktop Licensing не стартовала автоматически после перезагрузки. А ведь настроена была как Automatic. Иногда и такое бывает — что-то тормозит при старте, и служба не успевает.
🛠 Решение? Завёл себе скрипт на PowerShell, который проверяет статус нужных RDS-служб и перезапускает их при необходимости:
$services = @(
"TermService", # Remote Desktop Services
"LicenseManager", # Remote Desktop Licensing
"SessionEnv", # Remote Desktop Configuration
"UmRdpService" # Remote Desktop Services UserMode Port Redirector
)
foreach ($service in $services) {
$svc = Get-Service -Name $service -ErrorAction SilentlyContinue
if ($svc.Status -ne 'Running') {
Write-Host "Перезапускаю службу: $($svc.DisplayName)"
Start-Service -Name $service
}
}
Можно засунуть в планировщик с триггером «при запуске системы» — и пусть подстраховывает.
💬 А у вас бывали проблемы с запуском RDS-компонентов? Или, может, делаете аудит служб другим способом? Делитесь опытом!
👉 @win_sysadmin
👍5
👋 Привет, админы!
Недавно на одном из серверов столкнулся с проблемой: служба Windows Update зависала в статусе "Ожидание другого установщика". Перезапуск сервиса не помогал, обновления не ставились, а WSUS-задание висело вечно.
💡 Решение оказалось простым, но неочевидным — кто-то (привет, SCCM или ручной запуск MSI) заблокировал установщик Windows Installer.
📌 Что делать:
1. Проверяем, нет ли зависших процессов установщика:
2. Если что-то висит — снимаем задачу:
3. Чистим временные каталоги обновлений:
4. И главное — проверяем, не заблокирована ли установка:
Если ничего подозрительного нет — можно запускать установку обновлений повторно.
🧩 В моем случае зависший
💬 А у вас бывали подобные подвисания с Windows Update? Как решаете — через PowerShell, скрипты или руками? Делитесь!
👉 @win_sysadmin
Недавно на одном из серверов столкнулся с проблемой: служба Windows Update зависала в статусе "Ожидание другого установщика". Перезапуск сервиса не помогал, обновления не ставились, а WSUS-задание висело вечно.
💡 Решение оказалось простым, но неочевидным — кто-то (привет, SCCM или ручной запуск MSI) заблокировал установщик Windows Installer.
📌 Что делать:
1. Проверяем, нет ли зависших процессов установщика:
Get-Process -Name msiexec
2. Если что-то висит — снимаем задачу:
Stop-Process -Name msiexec -Force
3. Чистим временные каталоги обновлений:
net stop wuauserv
Remove-Item -Path "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force
net start wuauserv
4. И главное — проверяем, не заблокирована ли установка:
Get-WmiObject -Class Win32_Process | Where-Object { $_.Name -like "*msi*" }
Если ничего подозрительного нет — можно запускать установку обновлений повторно.
🧩 В моем случае зависший
msiexec.exe не давал поставить ни одно обновление — после его убийства всё пошло как по маслу.💬 А у вас бывали подобные подвисания с Windows Update? Как решаете — через PowerShell, скрипты или руками? Делитесь!
👉 @win_sysadmin
👍10❤1
👋 Привет, админы!
Сегодня хочу напомнить об одной ветеранской уязвимости — SMBv1. Этот протокол давно пора отправить на пенсию, но до сих пор встречаются сервера и даже новые образы Windows, где он включен. А ведь через него гуляли такие "звезды", как WannaCry и NotPetya.
💡 Проверить, включён ли SMBv1, можно так:
❌ А вот так его отключить:
🔥 И если надо автоматизировать проверку и отключение на парке машин — вот скрипт, который можно прикрутить к GPO, Intune или просто прокатить руками:
📌 Главное — не забудьте про совместимость: если у вас вдруг остались старые принт-серверы или NAS'ы, которые ещё сидят на SMBv1 — сначала обновите их.
💬 А у вас ещё где-то живёт SMBv1? Или вы его давно похоронили? Делитесь в комментах, интересно узнать!
👉 @win_sysadmin
Сегодня хочу напомнить об одной ветеранской уязвимости — SMBv1. Этот протокол давно пора отправить на пенсию, но до сих пор встречаются сервера и даже новые образы Windows, где он включен. А ведь через него гуляли такие "звезды", как WannaCry и NotPetya.
💡 Проверить, включён ли SMBv1, можно так:
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
❌ А вот так его отключить:
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
🔥 И если надо автоматизировать проверку и отключение на парке машин — вот скрипт, который можно прикрутить к GPO, Intune или просто прокатить руками:
$computers = Get-Content ".\computers.txt"
foreach ($computer in $computers) {
Invoke-Command -ComputerName $computer -ScriptBlock {
$smb = Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
if ($smb.State -eq 'Enabled') {
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
Write-Output "$env:COMPUTERNAME: SMBv1 отключен"
} else {
Write-Output "$env:COMPUTERNAME: SMBv1 уже отключен"
}
}
}
📌 Главное — не забудьте про совместимость: если у вас вдруг остались старые принт-серверы или NAS'ы, которые ещё сидят на SMBv1 — сначала обновите их.
💬 А у вас ещё где-то живёт SMBv1? Или вы его давно похоронили? Делитесь в комментах, интересно узнать!
👉 @win_sysadmin
👍9
👋 Привет, админы!
Попался мне на днях любопытный случай: один из пользователей жаловался, что после входа в систему медленно прогружается рабочий стол, хотя железо бодрое и диск в порядке.
🔍 Начал копать — и довольно быстро нашёл виновника: в автозагрузке сидела куча мусора, но особенно отличился один Group Policy скрипт, который пытался смонтировать сетевой ресурс, которого уже не существует.
📌 Чтобы быстро проверить, какие групповые политики срабатывают при входе, и сколько времени они занимают, запустил на клиенте:
🕵️ ID 4016 — начало применения политики,
🕵️ ID 5312 — завершение.
Так можно выловить тормоза и даже понять, какой GPO затягивает загрузку. В моем случае один скрипт отрабатывал почти 90 секунд — удалил его, и всё полетело.
💬 А вы анализируете Group Policy лог? Или предпочитаете сторонние утилиты типа PolicyReporter, AGPM и т.п.? Делитесь своим опытом!
👉 @win_sysadmin
Попался мне на днях любопытный случай: один из пользователей жаловался, что после входа в систему медленно прогружается рабочий стол, хотя железо бодрое и диск в порядке.
🔍 Начал копать — и довольно быстро нашёл виновника: в автозагрузке сидела куча мусора, но особенно отличился один Group Policy скрипт, который пытался смонтировать сетевой ресурс, которого уже не существует.
📌 Чтобы быстро проверить, какие групповые политики срабатывают при входе, и сколько времени они занимают, запустил на клиенте:
Get-WinEvent -LogName Microsoft-Windows-GroupPolicy/Operational |
Where-Object { $_.Id -eq 4016 -or $_.Id -eq 5312 } |
Select-Object TimeCreated, Id, Message | Sort-Object TimeCreated -Descending
🕵️ ID 4016 — начало применения политики,
🕵️ ID 5312 — завершение.
Так можно выловить тормоза и даже понять, какой GPO затягивает загрузку. В моем случае один скрипт отрабатывал почти 90 секунд — удалил его, и всё полетело.
💬 А вы анализируете Group Policy лог? Или предпочитаете сторонние утилиты типа PolicyReporter, AGPM и т.п.? Делитесь своим опытом!
👉 @win_sysadmin
🔥12👍7
👋 Привет, админы!
Сегодня расскажу про один неприятный и коварный момент, с которым столкнулся буквально на днях — невозможность запустить скрипт PowerShell из планировщика задач, хотя руками он работает идеально.
🧩 Суть:
Есть скрипт
🔍 Что помогло выяснить причину:
1. В Action указывал не сам скрипт, а запуск
2. Обязательно указал "Start in" (рабочую папку), иначе относительные пути внутри скрипта не работали.
3. Заменил
4. В General поставил галочку "Run with highest privileges" — без этого не было доступа к сетевым путям и не выполнялись некоторые команды.
💡В итоге: Task Scheduler — штука капризная, особенно с PowerShell. Поэтому всегда логируйте выход скрипта в файл, добавляйте
📌 Полный пример команды в задаче:
💬 А у вас бывали такие странности с планировщиком задач? Как отлаживаете такие случаи?
👉 @win_sysadmin
Сегодня расскажу про один неприятный и коварный момент, с которым столкнулся буквально на днях — невозможность запустить скрипт PowerShell из планировщика задач, хотя руками он работает идеально.
🧩 Суть:
Есть скрипт
.ps1, который делает бэкап и отправляет отчёт по почте. Запускаешь вручную — всё отлично. Но через Task Scheduler — тишина, никакой ошибки, ничего не происходит.🔍 Что помогло выяснить причину:
1. В Action указывал не сам скрипт, а запуск
powershell.exe с аргументами:
-ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
2. Обязательно указал "Start in" (рабочую папку), иначе относительные пути внутри скрипта не работали.
3. Заменил
powershell.exe на powershell.exe -NoProfile, чтобы избежать подвисаний из-за пользовательского профиля.4. В General поставил галочку "Run with highest privileges" — без этого не было доступа к сетевым путям и не выполнялись некоторые команды.
💡В итоге: Task Scheduler — штука капризная, особенно с PowerShell. Поэтому всегда логируйте выход скрипта в файл, добавляйте
Start-Transcript и Stop-Transcript, и не забывайте про -NoProfile.📌 Полный пример команды в задаче:
Program/script: powershell.exe
Add arguments: -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
Start in: C:\Scripts
💬 А у вас бывали такие странности с планировщиком задач? Как отлаживаете такие случаи?
👉 @win_sysadmin
👍11🔥5❤1👎1
👋 Привет, админы!
На днях словил интересный инцидент: пользователь жалуется, что не может зайти по RDP — “что-то не так с логином”. На месте оказалось, что учетка была заблокирована из-за перебора пароля. Классика. Но вот откуда попытки?
👀 Чтобы быстро выяснить, кто и откуда брутит учетку, пригодится такой PowerShell-скрипт:
📌 Замените
⚠️ И не забудьте — частые 4625 могут означать, что пора подумать о блокировке по IP, включении защиты по учеткам или внедрении fail2ban-аналогов под Windows (например, RdpGuard).
🧩 А вы как боретесь с перебором по RDP? Фаервол, GeoIP, кастомные решения?
👉 @win_sysadmin
На днях словил интересный инцидент: пользователь жалуется, что не может зайти по RDP — “что-то не так с логином”. На месте оказалось, что учетка была заблокирована из-за перебора пароля. Классика. Но вот откуда попытки?
👀 Чтобы быстро выяснить, кто и откуда брутит учетку, пригодится такой PowerShell-скрипт:
Get-EventLog -LogName Security -InstanceId 4625 -Newest 1000 |
Where-Object { $_.Message -match "Имя учетной записи:\s+USERNAME" } |
Select-Object TimeGenerated, @{Name='IP';Expression={ ($_ .Message -split "Сетевой адрес:\s+")[1] -split "`n" | Select-Object -First 1 }} |
Sort-Object TimeGenerated -Descending
📌 Замените
USERNAME на нужную учетку. Скрипт покажет последние неудачные попытки входа и IP-адреса источников. Очень удобно, чтобы отследить атаки или криво настроенные скрипты.⚠️ И не забудьте — частые 4625 могут означать, что пора подумать о блокировке по IP, включении защиты по учеткам или внедрении fail2ban-аналогов под Windows (например, RdpGuard).
🧩 А вы как боретесь с перебором по RDP? Фаервол, GeoIP, кастомные решения?
👉 @win_sysadmin
👍9❤1
👋 Привет, админы!
Если в домене внезапно начинают сыпаться жалобы вроде «не могу зайти, пароль верный» — один из первых шагов в расследовании: поиск заблокированных аккаунтов.
🔥 Вот простой PowerShell one-liner, который покажет всех заблокированных пользователей в Active Directory:
Эта команда выведет список пользователей, у которых стоит флаг
📌 А если хочешь сразу разблокировать всех (например, в тестовой среде):
⚠️ Но аккуратнее с этим — лучше сначала выяснить почему аккаунты блокируются. Часто причина — забытые пароли в автозапусках, мобильные устройства или сохранённые учётки на старых ПК.
💬 А как вы отслеживаете такие инциденты? Есть любимый способ логирования или используете сторонние решения типа ADAudit Plus?
👉 @win_sysadmin
Если в домене внезапно начинают сыпаться жалобы вроде «не могу зайти, пароль верный» — один из первых шагов в расследовании: поиск заблокированных аккаунтов.
🔥 Вот простой PowerShell one-liner, который покажет всех заблокированных пользователей в Active Directory:
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut, LastLogonDate
Эта команда выведет список пользователей, у которых стоит флаг
LockedOut. Особенно удобно, если нужно быстро понять масштаб проблемы или найти конкретного "жертву GPO".📌 А если хочешь сразу разблокировать всех (например, в тестовой среде):
Search-ADAccount -LockedOut | Unlock-ADAccount
⚠️ Но аккуратнее с этим — лучше сначала выяснить почему аккаунты блокируются. Часто причина — забытые пароли в автозапусках, мобильные устройства или сохранённые учётки на старых ПК.
💬 А как вы отслеживаете такие инциденты? Есть любимый способ логирования или используете сторонние решения типа ADAudit Plus?
👉 @win_sysadmin
👍10❤3👎1
👋 Привет, админы!
Давеча пришлось накатить пачку обновлений на десяток серверов. Раньше делал это руками — заходишь, запускаешь
🔥 Теперь использую вот такой PowerShell-скрипт, который делает всё сам:
Для этого нужен модуль
💡 Скрипт:
- скачивает и устанавливает обновления,
- автоматически перезагружает сервер (если нужно),
- работает параллельно по всем указанным хостам.
Теперь обновления ставлю за кофе-паузу, а не за полдня 🙂
💬 А вы как обновляете свои сервера? WSUS, Intune, руками? Поделитесь лайфхаками в комментах!
👉 @win_sysadmin
Давеча пришлось накатить пачку обновлений на десяток серверов. Раньше делал это руками — заходишь, запускаешь
sconfig, подтверждаешь... Короче, муторно.🔥 Теперь использую вот такой PowerShell-скрипт, который делает всё сам:
Invoke-Command -ComputerName (Get-Content "servers.txt") -ScriptBlock {
Install-WindowsUpdate -AcceptAll -AutoReboot
} -Credential (Get-Credential)
Для этого нужен модуль
PSWindowsUpdate (ставится через Install-Module PSWindowsUpdate). А список серверов просто сохраняю в servers.txt.💡 Скрипт:
- скачивает и устанавливает обновления,
- автоматически перезагружает сервер (если нужно),
- работает параллельно по всем указанным хостам.
Теперь обновления ставлю за кофе-паузу, а не за полдня 🙂
💬 А вы как обновляете свои сервера? WSUS, Intune, руками? Поделитесь лайфхаками в комментах!
👉 @win_sysadmin
👍10
👋 Привет, админы!
На днях ловил интересную проблему с GPO. Пользователь жалуется: после перезагрузки пропадают закреплённые приложения на панели задач. Сначала подумал — баг профиля. Но нет, причина оказалась куда изощрённее: групповая политика переустанавливает taskbar layout при каждом входе.
🔍 Если используете XML-модификацию панели задач (через
📌 Решение:
1. Если цель — задать стартовую конфигурацию и разрешить пользователям её менять, используйте параметр:
Установите в Enabled.
2. Или вместо постоянного применения layout — разворачивайте XML один раз с помощью скрипта при создании профиля.
💡 Ещё вариант — вообще отказаться от XML и использовать PowerShell-скрипты для закрепления приложений. Например:
🧩 Такие нюансы часто всплывают, когда пытаешься автоматизировать «по красоте», а GPO делает всё по-своему.
💬 А вы как настраиваете панель задач в корпоративной среде? Через XML, скрипты или руками?
👉 @win_sysadmin
На днях ловил интересную проблему с GPO. Пользователь жалуется: после перезагрузки пропадают закреплённые приложения на панели задач. Сначала подумал — баг профиля. Но нет, причина оказалась куда изощрённее: групповая политика переустанавливает taskbar layout при каждом входе.
🔍 Если используете XML-модификацию панели задач (через
LayoutModification.xml), и она привязана в GPO, то при каждом входе пользователя этот layout применяется заново. В итоге все ручные закрепления — сносятся.📌 Решение:
1. Если цель — задать стартовую конфигурацию и разрешить пользователям её менять, используйте параметр:
User Configuration → Administrative Templates → Start Menu and Taskbar → Do not use the taskbar layout configured in XML
Установите в Enabled.
2. Или вместо постоянного применения layout — разворачивайте XML один раз с помощью скрипта при создании профиля.
💡 Ещё вариант — вообще отказаться от XML и использовать PowerShell-скрипты для закрепления приложений. Например:
$apps = @(
"Microsoft.Edge",
"Microsoft.Windows.Explorer"
)
foreach ($app in $apps) {
$AUMID = (Get-StartApps | Where-Object { $_.Name -eq $app }).AppID
if ($AUMID) {
(New-Object -ComObject Shell.Application).NameSpace('shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}').ParseName($AUMID).InvokeVerb('pin to taskbar')
}
}
🧩 Такие нюансы часто всплывают, когда пытаешься автоматизировать «по красоте», а GPO делает всё по-своему.
💬 А вы как настраиваете панель задач в корпоративной среде? Через XML, скрипты или руками?
👉 @win_sysadmin
👍7❤3
👋 Привет, админы!
Недавно настроил автоматическое создание пользователей в AD для нового отдела — устал уже каждый раз руками забивать логины, назначать группы и почту. Решил поделиться скриптом, может, кому пригодится.
🔥 Вот простой PowerShell для создания пользователей по CSV:
CSV-шка выглядит так:
🛡 Конечно, пароль временный — дальше юзер меняет при первом входе. Плюс можно докрутить добавление в разные группы, создание home-директории и т.д.
💬 А как вы автоматизируете ввод новых пользователей? Делаете через PowerShell, сторонние тулзы или вручную? Поделитесь своим способом!
👉 @win_sysadmin
Недавно настроил автоматическое создание пользователей в AD для нового отдела — устал уже каждый раз руками забивать логины, назначать группы и почту. Решил поделиться скриптом, может, кому пригодится.
🔥 Вот простой PowerShell для создания пользователей по CSV:
Import-Csv "C:\Scripts\users.csv" | ForEach-Object {
$name = "$($_.FirstName) $($_.LastName)"
$sam = $_.SamAccountName
$ou = "OU=Users,DC=contoso,DC=local"
New-ADUser -Name $name `
-GivenName $_.FirstName `
-Surname $_.LastName `
-SamAccountName $sam `
-UserPrincipalName "$[email protected]" `
-Path $ou `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd123" -AsPlainText -Force) `
-Enabled $true
Add-ADGroupMember -Identity "Domain Users" -Members $sam
}
CSV-шка выглядит так:
FirstName,LastName,SamAccountName
Ivan,Ivanov,i.ivanov
Petr,Petrov,p.petrov
🛡 Конечно, пароль временный — дальше юзер меняет при первом входе. Плюс можно докрутить добавление в разные группы, создание home-директории и т.д.
💬 А как вы автоматизируете ввод новых пользователей? Делаете через PowerShell, сторонние тулзы или вручную? Поделитесь своим способом!
👉 @win_sysadmin
👍19❤1🥱1