Приветствую, коллеги! 👋
Меня зовут Евгений, я системный администратор в крупной госкомпании. В этом канале я делюсь полезными фишками, лайфхаками, PowerShell-скриптами и решениями проблем, с которыми сталкиваются админы Windows каждый день.
Здесь будет всё, что поможет упростить вашу работу: от настройки серверов и автоматизации задач до оптимизации системы и обеспечения безопасности. Если у вас есть вопросы или хотите обсудить какую-то тему — пишите, всегда рад общению!
Добро пожаловать в сообщество Windows-админов! 🚀
Меня зовут Евгений, я системный администратор в крупной госкомпании. В этом канале я делюсь полезными фишками, лайфхаками, PowerShell-скриптами и решениями проблем, с которыми сталкиваются админы Windows каждый день.
Здесь будет всё, что поможет упростить вашу работу: от настройки серверов и автоматизации задач до оптимизации системы и обеспечения безопасности. Если у вас есть вопросы или хотите обсудить какую-то тему — пишите, всегда рад общению!
Добро пожаловать в сообщество Windows-админов! 🚀
🔥15👍2
👋 Привет, админы!
Сегодня хочу поделиться интересным кейсом. На одном из серверов начал падать RDP — сначала редкие обрывы, потом вовсе перестал пускать пользователей. В логах (
🛠 Разбираемся!
1. Проверил стандартное — порты, брандмауэр, лицензии. Всё ок.
2. TLS 1.0 и 1.1 отключены, но сервер настроен использовать именно их.
3. Проверил реестр:
Оказалось, что TLS 1.2 у клиента выключен!
✅ Включаем:
После перезагрузки сервера RDP снова заработал!
💬 А у вас были случаи, когда внезапно переставал работать RDP? Как решали?
👉 @win_sysadmin
Сегодня хочу поделиться интересным кейсом. На одном из серверов начал падать RDP — сначала редкие обрывы, потом вовсе перестал пускать пользователей. В логах (
Event Viewer → System) красовалась ошибка "The Terminal Server security layer detected an error in the protocol stream and has disconnected the client". 🛠 Разбираемся!
1. Проверил стандартное — порты, брандмауэр, лицензии. Всё ок.
2. TLS 1.0 и 1.1 отключены, но сервер настроен использовать именно их.
3. Проверил реестр:
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
Оказалось, что TLS 1.2 у клиента выключен!
✅ Включаем:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Force
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "Enabled" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "DisabledByDefault" -Value 0 -Type DWord
После перезагрузки сервера RDP снова заработал!
💬 А у вас были случаи, когда внезапно переставал работать RDP? Как решали?
👉 @win_sysadmin
👍8❤1
Сейчас расскажу про интересную находку: неочевидный жор памяти в Windows, который сложно поймать стандартными методами.
📌 Симптомы:
– Сервер начал тормозить, приложения падают, но в диспетчере задач вроде бы всё нормально.
– "Out of memory", хотя физической памяти достаточно.
– В Process Explorer подозрительных процессов нет.
🛠 Разбираемся!
1. Открываем RAMMap (если нет — качаем с сайта Microsoft).
2. Ищем вкладку "Metafile" — это кэш файловой системы NTFS.
3. Оказалось, что он занял 60% ОЗУ и не освобождается!
🔧 Решение:
📌 Временный сброс:
📌 Ограничение роста метафайла:
После перезагрузки проблема исчезла!
💬 А у вас бывало, что память исчезает без видимых причин? Как отлавливаете утечки?
👉 @win_sysadmin
📌 Симптомы:
– Сервер начал тормозить, приложения падают, но в диспетчере задач вроде бы всё нормально.
– "Out of memory", хотя физической памяти достаточно.
– В Process Explorer подозрительных процессов нет.
🛠 Разбираемся!
1. Открываем RAMMap (если нет — качаем с сайта Microsoft).
2. Ищем вкладку "Metafile" — это кэш файловой системы NTFS.
3. Оказалось, что он занял 60% ОЗУ и не освобождается!
🔧 Решение:
📌 Временный сброс:
Clear-SystemFileCache
📌 Ограничение роста метафайла:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "NtfsMemoryUsage" /t REG_DWORD /d 1 /f
После перезагрузки проблема исчезла!
💬 А у вас бывало, что память исчезает без видимых причин? Как отлавливаете утечки?
👉 @win_sysadmin
👍11
👋 Привет, админы!
Сегодня поговорим о поиске забытых GPO в домене.
Недавно наткнулся на ситуацию: в домене много устаревших GPO, которые никто не трогал годами. Они могут замедлять загрузку ПК, вызывать конфликты или просто делать хаос в настройках.
🔥 Вот как быстро найти групповые политики, которые давно не применялись:
Этот скрипт покажет GPO, которые не изменялись последние 180 дней. Можно увеличить срок, если хочется найти совсем древние политики.
💡 А если надо проверить, какие GPO вообще не применяются на клиентских машинах? Можно воспользоваться
💬 Как вы чистите старые GPO в своей инфраструктуре? Делитесь лайфхаками!
👉 @win_sysadmin
Сегодня поговорим о поиске забытых GPO в домене.
Недавно наткнулся на ситуацию: в домене много устаревших GPO, которые никто не трогал годами. Они могут замедлять загрузку ПК, вызывать конфликты или просто делать хаос в настройках.
🔥 Вот как быстро найти групповые политики, которые давно не применялись:
$CutoffDate = (Get-Date).AddDays(-180)
Get-GPO -All | Where-Object { $_.ModificationTime -lt $CutoffDate } | Select-Object DisplayName, ModificationTime | Format-Table -AutoSize
Этот скрипт покажет GPO, которые не изменялись последние 180 дней. Можно увеличить срок, если хочется найти совсем древние политики.
💡 А если надо проверить, какие GPO вообще не применяются на клиентских машинах? Можно воспользоваться
gpresult /h на клиенте или инструментом GPOTool из RSAT. 💬 Как вы чистите старые GPO в своей инфраструктуре? Делитесь лайфхаками!
👉 @win_sysadmin
👍8
👋 Привет, админы!
Сегодня разберем автоматическое обновление групповых политик (GPO) на клиентах без необходимости ждать стандартного обновления (которое бывает раз в 90 минут + случайное отклонение до 30 минут).
🔥 Если вам нужно срочно применить новую политику, используйте:
Но что, если нужно обновить политику на всех компьютерах домена сразу? Тут поможет PowerShell:
А если нужно массово обновить политики на всех машинах в OU? Тогда можно так:
🔹 gpupdate
🔹 Invoke-GPUpdate — удобен для удаленного обновления GPO.
🔹 Комбинация с Get-ADComputer — идеальна для массового обновления в домене.
👉 @win_sysadmin
Сегодня разберем автоматическое обновление групповых политик (GPO) на клиентах без необходимости ждать стандартного обновления (которое бывает раз в 90 минут + случайное отклонение до 30 минут).
🔥 Если вам нужно срочно применить новую политику, используйте:
gpupdate /force
Но что, если нужно обновить политику на всех компьютерах домена сразу? Тут поможет PowerShell:
Invoke-GPUpdate -Computer "ИмяКомпьютера" -RandomDelayInMinutes 0
А если нужно массово обновить политики на всех машинах в OU? Тогда можно так:
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=domain,DC=local" | ForEach-Object {
Invoke-GPUpdate -Computer $_.Name -RandomDelayInMinutes 0 -AsJob
}
🔹 gpupdate
/force — хорош для локального применения. 🔹 Invoke-GPUpdate — удобен для удаленного обновления GPO.
🔹 Комбинация с Get-ADComputer — идеальна для массового обновления в домене.
👉 @win_sysadmin
👍9
🔥 Как быстро очистить память от мусорных процессов в Windows
👋 Привет, админы!
Бывало у вас такое, что сервер или рабочая станция начинают дико тормозить, а в диспетчере задач видно, что память съедена каким-то процессом? Закрыть руками не всегда удобно, особенно если это удаленная машина.
🚀 Вот простой способ быстро очистить память с помощью PowerShell:
🔍 Что делает этот скрипт?
• Находит процессы, которые жрут больше 500MB RAM
• Сортирует их по потреблению памяти
• Берет топ-5 самых прожорливых
• Безжалостно убивает их
⚠️Важно! Перед использованием убедитесь, что не завершаете критически важные сервисы. Лучше сначала проверить, кто именно грузит систему:
👉 @win_sysadmin
👋 Привет, админы!
Бывало у вас такое, что сервер или рабочая станция начинают дико тормозить, а в диспетчере задач видно, что память съедена каким-то процессом? Закрыть руками не всегда удобно, особенно если это удаленная машина.
🚀 Вот простой способ быстро очистить память с помощью PowerShell:
Get-Process | Where-Object { $_.WorkingSet64 -gt 500MB } | Sort-Object WorkingSet64 -Descending | Select-Object -First 5 | Stop-Process -Force🔍 Что делает этот скрипт?
• Находит процессы, которые жрут больше 500MB RAM
• Сортирует их по потреблению памяти
• Берет топ-5 самых прожорливых
• Безжалостно убивает их
⚠️Важно! Перед использованием убедитесь, что не завершаете критически важные сервисы. Лучше сначала проверить, кто именно грузит систему:
Get-Process | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First 10👉 @win_sysadmin
👍5
👋 Привет, админы!
Сегодня разберем одну из самых неприятных ситуаций – когда пользователи жалуются, что их учетные записи блокируются без видимых причин. Разбираешься в логах – а там Event ID 4740 с минимумом информации. Что делать?
🔥 PowerShell спасает! Вот скрипт, который поможет быстро найти источник блокировки:
Этот код просканирует журнал безопасности, найдет все события 4740 (блокировка учетной записи) и покажет кто именно заблокировал пользователя. Если видите странные IP-адреса или подозрительные устройства – пора разбираться!
💡 Бонус: если хотите автоматически мониторить блокировки и получать уведомления, можно настроить Scheduled Task с этим скриптом или завязать на SIEM.
💬 А как вы расследуете проблемы с блокировкой учетных записей? Используете PowerShell, ELK, Splunk или что-то еще? Делитесь в комментах!
👉 @win_sysadmin
Сегодня разберем одну из самых неприятных ситуаций – когда пользователи жалуются, что их учетные записи блокируются без видимых причин. Разбираешься в логах – а там Event ID 4740 с минимумом информации. Что делать?
🔥 PowerShell спасает! Вот скрипт, который поможет быстро найти источник блокировки:
$LockedUser = "user@domain.com" # Замените на нужный аккаунт
Get-WinEvent -LogName Security | Where-Object {
$_.Id -eq 4740 -and $_.Message -match $LockedUser
} | Select-Object TimeCreated, @{n="Источник";e={($_.Properties[1].Value)}}
Этот код просканирует журнал безопасности, найдет все события 4740 (блокировка учетной записи) и покажет кто именно заблокировал пользователя. Если видите странные IP-адреса или подозрительные устройства – пора разбираться!
💡 Бонус: если хотите автоматически мониторить блокировки и получать уведомления, можно настроить Scheduled Task с этим скриптом или завязать на SIEM.
💬 А как вы расследуете проблемы с блокировкой учетных записей? Используете PowerShell, ELK, Splunk или что-то еще? Делитесь в комментах!
👉 @win_sysadmin
👍6
👋 Привет, админы!
Сегодня разберем скрытых пожирателей ресурсов в Windows и как их быстро выявить.
Бывает, сервер вроде бы работает, но периодически подтормаживает. CPU не загружен, RAM в норме, диск не трещит, а лаги есть. В таких случаях я первым делом проверяю скрытые потребители ресурсов, которых не видно в обычном диспетчере задач.
🔥 Вот парочка полезных команд в PowerShell, которые помогут найти виновника:
1️⃣ Процессы с аномально высоким потреблением дескрипторов (например, утечки в сервисах):
Если видите процесс с сотнями тысяч дескрипторов – это тревожный звоночек.
2️⃣ Проверка использования сети процессами (чтобы вычислить неожиданно болтливые службы):
Выяснит, какие процессы держат максимум соединений. Особенно полезно, если сервер внезапно грузит сеть.
3️⃣ Файлы, которые держит процесс (можно отследить, кто блокирует файлы или грузит диск):
Это поможет найти виновника, если диск занят, но не ясно, кто именно активничает.
👉 @win_sysadmin
Сегодня разберем скрытых пожирателей ресурсов в Windows и как их быстро выявить.
Бывает, сервер вроде бы работает, но периодически подтормаживает. CPU не загружен, RAM в норме, диск не трещит, а лаги есть. В таких случаях я первым делом проверяю скрытые потребители ресурсов, которых не видно в обычном диспетчере задач.
🔥 Вот парочка полезных команд в PowerShell, которые помогут найти виновника:
1️⃣ Процессы с аномально высоким потреблением дескрипторов (например, утечки в сервисах):
Get-Process | Sort-Object -Property Handles -Descending | Select-Object -First 10
Если видите процесс с сотнями тысяч дескрипторов – это тревожный звоночек.
2️⃣ Проверка использования сети процессами (чтобы вычислить неожиданно болтливые службы):
Get-NetTCPConnection | Group-Object -Property OwningProcess | Sort-Object Count -Descending | Select-Object -First 10
Выяснит, какие процессы держат максимум соединений. Особенно полезно, если сервер внезапно грузит сеть.
3️⃣ Файлы, которые держит процесс (можно отследить, кто блокирует файлы или грузит диск):
Get-Process | Sort-Object -Property Handles -Descending | Select-Object -First 10
Это поможет найти виновника, если диск занят, но не ясно, кто именно активничает.
👉 @win_sysadmin
👍7🔥3❤1
👋 Привет, админы!
Сегодня расскажу про полезную фишку для тех, кто устал разбираться с зависшими RDP-сессиями.
Бывает, заходишь на сервер, а там куча зависших пользователей: кто-то закрыл сессию крестиком, кто-то просто оставил её висеть. В итоге — нагрузка на сервер, занятые лицензии, тормоза.
🔥 Быстрое завершение всех зависших сессий
📌 PowerShell в помощь! Чтобы увидеть список сессий:
А вот чтобы разлогинить всех висящих пользователей (Disconnected), можно использовать такой скрипт:
💡 Важно! Перед запуском лучше проверить, нет ли среди них нужных пользователей. Или воспользоваться более точечным вариантом, указывая ID сессии вручную:
🛠 Автоматизация: Можно закинуть этот скрипт в Task Scheduler, чтобы он сам чистил зависшие сессии раз в пару часов.
👉 @win_sysadmin
Сегодня расскажу про полезную фишку для тех, кто устал разбираться с зависшими RDP-сессиями.
Бывает, заходишь на сервер, а там куча зависших пользователей: кто-то закрыл сессию крестиком, кто-то просто оставил её висеть. В итоге — нагрузка на сервер, занятые лицензии, тормоза.
🔥 Быстрое завершение всех зависших сессий
📌 PowerShell в помощь! Чтобы увидеть список сессий:
query session
А вот чтобы разлогинить всех висящих пользователей (Disconnected), можно использовать такой скрипт:
foreach ($session in (quser | Where-Object { $_ -match 'Disc' })) {
logoff ($session -split '\s+')[2]
}
💡 Важно! Перед запуском лучше проверить, нет ли среди них нужных пользователей. Или воспользоваться более точечным вариантом, указывая ID сессии вручную:
logoff ID
🛠 Автоматизация: Можно закинуть этот скрипт в Task Scheduler, чтобы он сам чистил зависшие сессии раз в пару часов.
👉 @win_sysadmin
👍3👎1
🔥 PowerShell: Как найти и удалить дубликаты файлов
👋 Привет, админы!
Сегодня разберем, как найти дубликаты файлов на сервере или рабочей машине с помощью PowerShell. Это актуально, если диск забивается ненужными копиями данных, а порядок в файловой системе – это всегда плюс.
🔍 Поиск дубликатов по хэшу
Чтобы найти файлы с одинаковым содержимым, можно использовать хеширование. Вот готовый скрипт:
Этот скрипт:
✅ Сканирует указанную папку и подкаталоги
✅ Вычисляет хеш-суммы (SHA-256) для всех файлов
✅ Группирует файлы с одинаковыми хешами
✅ Выводит список дубликатов
❌ Удаление дубликатов (ОСТОРОЖНО!)
Если нужно удалить все копии, кроме одной, можно добавить:
⚠️ Будьте осторожны – скрипт удаляет файлы без предупреждения!
💬 А какие утилиты или скрипты вы используете для поиска дубликатов? Делитесь в комментах!
👉 @win_sysadmin
👋 Привет, админы!
Сегодня разберем, как найти дубликаты файлов на сервере или рабочей машине с помощью PowerShell. Это актуально, если диск забивается ненужными копиями данных, а порядок в файловой системе – это всегда плюс.
🔍 Поиск дубликатов по хэшу
Чтобы найти файлы с одинаковым содержимым, можно использовать хеширование. Вот готовый скрипт:
$path = "C:\Your\Directory" # Укажите свою папку
$files = Get-ChildItem -Path $path -Recurse -File |
Where-Object { $_.Length -gt 0 } | # Исключаем пустые файлы
ForEach-Object {
[PSCustomObject]@{
Path = $_.FullName
Hash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
}
}
$duplicates = $files | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 }
# Вывод дубликатов
$duplicates | ForEach-Object {
$_.Group | Select-Object -ExpandProperty Path
Write-Host "----------------------"
}Этот скрипт:
✅ Сканирует указанную папку и подкаталоги
✅ Вычисляет хеш-суммы (SHA-256) для всех файлов
✅ Группирует файлы с одинаковыми хешами
✅ Выводит список дубликатов
❌ Удаление дубликатов (ОСТОРОЖНО!)
Если нужно удалить все копии, кроме одной, можно добавить:
$duplicates | ForEach-Object {
$_.Group | Select-Object -Skip 1 | Remove-Item -Force
}⚠️ Будьте осторожны – скрипт удаляет файлы без предупреждения!
💬 А какие утилиты или скрипты вы используете для поиска дубликатов? Делитесь в комментах!
👉 @win_sysadmin
👍4❤2
👋 Привет, админы!
В небольших организациях часто бывает так: компьютер списали, из домена вывели, а учетку в AD забыли удалить. Со временем таких “осиротевших” записей становится всё больше — и вот уже список объектов в AD раздувается, мешает управлению и порождает бардак.
Найти такие "забытые" объекты можно с помощью встроенного инструмента PowerShell.
📌 Скрипт ниже ищет компьютеры, которые не логинились в домен 90+ дней, сохраняет список в файл и отправляет его через SMTP:
✅ Идеально запускать такой скрипт по расписанию через Task Scheduler раз в месяц!
💬 А у вас автоматизирована проверка старых объектов в AD? Делаете отчёты или сразу удаляете?
👉 @win_sysadmin
В небольших организациях часто бывает так: компьютер списали, из домена вывели, а учетку в AD забыли удалить. Со временем таких “осиротевших” записей становится всё больше — и вот уже список объектов в AD раздувается, мешает управлению и порождает бардак.
Найти такие "забытые" объекты можно с помощью встроенного инструмента PowerShell.
📌 Скрипт ниже ищет компьютеры, которые не логинились в домен 90+ дней, сохраняет список в файл и отправляет его через SMTP:
# Настройки
$days = 90
$time = (Get-Date).AddDays(-$days)
$exportPath = "C:\Scripts\StaleComputers.csv"
# Поиск устаревших компьютеров
$computers = Get-ADComputer -Filter {LastLogonDate -lt $time -and Enabled -eq $true} -Properties LastLogonDate |
Select-Object Name, LastLogonDate, DistinguishedName
# Экспорт в CSV
$computers | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8
# Параметры SMTP
$smtpServer = "smtp.yourdomain.local"
$from = "report@yourdomain.local"
$to = "admin@yourdomain.local"
$subject = "Отчет: Устаревшие учетные записи компьютеров"
$body = "Во вложении список компьютеров, не входивших в домен более $days дней."
# Отправка письма
Send-MailMessage -From $from -To $to -Subject $subject -Body $body -SmtpServer $smtpServer -Attachments $exportPath
✅ Идеально запускать такой скрипт по расписанию через Task Scheduler раз в месяц!
💬 А у вас автоматизирована проверка старых объектов в AD? Делаете отчёты или сразу удаляете?
👉 @win_sysadmin
👍7🔥2
👋 Привет, админы!
Сегодня словил интересную ситуацию: на одном из Windows Server 2019 начали резко тормозить GPO. Логин пользователей стал занимать по 2-3 минуты, и первая мысль — сетевые проблемы. Но всё оказалось глубже.
🔍 Настоящий виновник — расширенные параметры в GPO, в частности, WMI-фильтры.
Если WMI-запрос в фильтре сложный или сервер работает под нагрузкой — он тормозит применение политики. Проверить, что творится, можно через Event Viewer:
📁 Applications and Services Logs → Microsoft → Windows → GroupPolicy → Operational
А вот так можно посмотреть, какие именно фильтры работают дольше всего:
🛠️ В моем случае помогло:
- упростить WMI-фильтр (не проверять версию ОС через
- заменить фильтр на секцию Item-level targeting в GPP
- и... кэширование политики тоже не помешало 😉
💬 А вы часто используете WMI-фильтры в своих GPO? Или обходите стороной? Давайте обсудим!
👉 @win_sysadmin
Сегодня словил интересную ситуацию: на одном из Windows Server 2019 начали резко тормозить GPO. Логин пользователей стал занимать по 2-3 минуты, и первая мысль — сетевые проблемы. Но всё оказалось глубже.
🔍 Настоящий виновник — расширенные параметры в GPO, в частности, WMI-фильтры.
Если WMI-запрос в фильтре сложный или сервер работает под нагрузкой — он тормозит применение политики. Проверить, что творится, можно через Event Viewer:
📁 Applications and Services Logs → Microsoft → Windows → GroupPolicy → Operational
А вот так можно посмотреть, какие именно фильтры работают дольше всего:
Get-WinEvent -LogName "Microsoft-Windows-GroupPolicy/Operational" |
Where-Object { $_.Id -eq 5312 } |
Select-Object TimeCreated, Message
🛠️ В моем случае помогло:
- упростить WMI-фильтр (не проверять версию ОС через
LIKE "%10.%")- заменить фильтр на секцию Item-level targeting в GPP
- и... кэширование политики тоже не помешало 😉
💬 А вы часто используете WMI-фильтры в своих GPO? Или обходите стороной? Давайте обсудим!
👉 @win_sysadmin
👍3
👋 Привет, админы!
Недавно пришлось разбираться с неожиданной деградацией сервера — тормоза, подвисания сервисов, а по метрикам вроде всё нормально. Начал копать глубже и выяснил, что виноват swap — его буквально «съел» один из процессов.
🔥 Вот команда, которая помогает быстро найти, кто у нас самый «прожорливый» по виртуальной памяти:
Она выводит топ-10 процессов по использованию виртуальной памяти (VM). Особенно полезно, если мониторинг не показывает аномалий, а система явно ведёт себя странно.
Если увидите, что какой-то
💬 А вы как отслеживаете состояние swap'а и виртуальной памяти? Есть ли в арсенале какие-то любимые команды или дашборды в Zabbix/PRTG/Nagios?
👉 @win_sysadmin
Недавно пришлось разбираться с неожиданной деградацией сервера — тормоза, подвисания сервисов, а по метрикам вроде всё нормально. Начал копать глубже и выяснил, что виноват swap — его буквально «съел» один из процессов.
🔥 Вот команда, которая помогает быстро найти, кто у нас самый «прожорливый» по виртуальной памяти:
Get-Process | Sort-Object -Property VM -Descending | Select-Object -First 10
Она выводит топ-10 процессов по использованию виртуальной памяти (VM). Особенно полезно, если мониторинг не показывает аномалий, а система явно ведёт себя странно.
Если увидите, что какой-то
explorer.exe или svchost откусывает десятки гигабайт — точно стоит копнуть глубже. Может быть утечка памяти или неправильная работа сервиса. 💬 А вы как отслеживаете состояние swap'а и виртуальной памяти? Есть ли в арсенале какие-то любимые команды или дашборды в Zabbix/PRTG/Nagios?
👉 @win_sysadmin
👍4🤔1
👋 Привет, админы!
Недавно нужно было срочно найти, кто и когда отключил службу Windows Defender на одном из серверов. В журнале событий куча мусора, стандартный просмотр через Event Viewer — то ещё удовольствие 😅
В таких случаях PowerShell — наше всё. Вот короткий и полезный скрипт, который спас меня:
📌 Что делает этот скрипт:
- Фильтрует события
- Ищет по ключевым словам в сообщении (
- Показывает, когда именно служба была остановлена.
🔥 Быстро, удобно и без GUI. Кстати, таким образом можно отслеживать отключения любых критичных сервисов.
💬 А вы мониторите изменения статуса служб? Используете логи, сторонние решения или свой скриптовый подход?
👉 @win_sysadmin
Недавно нужно было срочно найти, кто и когда отключил службу Windows Defender на одном из серверов. В журнале событий куча мусора, стандартный просмотр через Event Viewer — то ещё удовольствие 😅
В таких случаях PowerShell — наше всё. Вот короткий и полезный скрипт, который спас меня:
Get-WinEvent -LogName "System" -FilterXPath "*[System[Provider[@Name='Service Control Manager'] and (EventID=7036)]]" |
Where-Object { $_.Message -like "*Windows Defender*" -and $_.Message -like "*stopped*" } |
Select-Object TimeCreated, Message
📌 Что делает этот скрипт:
- Фильтрует события
7036 — это смена состояния служб;- Ищет по ключевым словам в сообщении (
stopped и Windows Defender);- Показывает, когда именно служба была остановлена.
🔥 Быстро, удобно и без GUI. Кстати, таким образом можно отслеживать отключения любых критичных сервисов.
💬 А вы мониторите изменения статуса служб? Используете логи, сторонние решения или свой скриптовый подход?
👉 @win_sysadmin
👍6🤔1
👋 Всем айтишный привет!
На днях столкнулся с задачей: нужно быстро выгрузить список локальных администраторов со всех серверов в домене. А главное — автоматизировать это дело, чтобы можно было регулярно мониторить, не появилось ли чего лишнего.
🔥 Делюсь своим рабочим скриптом на PowerShell:
📌 Что делает скрипт:
- Берёт список серверов из
- Для каждого получает участников группы
- Сохраняет результат в CSV-отчёт с привязкой к имени сервера
✅ Использую это как базу для аудита. Можно, например, сравнивать отчёты в динамике или парсить на наличие неожиданных аккаунтов.
💡 Кстати, если вы используете AD, можно ещё и
💬 А вы как следите за локальными админами? Может, есть свои хитрости или используете GPO + Restricted Groups?
👉 @win_sysadmin
На днях столкнулся с задачей: нужно быстро выгрузить список локальных администраторов со всех серверов в домене. А главное — автоматизировать это дело, чтобы можно было регулярно мониторить, не появилось ли чего лишнего.
🔥 Делюсь своим рабочим скриптом на PowerShell:
$servers = Get-Content ".\servers.txt"
foreach ($server in $servers) {
try {
$admins = Get-LocalGroupMember -ComputerName $server -Group "Administrators"
$admins | Select-Object @{Name="Server";Expression={$server}}, Name, ObjectClass | Export-Csv -Append -NoTypeInformation -Path ".\admins_report.csv"
} catch {
Write-Warning "Не удалось подключиться к $server: $_"
}
}
📌 Что делает скрипт:
- Берёт список серверов из
servers.txt- Для каждого получает участников группы
Administrators- Сохраняет результат в CSV-отчёт с привязкой к имени сервера
✅ Использую это как базу для аудита. Можно, например, сравнивать отчёты в динамике или парсить на наличие неожиданных аккаунтов.
💡 Кстати, если вы используете AD, можно ещё и
net localgroup Administrators /domain дергать через Invoke-Command, но локально — быстрее и надежнее.💬 А вы как следите за локальными админами? Может, есть свои хитрости или используете GPO + Restricted Groups?
👉 @win_sysadmin
👍3💩2
👋 Всем айтишный привет!
Недавно столкнулся с задачей: нужно было выключить группу компьютеров в конце дня, чтобы не гоняли лишнее электричество. Ручками заходить на каждый — удовольствие ниже среднего, поэтому сразу пошёл через PowerShell.
🔥 Вот скрипт, который пробегает по списку имен и выключает их удалённо:
✅ В файле
💡 Не забудь, чтобы всё сработало, на удалённых ПК должна быть включена служба WMI и разрешён доступ через брандмауэр. И конечно, запускай от имени администратора.
🧩 Можно дополнить проверкой доступности (ping) перед выключением — если нужно, покажу в следующем посте.
💬 А вы автоматизируете выключение машин в своей сети? Или всё вручную/через GPO? Поделитесь практикой — будет полезно!
👉 @win_sysadmin
Недавно столкнулся с задачей: нужно было выключить группу компьютеров в конце дня, чтобы не гоняли лишнее электричество. Ручками заходить на каждый — удовольствие ниже среднего, поэтому сразу пошёл через PowerShell.
🔥 Вот скрипт, который пробегает по списку имен и выключает их удалённо:
$computers = Get-Content "C:\Scripts\pc_list.txt"
foreach ($pc in $computers) {
try {
Write-Host "Выключаю $pc..." -ForegroundColor Yellow
Stop-Computer -ComputerName $pc -Force -ErrorAction Stop
Write-Host "$pc выключен." -ForegroundColor Green
} catch {
Write-Host "Не удалось выключить $pc: $_" -ForegroundColor Red
}
}
✅ В файле
pc_list.txt — просто список имен или IP адресов, по одному на строку. 💡 Не забудь, чтобы всё сработало, на удалённых ПК должна быть включена служба WMI и разрешён доступ через брандмауэр. И конечно, запускай от имени администратора.
🧩 Можно дополнить проверкой доступности (ping) перед выключением — если нужно, покажу в следующем посте.
💬 А вы автоматизируете выключение машин в своей сети? Или всё вручную/через GPO? Поделитесь практикой — будет полезно!
👉 @win_sysadmin
👍6🔥1
👋 Привет, админы!
Сегодня расскажу про простой, но очень полезный трюк, который помогает выявить подозрительные подключения к вашему Windows-серверу — особенно актуально, если сервер доступен извне.
🔥 Проверить активные входящие подключения можно командой:
А чтобы узнать, какой процесс стоит за каждым подключением, дополним это:
📌 Этот способ помогает быстро выявить:
- необычные подключения к RDP или кастомным портам;
- неизвестные процессы, которые “висят” в сети;
- потенциальный бэкдор или троян.
🧠 Совет: поставьте это на регулярный мониторинг через таск или скрипт с логом в файл.
💬 А вы мониторите сетевые подключения на проде? Используете PowerShell, Sysmon или что-то другое?
👉 @win_sysadmin
Сегодня расскажу про простой, но очень полезный трюк, который помогает выявить подозрительные подключения к вашему Windows-серверу — особенно актуально, если сервер доступен извне.
🔥 Проверить активные входящие подключения можно командой:
Get-NetTCPConnection -State Established | Where-Object { $_.RemoteAddress -ne '127.0.0.1' } |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess |
Sort-Object -Property RemoteAddress
А чтобы узнать, какой процесс стоит за каждым подключением, дополним это:
Get-NetTCPConnection -State Established |
Where-Object { $_.RemoteAddress -ne '127.0.0.1' } |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
RemoteAddress = $_.RemoteAddress
RemotePort = $_.RemotePort
LocalPort = $_.LocalPort
ProcessName = $proc.ProcessName
PID = $_.OwningProcess
}
} | Sort-Object RemoteAddress
📌 Этот способ помогает быстро выявить:
- необычные подключения к RDP или кастомным портам;
- неизвестные процессы, которые “висят” в сети;
- потенциальный бэкдор или троян.
🧠 Совет: поставьте это на регулярный мониторинг через таск или скрипт с логом в файл.
💬 А вы мониторите сетевые подключения на проде? Используете PowerShell, Sysmon или что-то другое?
👉 @win_sysadmin
👍6
👋 Привет, админы!
Иногда нужно быстро понять — кто и когда логинился на сервер или важную машину. Особенно если подозрения на взлом или кто-то заходит в неурочное время.
Вот простой PowerShell-скрипт, который вытащит логи входа в систему (
📌
📌 Можно заменить на
📌 Или убрать фильтр, чтобы увидеть всё.
Полезно для расследований, мониторинга активности админов, а ещё — если нужно зафиксировать "кто заходил ночью" 😅
💬 А вы ведёте аудит логинов? Через SIEM, syslog, журнал событий, или всё по-олдскулу?
👉 @win_sysadmin
Иногда нужно быстро понять — кто и когда логинился на сервер или важную машину. Особенно если подозрения на взлом или кто-то заходит в неурочное время.
Вот простой PowerShell-скрипт, который вытащит логи входа в систему (
Event ID 4624) из журнала безопасности:
Get-WinEvent -FilterHashtable @{
LogName = 'Security';
Id = 4624;
StartTime = (Get-Date).AddDays(-1)
} | ForEach-Object {
$xml = [xml]$_.ToXml()
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
AccountName = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "TargetUserName"} | Select-Object -ExpandProperty '#text'
IPAddress = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "IpAddress"} | Select-Object -ExpandProperty '#text'
LogonType = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "LogonType"} | Select-Object -ExpandProperty '#text'
}
} | Where-Object { $_.AccountName -ne "ANONYMOUS LOGON" -and $_.LogonType -eq "10" } | Sort-Object TimeCreated
📌
LogonType = 10 — это удалённый интерактивный вход (RDP). 📌 Можно заменить на
2, если нужен локальный интерактивный логон. 📌 Или убрать фильтр, чтобы увидеть всё.
Полезно для расследований, мониторинга активности админов, а ещё — если нужно зафиксировать "кто заходил ночью" 😅
💬 А вы ведёте аудит логинов? Через SIEM, syslog, журнал событий, или всё по-олдскулу?
👉 @win_sysadmin
🔥6👍3