💻 Сисадмин — это человек, который:
✔ приходит раньше всех;
✔ уходит позже всех;
✔ знает все пароли, но делает вид, что не знает;
✔ чинит принтеры, хотя не обязан;
✔ отвечает за интернет, электричество, погоду и плохое настроение пользователей.
С праздником, легенды IT! Пусть хотя бы сегодня никто не говорит:
«У меня компьютер не работает. Посмотри...» 😄
✔ приходит раньше всех;
✔ уходит позже всех;
✔ знает все пароли, но делает вид, что не знает;
✔ чинит принтеры, хотя не обязан;
✔ отвечает за интернет, электричество, погоду и плохое настроение пользователей.
С праздником, легенды IT! Пусть хотя бы сегодня никто не говорит:
«У меня компьютер не работает. Посмотри...» 😄
❤37😁3
👋 Привет, админы!
Сегодня расскажу про один недокументированный нюанс с задачами в Планировщике Windows, с которым недавно столкнулся сам. Был у меня скрипт, который по расписанию должен запускаться от имени системной учетной записи (
🔍 После копания выяснилось: если задача запускается от SYSTEM, но в свойствах включена опция "Запускать только при входе пользователя", - она НЕ выполнится, потому что SYSTEM не входит в систему в классическом понимании.
💡 Решение:
1. Зайти в свойства задачи.
2. Переключить опцию на: "Выполнять вне зависимости от входа пользователя".
3. Обязательно включить галку "Не сохранять пароль", если используете обычную учетку (для SYSTEM это не критично).
📌 Ну и по возможности включайте логирование в задаче - пусть пишет вывод скрипта в файл, так проще отлавливать подобные "невидимые" фейлы.
📲 Мы в MAX
👉 @win_sysadmin
Сегодня расскажу про один недокументированный нюанс с задачами в Планировщике Windows, с которым недавно столкнулся сам. Был у меня скрипт, который по расписанию должен запускаться от имени системной учетной записи (
SYSTEM). Всё настроено правильно, вручную запускается - работает. Но вот по расписанию не срабатывает. Без ошибок, без логов, просто тишина. 🤔🔍 После копания выяснилось: если задача запускается от SYSTEM, но в свойствах включена опция "Запускать только при входе пользователя", - она НЕ выполнится, потому что SYSTEM не входит в систему в классическом понимании.
💡 Решение:
1. Зайти в свойства задачи.
2. Переключить опцию на: "Выполнять вне зависимости от входа пользователя".
3. Обязательно включить галку "Не сохранять пароль", если используете обычную учетку (для SYSTEM это не критично).
📌 Ну и по возможности включайте логирование в задаче - пусть пишет вывод скрипта в файл, так проще отлавливать подобные "невидимые" фейлы.
📲 Мы в MAX
👉 @win_sysadmin
👍9😁2
👋 Привет, админы!
Недавно столкнулся с проблемой - один из пользователей жаловался, что «всё долго открывается», особенно сетевые папки. На первый взгляд - обычная история, но решил покопать глубже.
📌 Оказалось, виноват механизм автоматического поиска сетевых принтеров и папок, который Windows выполняет при каждом открытии проводника. На слабых или загруженных машинах это может серьезно замедлить работу.
✅ Быстрое решение - отключить этот механизм через реестр или GPO. Вот способ через PowerShell:
Этот параметр отключает автоматическое сканирование сети на предмет расшаренных ресурсов. Пользователь сам откроет то, что нужно - без лишних тормозов. Проверено - сразу стал отзывчивее проводник и пропали лаги при открытии «Сеть».
📲 Мы в MAX
👉 @win_sysadmin
Недавно столкнулся с проблемой - один из пользователей жаловался, что «всё долго открывается», особенно сетевые папки. На первый взгляд - обычная история, но решил покопать глубже.
📌 Оказалось, виноват механизм автоматического поиска сетевых принтеров и папок, который Windows выполняет при каждом открытии проводника. На слабых или загруженных машинах это может серьезно замедлить работу.
✅ Быстрое решение - отключить этот механизм через реестр или GPO. Вот способ через PowerShell:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "NoNetCrawling" -Value 1
Этот параметр отключает автоматическое сканирование сети на предмет расшаренных ресурсов. Пользователь сам откроет то, что нужно - без лишних тормозов. Проверено - сразу стал отзывчивее проводник и пропали лаги при открытии «Сеть».
📲 Мы в MAX
👉 @win_sysadmin
👍10❤5🔥4
👋 Привет, админы!
Куда уходит свободное место на диске? Думаешь, что всё под контролем, а потом бац - и диск C: в красной зоне. Особенно часто такое встречал на серверах с включённым журналированием или забытым логированием.
📌 Накидал скрипт, который помогает быстро найти топ папок и файлов, пожирающих пространство:
Что бы посмотреть топ папок, используй
(если не знаешь -
Очень выручает, когда нужно быстро понять, что разрослось - профили пользователей, временные файлы, лог-файлы от софта, который никто не трогал годами...
📲 Мы в MAX
👉 @win_sysadmin
Куда уходит свободное место на диске? Думаешь, что всё под контролем, а потом бац - и диск 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 можно взять отсюда)Очень выручает, когда нужно быстро понять, что разрослось - профили пользователей, временные файлы, лог-файлы от софта, который никто не трогал годами...
📲 Мы в MAX
👉 @win_sysadmin
👍7🔥3🤣1
🚀 Подборка полезных IT каналов в Max
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max.ru/channel_win_sysadmin Системный Администратор Windows
https://max.ru/channel_linux_admin Linux: Системный администратор
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Системный администратор
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)
Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак
Английский с нуля 🇬🇧
https://max.ru/UchuEnglish
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://max.ru/channel_DevLab1C 1С:Предприятие 8
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
https://max.ru/channel_cpp_geek C++ geek
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Rust📌
https://max.ru/channel_rust_lib
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
https://max.ru/channel_java_geek Java Geek
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии в IT📌
https://max.ru/progjob
https://max.ru/channel_rabotait
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Городские📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
https://max.ru/channel_krasnodar_novosty Краснодар Новости
https://max.ru/channel_novosibirsk_novosti Новосибирск
https://max.ru/channel_samara_novosti Новости Самары
https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга
https://max.ru/channel_kazan_novosti Новости Казани
https://max.ru/channel_omsk_novosti Новости Омска
https://max.ru/channel_moskva_24 Москва 24
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max.ru/channel_win_sysadmin Системный Администратор Windows
https://max.ru/channel_linux_admin Linux: Системный администратор
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Системный администратор
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)
Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак
Английский с нуля 🇬🇧
https://max.ru/UchuEnglish
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://max.ru/channel_DevLab1C 1С:Предприятие 8
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
https://max.ru/channel_cpp_geek C++ geek
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Rust📌
https://max.ru/channel_rust_lib
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
https://max.ru/channel_java_geek Java Geek
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии в IT📌
https://max.ru/progjob
https://max.ru/channel_rabotait
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Городские📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
https://max.ru/channel_krasnodar_novosty Краснодар Новости
https://max.ru/channel_novosibirsk_novosti Новосибирск
https://max.ru/channel_samara_novosti Новости Самары
https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга
https://max.ru/channel_kazan_novosti Новости Казани
https://max.ru/channel_omsk_novosti Новости Омска
https://max.ru/channel_moskva_24 Москва 24
MAX
Системный Администратор | Sysadmin Windows & Linux Server. …
Купить рекламу: https://telega.in/m/i_odmin
Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
👎7🖕3👍1
👋 Привет, админы!
Была давече нестандартная проблема на одном из клиентских Windows 11. Пользователь жаловался: не работает печать, а в очереди, вечно зависшие задания. Перезапуск spooler'а не помогал.
Разбор показал - виноват битый драйвер, но перед этим пришлось как следует почистить очередь печати и файлы, чтобы дать системе "вдохнуть". Накидал скрипт, который меня спас:
🔥 Полная зачистка очереди печати и временных файлов spooler:
Если директория не очищается, проверь права или вручную удали зависшие
А чтобы в следующий раз не искать виновника вручную, добавил логирование проблем с драйверами через
Очень удобно, сразу видно, какой драйвер шалит.
📲 Мы в MAX
👉 @win_sysadmin
Была давече нестандартная проблема на одном из клиентских Windows 11. Пользователь жаловался: не работает печать, а в очереди, вечно зависшие задания. Перезапуск spooler'а не помогал.
Разбор показал - виноват битый драйвер, но перед этим пришлось как следует почистить очередь печати и файлы, чтобы дать системе "вдохнуть". Накидал скрипт, который меня спас:
🔥 Полная зачистка очереди печати и временных файлов spooler:
Stop-Service -Name spooler -Force
Remove-Item -Path "C:\Windows\System32\spool\PRINTERS\*" -Force
Start-Service -Name spooler
Если директория не очищается, проверь права или вручную удали зависшие
.spl и .shd файлы. После этого очередь ожила, и новые задания пошли без залипаний.А чтобы в следующий раз не искать виновника вручную, добавил логирование проблем с драйверами через
Get-EventLog:
Get-EventLog -LogName System -Source "Print" -EntryType Error -Newest 20
Очень удобно, сразу видно, какой драйвер шалит.
📲 Мы в MAX
👉 @win_sysadmin
👍10🔥3
👋 Привет, админы!
Пользователи массово жаловались на медленный вход в систему. Крутилось приветствие по 3-5 минут. Оказалось, виновата политика групповых дисков, которая грузилась слишком долго.
Решение оказалось простым, нужно быстро найти проблемные политики. Вот удобный скрипт на PowerShell для проверки времени обработки GPO при входе пользователя:
Этот скрипт покажет 10 самых «тяжёлых» групповых политик по времени загрузки. В моём случае лидером стала политика с забытым сетевым диском на уже не существующий файловый сервер.
📲 Мы в MAX
👉 @win_sysadmin
Пользователи массово жаловались на медленный вход в систему. Крутилось приветствие по 3-5 минут. Оказалось, виновата политика групповых дисков, которая грузилась слишком долго.
Решение оказалось простым, нужно быстро найти проблемные политики. Вот удобный скрипт на PowerShell для проверки времени обработки GPO при входе пользователя:
Get-WinEvent -LogName "Microsoft-Windows-GroupPolicy/Operational" |
Where-Object { $_.Id -eq 4016 } |
Select-Object TimeCreated, @{n='Время загрузки GPO (сек)';e={$_.Properties[0].Value}}, @{n='Название GPO';e={$_.Properties[1].Value}} |
Sort-Object 'Время загрузки GPO (сек)' -Descending | Select-Object -First 10
Этот скрипт покажет 10 самых «тяжёлых» групповых политик по времени загрузки. В моём случае лидером стала политика с забытым сетевым диском на уже не существующий файловый сервер.
📲 Мы в MAX
👉 @win_sysadmin
👍5🔥4❤3
👋 Всем админам добрейшего дня!
Как массово поменять пароли локальных администраторов на паре десятков серверов.
Ручками это делать долго да и не очень безопасно. Лучше освободившееся время потрачу с пользой 🍺 Поэтому автоматизируем процесс через PowerShell.
Ниже собственно скрипт:
⚡️ Важно: убедись, что у тебя есть права на все машины и открыт WinRM!
Если хочется более гибко, можно расширить скрипт, добавить логирование или рандомизацию паролей.
📲 Мы в MAX
👉 @win_sysadmin
Как массово поменять пароли локальных администраторов на паре десятков серверов.
Ручками это делать долго да и не очень безопасно. Лучше освободившееся время потрачу с пользой 🍺 Поэтому автоматизируем процесс через PowerShell.
Ниже собственно скрипт:
$servers = @("Server01", "Server02", "Server03") # список серверов
$newPass = ConvertTo-SecureString "Новый_Сложный_Пароль!" -AsPlainText -Force
foreach ($srv in $servers) {
Invoke-Command -ComputerName $srv -ScriptBlock {
param($pass)
$user = [ADSI]"WinNT://./Administrator,User"
$user.SetPassword($pass)
} -ArgumentList $newPass
}
⚡️ Важно: убедись, что у тебя есть права на все машины и открыт WinRM!
Если хочется более гибко, можно расширить скрипт, добавить логирование или рандомизацию паролей.
📲 Мы в MAX
👉 @win_sysadmin
👍12🤝1
👋 Привет, админы!
Недавно столкнулся с ситуацией: на одном из серверов системный диск практически «забился» под завязку, а штатные чистилки мусора не помогали - свободного места оставалось критически мало. Оказалось, что куча старых файлов обновлений, временных логов и упаковок пакетов Windows Update съели не меньше 20 ГБ!
🔥 Чтобы оперативно и централизованно освободить место на C:, я использовал PowerShell-скрипт для сброса компонентов Windows Update и удаления временных файлов.
🔍 Что делает скрипт:
1. Останавливает службы wuauserv, bits и cryptsvc, чтобы освободить доступ к файлам обновлений.
2. Переименовывает папки
3. Перезапускает службы, чтобы система могла продолжить получать обновления.
4. Удаляет старые временные файлы из
5. (Опционально) Очищает папку
6. Запускает командлет
💡 Лайфхак:
- Если вы работаете со множеством серверов, оберните этот скрипт в экспорт модуля или сохраните в виде
- Можно добавить проверку свободного места перед выполнением очистки, чтобы скрипт запускался, только когда доступно меньше, скажем, 10 ГБ:
Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.
📲 Мы в MAX
👉 @win_sysadmin
Недавно столкнулся с ситуацией: на одном из серверов системный диск практически «забился» под завязку, а штатные чистилки мусора не помогали - свободного места оставалось критически мало. Оказалось, что куча старых файлов обновлений, временных логов и упаковок пакетов Windows Update съели не меньше 20 ГБ!
🔥 Чтобы оперативно и централизованно освободить место на C:, я использовал PowerShell-скрипт для сброса компонентов Windows Update и удаления временных файлов.
# 1. Остановим службы обновлений
Write-Host "Останавливаю службы Windows Update..." -ForegroundColor Cyan
Stop-Service -Name wuauserv -Force
Stop-Service -Name bits -Force
Stop-Service -Name cryptsvc -Force
# 2. Переименуем папки SoftwareDistribution и Catroot2 (чтобы сбросить кеш)
$sd = "C:\Windows\SoftwareDistribution"
$cr2 = "C:\Windows\System32\catroot2"
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
Write-Host "Переименовываю SoftwareDistribution и Catroot2..." -ForegroundColor Cyan
Rename-Item -Path $sd -NewName "SoftwareDistribution_$timestamp" -Force
Rename-Item -Path $cr2 -NewName "catroot2_$timestamp" -Force
# 3. Запустим службы обратно
Write-Host "Запускаю службы Windows Update..." -ForegroundColor Cyan
Start-Service -Name wuauserv
Start-Service -Name bits
Start-Service -Name cryptsvc
# 4. Удаляем временные файлы пользователя и систему temp
Write-Host "Удаляю временные файлы..." -ForegroundColor Cyan
Get-ChildItem "C:\Windows\Temp" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Get-ChildItem "$env:TEMP" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 5. Очищаем папку Prefetch (если нужно)
Write-Host "Очищаю Prefetch (опционально)..." -ForegroundColor Cyan
Get-ChildItem "C:\Windows\Prefetch" -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 6. Запускаем анализ и дефрагментацию (для HDD/SDD команда отличается)
Write-Host "Запускаю оптимизацию диска (для HDD)..." -ForegroundColor Cyan
Optimize-Volume -DriveLetter C -ReTrim -Verbose
Write-Host "Готово! Освобождено место и сброшен кеш Windows Update." -ForegroundColor Green
🔍 Что делает скрипт:
1. Останавливает службы wuauserv, bits и cryptsvc, чтобы освободить доступ к файлам обновлений.
2. Переименовывает папки
SoftwareDistribution и catroot2 - таким образом Windows создаёт новые «чистые» папки при следующем запуске службы обновлений.3. Перезапускает службы, чтобы система могла продолжить получать обновления.
4. Удаляет старые временные файлы из
C:\Windows\Temp и из переменной %TEMP% текущего пользователя.5. (Опционально) Очищает папку
Prefetch - пригодится, если вы хотите сбросить предзагрузку приложений (иногда помогает ускорить старт служб).6. Запускает командлет
Optimize-Volume с параметром –ReTrim (важно для SSD, если нужно, или дефрагментацию для HDD), что в итоге дополнительно освобождает свободное пространство и приводит метаданные диска в порядок.💡 Лайфхак:
- Если вы работаете со множеством серверов, оберните этот скрипт в экспорт модуля или сохраните в виде
.ps1, а затем запускайте его через Scheduled Task по расписанию раз в неделю/месяц.- Можно добавить проверку свободного места перед выполнением очистки, чтобы скрипт запускался, только когда доступно меньше, скажем, 10 ГБ:
$freeGB = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 2)
if ($freeGB -lt 10) {
# выполняем очистку
} else {
Write-Host "Достаточно места — пропускаю действия."
}
Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.
📲 Мы в MAX
👉 @win_sysadmin
👍9🤮3❤1🔥1
👋 Привет, админы!
Недавно был случай, один из файловых серверов неожиданно перестал принимать события - логи просто «забились» до предела, из-за чего служба безопасности не могла записывать критичные события входа. Оказалось, что журналы событий выросли до 10 ГБ и система больше не записывала новые записи.
🔥 Чтобы предотвратить подобные ситуации, я собрал небольшой скрипт для автоматического архивации и очистки журналов событий, когда их размер превышает заданный порог. Вот пример, который запустил на сервере:
Этот скрипт проверяет размер каждого указанного журнала, экспортирует его в папку архива, если размер больше 1 ГБ, и очищает файл. Я поставил его в Task Scheduler с частотой 1 раз в сутки, чтобы не «догонять» проблему вручную.
📲 Мы в MAX
👉 @win_sysadmin
Недавно был случай, один из файловых серверов неожиданно перестал принимать события - логи просто «забились» до предела, из-за чего служба безопасности не могла записывать критичные события входа. Оказалось, что журналы событий выросли до 10 ГБ и система больше не записывала новые записи.
🔥 Чтобы предотвратить подобные ситуации, я собрал небольшой скрипт для автоматического архивации и очистки журналов событий, когда их размер превышает заданный порог. Вот пример, который запустил на сервере:
# Порог в мегабайтах
$logSizeThresholdMB = 1024
# Папка для архивации
$archivePath = "D:\EventLogArchives"
if (-not (Test-Path $archivePath)) {
New-Item -Path $archivePath -ItemType Directory | Out-Null
}
# Функция для проверки и архивации логов
function Archive-And-Clear-EventLog {
param (
[string]$LogName
)
# Определяем текущий размер лога
$logInfo = wevtutil gl $LogName
$fileSizeLine = ($logInfo | Where-Object { $_ -match "fileSize" })
$sizeBytes = [int64]($fileSizeLine -replace "[^0-9]", "")
$sizeMB = [math]::Round($sizeBytes / 1MB, 2)
if ($sizeMB -ge $logSizeThresholdMB) {
$timestamp = (Get-Date).ToString("yyyyMMdd_HHmmss")
$archiveFile = Join-Path $archivePath "$LogName`_$timestamp.evtx"
# Экспортируем текущий журнал
wevtutil epl $LogName $archiveFile
Write-Host "Архивировал лог $LogName (размер $sizeMB MB) в $archiveFile"
# Очищаем журнал
wevtutil cl $LogName
Write-Host "Очищен лог $LogName"
} else {
Write-Host "Лог $LogName в пределах нормы: $sizeMB MB"
}
}
# Получаем все журналы, которые хотим контролировать (пример: System и Security)
$logsToCheck = @("System", "Security")
foreach ($log in $logsToCheck) {
Archive-And-Clear-EventLog -LogName $log
}
Этот скрипт проверяет размер каждого указанного журнала, экспортирует его в папку архива, если размер больше 1 ГБ, и очищает файл. Я поставил его в Task Scheduler с частотой 1 раз в сутки, чтобы не «догонять» проблему вручную.
📲 Мы в MAX
👉 @win_sysadmin
👍9❤2
👋 Привет, админы!
Если не ошибаюсь, осенью 21 года в одном из наших дата-центров после планового обновления клиентских машин начали массово падать сеансы RDP - пользователи жаловались, что после ввода пароля сессия сразу же разрывается. Оказалось, во время апдейта поставился неполностью совместимый патч безопасности, который конфликтовал с включённым на компьютерах аудиторией учетных политик.
🔥 Чтобы быстро отследить все последние установленные обновления на целевой группе машин и при необходимости откатить проблемный патч, я использовал вот такой PowerShell-скрипт:
С помощью этого отчёта мы быстро определили, что именно на всех проблемных ПК установился KB5005565. Чтобы откатить его удалённо, использовал команду:
После перезапуска машин RDP-сессии вернулись в норму. Плюс я добавил правило на WSUS, чтобы этот конкретный патч не раздавался снова до выяснения причины конфликта.
📲 Мы в MAX
👉 @win_sysadmin
Если не ошибаюсь, осенью 21 года в одном из наших дата-центров после планового обновления клиентских машин начали массово падать сеансы RDP - пользователи жаловались, что после ввода пароля сессия сразу же разрывается. Оказалось, во время апдейта поставился неполностью совместимый патч безопасности, который конфликтовал с включённым на компьютерах аудиторией учетных политик.
🔥 Чтобы быстро отследить все последние установленные обновления на целевой группе машин и при необходимости откатить проблемный патч, я использовал вот такой PowerShell-скрипт:
# Получаем список компьютеров из текстового файла
$computers = Get-Content -Path "C:\Scripts\computers.txt"
# Словарь для хранения списка установленных обновлений
$updateReport = @()
foreach ($computer in $computers) {
try {
# Получаем установленные обновления за последние 7 дней
$recentUpdates = Get-HotFix -ComputerName $computer |
Where-Object { $_.InstalledOn -ge (Get-Date).AddDays(-7) }
foreach ($upd in $recentUpdates) {
$updateReport += [PSCustomObject]@{
Computer = $computer
KBArticle = $upd.HotFixID
InstalledOn = $upd.InstalledOn
}
}
}
catch {
Write-Warning "Не удалось получить обновления с сервера $computer: $_"
}
}
# Сохраняем отчёт в CSV
$csvPath = "C:\Scripts\RecentUpdatesReport.csv"
$updateReport | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "Отчет сохранен в $csvPath"
С помощью этого отчёта мы быстро определили, что именно на всех проблемных ПК установился KB5005565. Чтобы откатить его удалённо, использовал команду:
Invoke-Command -ComputerName (Get-Content "C:\Scripts\computers.txt") -ScriptBlock {
wusa /uninstall /kb:5005565 /quiet /norestart
}
После перезапуска машин RDP-сессии вернулись в норму. Плюс я добавил правило на WSUS, чтобы этот конкретный патч не раздавался снова до выяснения причины конфликта.
📲 Мы в MAX
👉 @win_sysadmin
👍9❤1
👋 Привет, админы!
Недавно столкнулся с интересным кейсом: один из файловых серверов начал сигнализировать о недостатке свободного пространства. При проверке выяснилось, что причиной стали старые логи IIS и системные файлы, которые копились неделями. Для нас, админов, важно держать «мусор» под контролем, чтобы не проснуться однажды с дискoм, полностью забитым «ненужными» данными.
🔥 В таких случаях мне помогает небольшой PowerShell-скрипт для автоматической очистки логов старше заданного числа дней. Вот что я настроил:
Основные моменты:
1. Гибкая настройка пути: в переменной
2. Параметр возраста: переменная
3. Рекурсивный обход: флаг
4. Безопасность: перед удалением скрипт выводит список удаляемых файлов. Если сомневаетесь — закомментируйте строку
💬 Я запланировал выполнение этого скрипта через Task Scheduler каждую неделю в воскресенье в полночь. В результате освободилось несколько десятков гигабайт и администраторы перестали получать тревожные письма о заполненном разделе C:.
А как вы справляетесь с накоплением логов на серверах? Может, используете какие-то централизованные решения (SIEM, Splunk, ELK) для ретеншена и ротации? Делитесь своими приёмами в комментариях!
📲 Мы в MAX
👉 @win_sysadmin
Недавно столкнулся с интересным кейсом: один из файловых серверов начал сигнализировать о недостатке свободного пространства. При проверке выяснилось, что причиной стали старые логи IIS и системные файлы, которые копились неделями. Для нас, админов, важно держать «мусор» под контролем, чтобы не проснуться однажды с дискoм, полностью забитым «ненужными» данными.
🔥 В таких случаях мне помогает небольшой PowerShell-скрипт для автоматической очистки логов старше заданного числа дней. Вот что я настроил:
# Путь до папки с логами (пример для IIS)
$LogPath = "C:\inetpub\logs\LogFiles"
# Возраст файлов (в днях), после которого файлы подлежат удалению
$DaysThreshold = 30
# Получаем все файлы в папке и вложенных каталогах старше $DaysThreshold
$OldLogs = Get-ChildItem -Path $LogPath -Recurse -File |
Where-Object { ($_.LastWriteTime -lt (Get-Date).AddDays(-$DaysThreshold)) }
# Если есть файлы для удаления, выводим их и удаляем
if ($OldLogs) {
Write-Host "Найдены логи старше $DaysThreshold дней:`n" -ForegroundColor Yellow
$OldLogs | Select-Object FullName, LastWriteTime | Format-Table -AutoSize
# Удаляем найденные файлы
$OldLogs | Remove-Item -Force -Verbose
Write-Host "`nОчистка завершена." -ForegroundColor Green
} else {
Write-Host "Файлы старше $DaysThreshold дней не найдены." -ForegroundColor Green
}
Основные моменты:
1. Гибкая настройка пути: в переменной
$LogPath можно указать любую директорию – например, логи SQL Server (C:\Program Files\Microsoft SQL Server\MSSQLxx.MSSQLSERVER\MSSQL\Log) или системные временные папки (C:\Windows\Temp).2. Параметр возраста: переменная
$DaysThreshold задаёт, сколько дней «жить» файлам, прежде чем они удалятся. Можно настроить, например, на 7 дней для критических логов или на 90 дней для менее важных.3. Рекурсивный обход: флаг
-Recurse позволяет удалять не только файлы в корне, но и во вложенных папках (удобно, если логи разбиты по датам или подпапкам).4. Безопасность: перед удалением скрипт выводит список удаляемых файлов. Если сомневаетесь — закомментируйте строку
Remove-Item и сначала просто отследите, какие файлы будут выбраны.💬 Я запланировал выполнение этого скрипта через Task Scheduler каждую неделю в воскресенье в полночь. В результате освободилось несколько десятков гигабайт и администраторы перестали получать тревожные письма о заполненном разделе C:.
А как вы справляетесь с накоплением логов на серверах? Может, используете какие-то централизованные решения (SIEM, Splunk, ELK) для ретеншена и ротации? Делитесь своими приёмами в комментариях!
📲 Мы в MAX
👉 @win_sysadmin
👍8🔥4
👋 Привет, админы!
Вспоминаю случай, когда утром в понедельник один из наших веб-сервисов внезапно перестал отвечать - выяснилось, что сертификат SSL на фронт-енд прокси истёк. Это напомнило, как легко потерять доступ к важным системам из-за банального администрирования сертификатов.
🔥 Чтобы автоматизировать проверку сроков действия сертификатов в Windows, можно использовать PowerShell. Вот базовый скрипт, который ищет в хранилище LocalMachine\My сертификаты, у которых осталось менее 30 дней до истечения, и отправляет уведомление на почту:
Этот хук можно запускать ежедневно по расписанию через Task Scheduler или превратить в задачу Azure Automation / Runbook.
Также рекомендую добавить логирование в файл и интеграцию с вашим мониторингом (Zabbix, PRTG, SCOM), чтобы видеть историю предупреждений.
📲 Мы в MAX
👉 @win_sysadmin
Вспоминаю случай, когда утром в понедельник один из наших веб-сервисов внезапно перестал отвечать - выяснилось, что сертификат SSL на фронт-енд прокси истёк. Это напомнило, как легко потерять доступ к важным системам из-за банального администрирования сертификатов.
🔥 Чтобы автоматизировать проверку сроков действия сертификатов в Windows, можно использовать PowerShell. Вот базовый скрипт, который ищет в хранилище LocalMachine\My сертификаты, у которых осталось менее 30 дней до истечения, и отправляет уведомление на почту:
# Порог в днях до истечения
$threshold = 30
# Получаем все сертификаты, у которых осталось <= $threshold дней
$certs = Get-ChildItem Cert:\LocalMachine\My |
Where-Object { ($_.NotAfter - (Get-Date)).Days -le $threshold }
if ($certs) {
# Формируем тело письма
$body = $certs | ForEach-Object {
"Сертификат: $($_.Subject) ― истекает через $((($_.NotAfter) - (Get-Date)).Days) дней, дата истечения: $($_.NotAfter)"
} -join "`n"
# Отправляем письмо
Send-MailMessage `
-From "monitor@domain.local" `
-To "admin@domain.local" `
-Subject "Внимание: сертификаты SSL скоро истекут" `
-Body $body `
-SmtpServer "mail.domain.local"
}
Этот хук можно запускать ежедневно по расписанию через Task Scheduler или превратить в задачу Azure Automation / Runbook.
Также рекомендую добавить логирование в файл и интеграцию с вашим мониторингом (Zabbix, PRTG, SCOM), чтобы видеть историю предупреждений.
📲 Мы в MAX
👉 @win_sysadmin
👍4🔥2
👋 Привет, админы!
Как быстро проверить, какие пользователи имеют права администратора на сотне удалённых серверов?
Ручной подход, это бессмысленная трата времени и риска забыть какой-то хост, поэтому я собрал небольшой PowerShell-скрипт для автоматического аудита.
🛠 Что делает скрипт:
◾️Берёт список серверов из файла
◾️Через
◾️Обрабатывает ошибки (например, недоступный сервер)
◾️Экспортирует итоговый отчёт в CSV с датой в имени
Этот подход легко расширить — добавить уведомление по почте через
📲 Мы в MAX
👉 @win_sysadmin
Как быстро проверить, какие пользователи имеют права администратора на сотне удалённых серверов?
Ручной подход, это бессмысленная трата времени и риска забыть какой-то хост, поэтому я собрал небольшой PowerShell-скрипт для автоматического аудита.
# Список серверов в текстовом файле (по одному в строке)
$servers = Get-Content -Path "C:\scripts\servers.txt"
# Формируем результаты
$report = foreach ($server in $servers) {
Try {
Invoke-Command -ComputerName $server -ScriptBlock {
Get-LocalGroupMember -Group "Administrators" |
Select-Object @{Name='Server';Expression={$env:COMPUTERNAME}},
Name, ObjectClass
} -ErrorAction Stop
}
Catch {
[PSCustomObject]@{
Server = $server
Name = '<не удалось получить данные>'
ObjectClass = 'Error'
}
}
}
# Сохраняем в CSV и открываем
$csvPath = "C:\reports\AdminsAudit_$(Get-Date -Format yyyy-MM-dd).csv"
$report | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Invoke-Item $csvPath
🛠 Что делает скрипт:
◾️Берёт список серверов из файла
servers.txt◾️Через
Invoke-Command собирает членов локальной группы Administrators на каждом хосте◾️Обрабатывает ошибки (например, недоступный сервер)
◾️Экспортирует итоговый отчёт в CSV с датой в имени
Этот подход легко расширить — добавить уведомление по почте через
Send-MailMessage или интеграцию с Teams/Slack, а также запускать по расписанию в Task Scheduler или Azure Automation.📲 Мы в MAX
👉 @win_sysadmin
👍13❤1🔥1
👋 Привет, админы!
На прошлой неделе в нашем кластере файловых серверов неожиданно начал быстро расти объём используемого пространства на диске C:, и в итоге свободного места осталось менее 5 %. Из-за этого падали бэкапы и тормозили пользовательские шаринги.
🔥 Чтобы оперативно собрать информацию о свободном месте на всех серверах и получить наглядный отчёт, я использовал такой PowerShell-скрипт:
Этот скрипт помогает мгновенно увидеть, на каких серверах и дисках критически мало места. Я настроил его запуск раз в час через Task Scheduler и добавил оповещение по почте, если Used(%) превышает 90 %.
📲 Мы в MAX
👉 @win_sysadmin
На прошлой неделе в нашем кластере файловых серверов неожиданно начал быстро расти объём используемого пространства на диске C:, и в итоге свободного места осталось менее 5 %. Из-за этого падали бэкапы и тормозили пользовательские шаринги.
🔥 Чтобы оперативно собрать информацию о свободном месте на всех серверах и получить наглядный отчёт, я использовал такой PowerShell-скрипт:
# Список серверов можно вынести в текстовый файл или переменную
$servers = @('FS01','FS02','FS03')
# Сбор информации о дисках
$result = foreach ($s in $servers) {
Get-PSDrive -PSProvider FileSystem -ComputerName $s |
Select-Object @{Name='Server';Expression={$s}},
Name,
@{Name='Free(GB)';Expression={[math]::Round($_.Free/1GB,2)}},
@{Name='Used(%)';Expression={[math]::Round((($_.Used)/($_.Free + $_.Used))*100,1)}}
}
# Сохраняем в CSV для дальнейшего анализа
$result | Export-Csv -Path C:\Reports\DiskSpaceReport.csv -NoTypeInformation -Encoding UTF8
# Или выводим сразу в виде таблицы в консоли
$result | Format-Table -AutoSize
Этот скрипт помогает мгновенно увидеть, на каких серверах и дисках критически мало места. Я настроил его запуск раз в час через Task Scheduler и добавил оповещение по почте, если Used(%) превышает 90 %.
📲 Мы в MAX
👉 @win_sysadmin
👍10
👋 Привет, админы!
Сегодня расскажу про простой, но очень полезный трюк, который помогает выявить подозрительные подключения к вашему Windows-серверу — особенно актуально, если сервер доступен извне.
🔥 Проверить активные входящие подключения можно командой:
А чтобы узнать, какой процесс стоит за каждым подключением, дополним это:
📌 Этот способ помогает быстро выявить:
- необычные подключения к RDP или кастомным портам;
- неизвестные процессы, которые “висят” в сети;
- потенциальный бэкдор или троян.
🧠 Совет: поставьте это на регулярный мониторинг через таск или скрипт с логом в файл.
📲 Мы в MAX
👉 @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 или кастомным портам;
- неизвестные процессы, которые “висят” в сети;
- потенциальный бэкдор или троян.
🧠 Совет: поставьте это на регулярный мониторинг через таск или скрипт с логом в файл.
📲 Мы в MAX
👉 @win_sysadmin
👍9🔥2
👋 Привет, админы!
Из жизни. На продакшн-сервере упал веб-сервис, выяснилось, что SSL-сертификат истёк в 00:01, а пользователи начали получать ошибки подключения. Пришлось оперативно проверять все сертификаты.
Для быстрой диагностики я написал PowerShell-скрипт, который подключается к списку серверов, собирает все сертификаты и рассчитывает, сколько дней осталось до их истечения:
Этот скрипт выводит таблицу с оставшимися днями жизни (DaysLeft) каждого сертификата, упорядоченную по возрастанию. Те, у которых
📲 Мы в MAX
👉 @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 с ежедневным запуском.📲 Мы в MAX
👉 @win_sysadmin
👍7🔥2
👋 Привет, админы!
Иногда нужно быстро понять — кто и когда логинился на сервер или важную машину. Особенно если подозрения на взлом или кто-то заходит в неурочное время.
Вот простой PowerShell-скрипт, который вытащит логи входа в систему (
📌
📌 Можно заменить на
📌 Или убрать фильтр, чтобы увидеть всё.
Полезно для расследований, мониторинга активности админов, а ещё — если нужно зафиксировать "кто заходил ночью" 😅
📲 Мы в MAX
👉 @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, если нужен локальный интерактивный логон. 📌 Или убрать фильтр, чтобы увидеть всё.
Полезно для расследований, мониторинга активности админов, а ещё — если нужно зафиксировать "кто заходил ночью" 😅
📲 Мы в MAX
👉 @win_sysadmin
👍7🔥1