👋 Привет, админы!
Недавно столкнулся с проблемой — один из пользователей жаловался, что «всё долго открывается», особенно сетевые папки. На первый взгляд — обычная история, но решил покопать глубже.
📌 Оказалось, виноват механизм автоматического поиска сетевых принтеров и папок, который Windows выполняет при каждом открытии проводника. На слабых или загруженных машинах это может серьезно замедлить работу.
✅ Быстрое решение — отключить этот механизм через реестр или GPO. Вот способ через PowerShell:
🔧 Этот параметр отключает автоматическое сканирование сети на предмет расшаренных ресурсов. Пользователь сам откроет то, что нужно — без лишних тормозов. Проверено — сразу стал отзывчивее проводник и пропали лаги при открытии «Сеть».
💬 А вы отключаете сетевой кроллинг в проводнике? Или считаете, что пусть лучше всё видно, хоть и медленно? Делитесь мнением!
👉 @win_sysadmin
Недавно столкнулся с проблемой — один из пользователей жаловался, что «всё долго открывается», особенно сетевые папки. На первый взгляд — обычная история, но решил покопать глубже.
📌 Оказалось, виноват механизм автоматического поиска сетевых принтеров и папок, который Windows выполняет при каждом открытии проводника. На слабых или загруженных машинах это может серьезно замедлить работу.
✅ Быстрое решение — отключить этот механизм через реестр или GPO. Вот способ через PowerShell:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "NoNetCrawling" -Value 1
🔧 Этот параметр отключает автоматическое сканирование сети на предмет расшаренных ресурсов. Пользователь сам откроет то, что нужно — без лишних тормозов. Проверено — сразу стал отзывчивее проводник и пропали лаги при открытии «Сеть».
💬 А вы отключаете сетевой кроллинг в проводнике? Или считаете, что пусть лучше всё видно, хоть и медленно? Делитесь мнением!
👉 @win_sysadmin
👍17🔥2
👋 Привет, админы!
Сегодня расскажу, как выловить процесс, который жрёт диск, особенно когда пользователи жалуются на тормоза, а в диспетчере задач ничего подозрительного не видно.
🔥 В таких случаях здорово помогает
А если хочется ещё точнее — вот пример с использованием счётчиков производительности:
💡 Часто в топе — антивирус, SQL Server, или какой-нибудь рендератор типа
💬 А как вы определяете, кто нагружает диск? Есть любимые утилиты или скрипты? Делитесь опытом!
👉 @win_sysadmin
Сегодня расскажу, как выловить процесс, который жрёт диск, особенно когда пользователи жалуются на тормоза, а в диспетчере задач ничего подозрительного не видно.
🔥 В таких случаях здорово помогает
Get-Process в связке с Get-Counter и Sort-Object — можно быстро определить, кто именно долбит диск:
Get-Process | Sort-Object -Property IOWriteBytes -Descending | Select-Object -First 10 -Property Name, Id, IOWriteBytes
А если хочется ещё точнее — вот пример с использованием счётчиков производительности:
Get-Counter '\Process(*)\IO Write Bytes/sec' |
Select-Object -ExpandProperty Countersamples |
Sort-Object CookedValue -Descending |
Select-Object -First 10
💡 Часто в топе — антивирус, SQL Server, или какой-нибудь рендератор типа
ffmpeg.exe. Но однажды у меня неожиданно всплыл spoolsv.exe — оказалось, застрявшая очередь печати на сетевом принтере грузила систему!💬 А как вы определяете, кто нагружает диск? Есть любимые утилиты или скрипты? Делитесь опытом!
👉 @win_sysadmin
👍7🔥4
👋 Привет, админы!
Тут на хабре пишут👇
Обновление KB5058379 для Windows 10 22H2 заставляет ПК загружаться в Recovery и требовать ключ BitLocker
В середине мая Microsoft выпустила накопительное обновление безопасности KB5058379 для Windows 10 22H2 и 21H2, включая редакции LTSC/Enterprise, в рамках вторника патчей за май 2025 года. Пользователям и системным администраторам компаний с парком ПК Dell, HP или Lenovo на этих версиях ОС с новым обновлением пришлось столкнуться с перезагрузкой в Recovery и требованием ввести ключ BitLocker. Также у части пользователей начал возникать BSoD после развёртывания KB5058379.
В большинстве случаев проблема касается корпоративных клиентов, кто использует SCCM или WSUS.
Если ПК застрял на экране восстановления Windows или восстановления BitLocker («Введите ключ восстановления, чтобы снова начать») после KB5058379, нужно выполнить следующие действия:
перезагрузить ПК и зайти в BIOS/UEFI;
в настройках зайти на вкладку Security, открыть меню Virtualization или Advanced CPU Settings;
отключить опцию Intel TXT (другие название: Trusted Executio или OS Kernel DMA Support)
опцию VT for Direct I/O (или VT‑d) можно оставить включённой.
сохранить изменения и выйдите из BIOS.
Идея состоит в том, чтобы отключить Intel TXT и позволить KB5058379 завершить установку. Если правильно выполнить эти действия, то далее не будет ошибки с восстановлением BitLocker или BSOD. Примечательно, что в документе техподдержки Microsoft по‑прежнему указано, что компания не знает о каких‑либо новых проблемах с KB5058379.
https://support.microsoft.com/ru-ru/topic/13-%D0%BC%D0%B0%D1%8F-2025-%D0%B3-kb5058379-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8-%D0%BE%D1%81-19044-5854-%D0%B8-19045-5854-0a30e9ee-5038-45dd-a5d7-70a8813a5e39
https://www.windowslatest.com/2025/05/15/windows-10-kb5058379-locks-pcs-bitlocker-recovery-triggered-on-boot-bsods/
👉 @win_sysadmin
Тут на хабре пишут👇
Обновление KB5058379 для Windows 10 22H2 заставляет ПК загружаться в Recovery и требовать ключ BitLocker
В середине мая Microsoft выпустила накопительное обновление безопасности KB5058379 для Windows 10 22H2 и 21H2, включая редакции LTSC/Enterprise, в рамках вторника патчей за май 2025 года. Пользователям и системным администраторам компаний с парком ПК Dell, HP или Lenovo на этих версиях ОС с новым обновлением пришлось столкнуться с перезагрузкой в Recovery и требованием ввести ключ BitLocker. Также у части пользователей начал возникать BSoD после развёртывания KB5058379.
В большинстве случаев проблема касается корпоративных клиентов, кто использует SCCM или WSUS.
Если ПК застрял на экране восстановления Windows или восстановления BitLocker («Введите ключ восстановления, чтобы снова начать») после KB5058379, нужно выполнить следующие действия:
перезагрузить ПК и зайти в BIOS/UEFI;
в настройках зайти на вкладку Security, открыть меню Virtualization или Advanced CPU Settings;
отключить опцию Intel TXT (другие название: Trusted Executio или OS Kernel DMA Support)
опцию VT for Direct I/O (или VT‑d) можно оставить включённой.
сохранить изменения и выйдите из BIOS.
Идея состоит в том, чтобы отключить Intel TXT и позволить KB5058379 завершить установку. Если правильно выполнить эти действия, то далее не будет ошибки с восстановлением BitLocker или BSOD. Примечательно, что в документе техподдержки Microsoft по‑прежнему указано, что компания не знает о каких‑либо новых проблемах с KB5058379.
https://support.microsoft.com/ru-ru/topic/13-%D0%BC%D0%B0%D1%8F-2025-%D0%B3-kb5058379-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8-%D0%BE%D1%81-19044-5854-%D0%B8-19045-5854-0a30e9ee-5038-45dd-a5d7-70a8813a5e39
https://www.windowslatest.com/2025/05/15/windows-10-kb5058379-locks-pcs-bitlocker-recovery-triggered-on-boot-bsods/
👉 @win_sysadmin
👍10❤4
👋 Привет, админы!
Сегодняшний кейс — куда уходит свободное место на диске? Думаешь, что всё под контролем, а потом бац — и диск C: в красной зоне. Особенно часто такое встречал на серверах с включённым журналированием или забытым логированием.
📌 Вот скрипт, который помогает быстро найти топ папок и файлов, пожирающих пространство:
🔥 А если хочешь посмотреть топ папок, используй
(если не знаешь —
Очень выручает, когда нужно быстро понять, что разрослось — профили пользователей, временные файлы, лог-файлы от софта, который никто не трогал годами...
💬 А как ты мониторишь место на диске? Может, у тебя есть любимый скрипт или тулза, которая всегда под рукой?
👉 @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 можно взять отсюда)Очень выручает, когда нужно быстро понять, что разрослось — профили пользователей, временные файлы, лог-файлы от софта, который никто не трогал годами...
💬 А как ты мониторишь место на диске? Может, у тебя есть любимый скрипт или тулза, которая всегда под рукой?
👉 @win_sysadmin
👍11🤯1
👋 Привет, админы!
Знакома ситуация: вроде бы всё обновили, службы перезапустили, а сервер всё равно ведёт себя странно? Часто причина — необходим перезапуск, о котором система молчит.
💡 Чтобы не лазить вручную по реестру, вот скрипт, который проверит, требуется ли перезагрузка:
Этот скрипт можно легко интегрировать в свои проверки, в том числе в DSC, Zabbix-агенты, или просто в планировщик задач после установки апдейтов.
🛠 Кстати, начиная с Windows Server 2019 можно также использовать
💬 А ты как отслеживаешь pending reboot? Есть любимый способ или используешь сторонние тулзы?
👉 @win_sysadmin
Знакома ситуация: вроде бы всё обновили, службы перезапустили, а сервер всё равно ведёт себя странно? Часто причина — необходим перезапуск, о котором система молчит.
💡 Чтобы не лазить вручную по реестру, вот скрипт, который проверит, требуется ли перезагрузка:
function Test-PendingReboot {
$rebootPending = $false
$paths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired',
'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations'
)
foreach ($path in $paths) {
if (Test-Path $path) {
$rebootPending = $true
Write-Host "⏳ Pending reboot detected at: $path"
}
}
return $rebootPending
}
# Пример использования:
if (Test-PendingReboot) {
Write-Host "⚠️ Сервер требует перезагрузки!"
} else {
Write-Host "✅ Всё чисто — перезагрузка не требуется."
}
Этот скрипт можно легко интегрировать в свои проверки, в том числе в DSC, Zabbix-агенты, или просто в планировщик задач после установки апдейтов.
🛠 Кстати, начиная с Windows Server 2019 можно также использовать
Get-WindowsUpdateLog и UpdateCompliance для более глубокой аналитики.💬 А ты как отслеживаешь pending reboot? Есть любимый способ или используешь сторонние тулзы?
👉 @win_sysadmin
👍8
👋 Привет, админы!
Поймал недавно нестандартную проблему на одном из клиентских Windows 11. Пользователь жаловался: не работает печать, а в очереди — вечно зависшие задания. Перезапуск spooler'а не помогал.
Разбор показал — виноват битый драйвер, но перед этим пришлось как следует почистить очередь печати и файлы, чтобы дать системе "вдохнуть". Делюсь скриптом, который меня спас:
🔥 Полная зачистка очереди печати и временных файлов spooler:
Если директория не очищается — проверь права или вручную удали зависшие
💡 А чтобы в следующий раз не искать виновника вручную, добавил логирование проблем с драйверами через
Очень удобно — сразу видно, какой драйвер шалит.
💬 А ты как борешься с зависшей печатью? Может, есть свой скрипт или проверенный способ — делись в комментах!
👉 @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
Очень удобно — сразу видно, какой драйвер шалит.
💬 А ты как борешься с зависшей печатью? Может, есть свой скрипт или проверенный способ — делись в комментах!
👉 @win_sysadmin
👍10🔥3❤1
👋 Привет, админы!
Сегодня поймал подозрительную задачу в планировщике Windows — срабатывала каждый час и тянула PowerShell с base64-строкой.
Выглядело безобидно (
🔍 Если хочешь быстро проверить, нет ли на твоем сервере вредоносных или странных задач, вот скрипт, который я использую:
💡 Скрипт вытаскивает все задачи, где используется PowerShell, cmd или скриптовые интерпретаторы — часто именно через них атакующие запускают свой код.
Особенно стоит насторожиться, если аргументы содержат
📌 Кстати, найденная мной задача маскировалась под системную и запускалась от
💬 А ты проверяешь планировщик в своих аудитах? Может, есть свои лайфхаки для поиска шела?
👉 @win_sysadmin
Сегодня поймал подозрительную задачу в планировщике Windows — срабатывала каждый час и тянула PowerShell с base64-строкой.
Выглядело безобидно (
UpdateTask1), но явно не из дружелюбных...🔍 Если хочешь быстро проверить, нет ли на твоем сервере вредоносных или странных задач, вот скрипт, который я использую:
Get-ScheduledTask | ForEach-Object {
$task = $_
$actions = ($task.Actions | Where-Object { $_.Execute -match "powershell|cmd|wscript|cscript" })
if ($actions) {
[PSCustomObject]@{
TaskName = $task.TaskName
Path = $task.TaskPath
Action = $actions.Execute + " " + $actions.Arguments
UserId = $task.Principal.UserId
}
}
} | Format-Table -AutoSize
💡 Скрипт вытаскивает все задачи, где используется PowerShell, cmd или скриптовые интерпретаторы — часто именно через них атакующие запускают свой код.
Особенно стоит насторожиться, если аргументы содержат
-EncodedCommand, iex, или обращения к внешним ресурсам.📌 Кстати, найденная мной задача маскировалась под системную и запускалась от
SYSTEM — проверяй, кому доверена каждая задача.💬 А ты проверяешь планировщик в своих аудитах? Может, есть свои лайфхаки для поиска шела?
👉 @win_sysadmin
👍7❤1
👋 Привет, админы!
Недавно прилетел мне интересный кейс: пользователи массово жаловались на медленный вход в систему. Крутилось приветствие по 3-5 минут. Оказалось, виновата политика групповых дисков, которая грузилась слишком долго.
🔍 Решение оказалось простым — нужно быстро найти проблемные политики. Вот удобный скрипт на PowerShell для проверки времени обработки GPO при входе пользователя:
✅ Этот скрипт покажет 10 самых «тяжёлых» групповых политик по времени загрузки. В моём случае лидером стала политика с забытым сетевым диском на уже не существующий файловый сервер.
💬 А вы сталкивались с подобными проблемами? Как отслеживаете медленные политики? Поделитесь в комментах!
👉 @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 самых «тяжёлых» групповых политик по времени загрузки. В моём случае лидером стала политика с забытым сетевым диском на уже не существующий файловый сервер.
💬 А вы сталкивались с подобными проблемами? Как отслеживаете медленные политики? Поделитесь в комментах!
👉 @win_sysadmin
👍12❤2
👋 Привет, админы!
Недавно столкнулся с тем, что на одном из удалённых серверов кто-то активно шёл в атаку по RDP: в логах сыпались сотни неудачных входов, и пока мониторинг не среагировал — уже появились незнакомые пользователи. Чтобы оперативно блокировать «злых» IP, я написал небольшой PowerShell-скрипт:
Этот скрипт запускаю по таймеру через Task Scheduler каждые 5 минут — и он автоматически режет «лишние» адреса.
💬 А как вы защищаете RDP? Используете RD Gateway, VPN или более хитрые решения? Поделитесь практиками в комментариях!
👉 @win_sysadmin
Недавно столкнулся с тем, что на одном из удалённых серверов кто-то активно шёл в атаку по RDP: в логах сыпались сотни неудачных входов, и пока мониторинг не среагировал — уже появились незнакомые пользователи. Чтобы оперативно блокировать «злых» IP, я написал небольшой PowerShell-скрипт:
# Порог попыток за период (например, 5 за 10 минут)
$Threshold = 5
$Window = (Get-Date).AddMinutes(-10)
# Получаем все события неудачных входов по RDP (EventID 4625)
$BadLogons = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4625
StartTime = $Window
} |
Where-Object {
$_.Properties[18].Value -like '10.0.0.*' -and # ваш диапазон RDP, если нужен
$_.Properties[8].Value -eq '192.168.1.10' -eq $false # исключаем локальный
} |
Select-Object @{n='IP';e={$_.Properties[18].Value}}
# Группируем по IP и фильтруем по порогу
$BadLogons | Group-Object IP | Where-Object Count -gt $Threshold | ForEach-Object {
$ip = $_.Name
# Проверяем, нет ли уже правила
if (-not (Get-NetFirewallRule -DisplayName "Block-RDP-$ip" -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName "Block-RDP-$ip" `
-Direction Inbound `
-Action Block `
-RemoteAddress $ip `
-Protocol TCP `
-LocalPort 3389
Write-Host "Заблокирован IP $ip за $($_.Count) неудачных попыток"
}
}
Этот скрипт запускаю по таймеру через Task Scheduler каждые 5 минут — и он автоматически режет «лишние» адреса.
💬 А как вы защищаете RDP? Используете RD Gateway, VPN или более хитрые решения? Поделитесь практиками в комментариях!
👉 @win_sysadmin
👍6👎2
👋 Привет, админы!
Сегодня расскажу про один лайфхак, который реально спасает, когда пользователи массово жалуются на медленную авторизацию в домене. Был у меня недавно кейс: логон на Windows затягивался до минуты, хотя сеть, казалось бы, в порядке. Виноват оказался неправильный DNS на клиентах.
🔥 Чтобы быстро проверить и исправить DNS-сервера на всех машинах в OU, можно использовать PowerShell-скрипт. Вот пример простого решения:
Этот скрипт выведет текущие DNS-сервера на всех рабочих станциях из OU. Если видишь “левых” адресов — самое время навести порядок через GPO или массово прописать нужные значения.
💬 А у тебя были ситуации, когда вся проблема оказывалась в “не том” DNS? Как обычно автоматизируешь такие проверки? Делись своими скриптами и фишками!
👉 @win_sysadmin
Сегодня расскажу про один лайфхак, который реально спасает, когда пользователи массово жалуются на медленную авторизацию в домене. Был у меня недавно кейс: логон на Windows затягивался до минуты, хотя сеть, казалось бы, в порядке. Виноват оказался неправильный DNS на клиентах.
🔥 Чтобы быстро проверить и исправить DNS-сервера на всех машинах в OU, можно использовать PowerShell-скрипт. Вот пример простого решения:
Get-ADComputer -Filter * -SearchBase "OU=Workstations,DC=contoso,DC=local" | ForEach-Object {
Invoke-Command -ComputerName $_.Name -ScriptBlock {
Get-DnsClientServerAddress | Select-Object -ExpandProperty ServerAddresses
}
}
Этот скрипт выведет текущие DNS-сервера на всех рабочих станциях из OU. Если видишь “левых” адресов — самое время навести порядок через GPO или массово прописать нужные значения.
💬 А у тебя были ситуации, когда вся проблема оказывалась в “не том” DNS? Как обычно автоматизируешь такие проверки? Делись своими скриптами и фишками!
👉 @win_sysadmin
👍5❤1
👋 Привет, админы!
Недавно столкнулся с задачей — нужно было массово поменять пароли локальных администраторов на паре десятков серверов. Ручками это делать — тот ещё ад, да и не очень безопасно. Решил автоматизировать процесс через PowerShell.
🔥 Вот скрипт, который меня выручил:
⚡️ Важно: убедись, что у тебя есть права на все машины и открыт WinRM!
Итог — все админы с новыми паролями, никаких лишних телодвижений. Если хочется более гибко — можно расширить скрипт, добавить логирование или рандомизацию паролей.
💬 А у тебя были кейсы массовой смены паролей? Как автоматизируешь такие вещи? Делись опытом!
👉 @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!
Итог — все админы с новыми паролями, никаких лишних телодвижений. Если хочется более гибко — можно расширить скрипт, добавить логирование или рандомизацию паролей.
💬 А у тебя были кейсы массовой смены паролей? Как автоматизируешь такие вещи? Делись опытом!
👉 @win_sysadmin
👍12❤3
👋 Привет, админы!
Сегодня расскажу про полезный трюк для тех, кто автоматизирует установку софта через PowerShell. Недавно столкнулся с задачей: массово обновить VLC на нескольких десятках машин. Обычные MSI-пакеты — это круто, но что делать с .exe-инсталляторами, у которых свои ключи для тихой установки?
🔥 Вот лайфхак — используем PowerShell и Start-Process с нужными аргументами:
*
*
* Можно запускать это в цикле по списку машин через Invoke-Command или PsExec.
💡 А какой софт чаще всего автоматизируете на своём парке машин? Есть любимые утилиты или хитрые ключи для silent-установки? Поделитесь опытом — уверен, найдётся немало интересных решений!
👉 @win_sysadmin
Сегодня расскажу про полезный трюк для тех, кто автоматизирует установку софта через PowerShell. Недавно столкнулся с задачей: массово обновить VLC на нескольких десятках машин. Обычные MSI-пакеты — это круто, но что делать с .exe-инсталляторами, у которых свои ключи для тихой установки?
🔥 Вот лайфхак — используем PowerShell и Start-Process с нужными аргументами:
Start-Process -FilePath "vlc-setup.exe" -ArgumentList "/S" -Wait
*
/S — стандартный ключ для тихой установки (silent install).*
-Wait — PowerShell дождётся завершения установки.* Можно запускать это в цикле по списку машин через Invoke-Command или PsExec.
💡 А какой софт чаще всего автоматизируете на своём парке машин? Есть любимые утилиты или хитрые ключи для silent-установки? Поделитесь опытом — уверен, найдётся немало интересных решений!
👉 @win_sysadmin
👍4🔥3❤🔥1❤1
👋 Привет, админы!
Недавно столкнулся с ситуацией: на одном из серверов системный диск практически «забился» под завязку, а штатные чистилки мусора не помогали — свободного места оставалось критически мало. Оказалось, что куча старых файлов обновлений, временных логов и упаковок пакетов Windows Update съели не меньше 20 ГБ!
🔥 Чтобы оперативно и централизованно освободить место на C:, я использовал PowerShell-скрипт для сброса компонентов Windows Update и удаления временных файлов.
🔍 Что делает скрипт:
1. Останавливает службы wuauserv, bits и cryptsvc, чтобы освободить доступ к файлам обновлений.
2. Переименовывает папки
3. Перезапускает службы, чтобы система могла продолжить получать обновления.
4. Удаляет старые временные файлы из
5. (Опционально) Очищает папку
6. Запускает командлет
💡 Лайфхак:
* Если вы работаете со множеством серверов, оберните этот скрипт в экспорт модуля или сохраните в виде
* Можно добавить проверку свободного места перед выполнением очистки, чтобы скрипт запускался, только когда доступно меньше, скажем, 10 ГБ:
* Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.
💬 А как вы решаете проблему нехватки места на C:? Используете ли свои скрипты или предпочитаете готовые инструменты вроде CCleaner, TreeSize, WinDirStat, а может, связку PowerShell + SCCM/MDT? Делитесь в комментах своими рецептами!
👉 @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 "Достаточно места — пропускаю действия."
}
* Не забывайте тестировать на тестовых окружениях перед тем, как развертывать на продакшне.
💬 А как вы решаете проблему нехватки места на C:? Используете ли свои скрипты или предпочитаете готовые инструменты вроде CCleaner, TreeSize, WinDirStat, а может, связку PowerShell + SCCM/MDT? Делитесь в комментах своими рецептами!
👉 @win_sysadmin
👍9❤7🔥5
👋 Привет, админы!
Недавно столкнулся с кейсом: один из файловых серверов неожиданно перестал принимать события — логи просто «забились» до предела, из-за чего служба безопасности не могла записывать критичные события входа. Оказалось, что журналы событий выросли до 10 ГБ и система больше не записывала новые записи.
🔥 Чтобы предотвратить подобные ситуации, я собрал небольшой скрипт для автоматического архивации и очистки журналов событий, когда их размер превышает заданный порог. Вот пример, который запустил на сервере:
Этот скрипт проверяет размер каждого указанного журнала, экспортирует его в папку архива, если размер больше 1 ГБ, и очищает файл. Я поставил его в Task Scheduler с частотой 1 раз в сутки, чтобы не «догонять» проблему вручную.
💬 А какие у вас есть практики по управлению журналами событий? Используете стандартные утилиты wevtutil/Get-WinEvent или доверяете решениям наподобие SCOM/Elastic Stack? Делитесь в комментах!
👉 @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 раз в сутки, чтобы не «догонять» проблему вручную.
💬 А какие у вас есть практики по управлению журналами событий? Используете стандартные утилиты wevtutil/Get-WinEvent или доверяете решениям наподобие SCOM/Elastic Stack? Делитесь в комментах!
👉 @win_sysadmin
👍10
👋 Привет, админы!
Если не ошибаюсь, осенью 21 года в одном из наших дата-центров после планового обновления клиентских машин начали массово падать сеансы RDP — пользователи жаловались, что после ввода пароля сессия сразу же разрывается. Оказалось, во время апдейта поставился неполностью совместимый патч безопасности, который конфликтовал с включённым на компьютерах аудиторией учетных политик.
🔥 Чтобы быстро отследить все последние установленные обновления на целевой группе машин и при необходимости откатить проблемный патч, я использовал вот такой PowerShell-скрипт:
С помощью этого отчёта мы быстро определили, что именно на всех проблемных ПК установился KB5005565. Чтобы откатить его удалённо, использовал команду:
После перезапуска машин RDP-сессии вернулись в норму. Плюс я добавил правило на WSUS, чтобы этот конкретный патч не раздавался снова до выяснения причины конфликта.
💬 А у вас были подобные случаи, когда обновление “ломало” корпоративные политики или приложения? Какими методами вы собираете информацию об установленных патчах и откатываете проблемные? Делитесь своим опытом в комментах!
👉 @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, чтобы этот конкретный патч не раздавался снова до выяснения причины конфликта.
💬 А у вас были подобные случаи, когда обновление “ломало” корпоративные политики или приложения? Какими методами вы собираете информацию об установленных патчах и откатываете проблемные? Делитесь своим опытом в комментах!
👉 @win_sysadmin
👍12
👋 Привет, админы!
Недавно столкнулся с интересным кейсом: один из файловых серверов начал сигнализировать о недостатке свободного пространства. При проверке выяснилось, что причиной стали старые логи IIS и системные файлы, которые копились неделями. Для нас, админов, важно держать «мусор» под контролем, чтобы не проснуться однажды с дискoм, полностью забитым «ненужными» данными.
🔥 В таких случаях мне помогает небольшой PowerShell-скрипт для автоматической очистки логов старше заданного числа дней. Вот что я настроил:
Основные моменты:
1. Гибкая настройка пути: в переменной
2. Параметр возраста: переменная
3. Рекурсивный обход: флаг
4. Безопасность: перед удалением скрипт выводит список удаляемых файлов. Если сомневаетесь — закомментируйте строку
💬 Я запланировал выполнение этого скрипта через Task Scheduler каждую неделю в воскресенье в полночь. В результате освободилось несколько десятков гигабайт и администраторы перестали получать тревожные письма о заполненном разделе C:.
А как вы справляетесь с накоплением логов на серверах? Может, используете какие-то централизованные решения (SIEM, Splunk, ELK) для ретеншена и ротации? Делитесь своими приёмами в комментариях!
👉 @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) для ретеншена и ротации? Делитесь своими приёмами в комментариях!
👉 @win_sysadmin
🔥8👍6❤1
👋 Привет, админы!
Вспоминаю случай, когда утром в понедельник один из наших веб-сервисов внезапно перестал отвечать — выяснилось, что сертификат SSL на фронт-енд прокси истёк. Это напомнило, как легко потерять доступ к важным системам из-за банального администрирования сертификатов.
🔥 Чтобы автоматизировать проверку сроков действия сертификатов в Windows, можно использовать PowerShell. Вот базовый скрипт, который ищет в хранилище LocalMachine\My сертификаты, у которых осталось менее 30 дней до истечения, и отправляет уведомление на почту:
Этот хук можно запускать ежедневно по расписанию через Task Scheduler или превратить в задачу Azure Automation / Runbook.
Также рекомендую добавить логирование в файл и интеграцию с вашим мониторингом (Zabbix, PRTG, SCOM), чтобы видеть историю предупреждений.
💬 А вы как контролируете сроки действия сертификатов? Может, используете специальные модули (PSPKI, Posh-ACME) или облачные сервисы? Делитесь идеями и скриптами в комментариях!
👉 @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 "[email protected]" `
-To "[email protected]" `
-Subject "Внимание: сертификаты SSL скоро истекут" `
-Body $body `
-SmtpServer "mail.domain.local"
}
Этот хук можно запускать ежедневно по расписанию через Task Scheduler или превратить в задачу Azure Automation / Runbook.
Также рекомендую добавить логирование в файл и интеграцию с вашим мониторингом (Zabbix, PRTG, SCOM), чтобы видеть историю предупреждений.
💬 А вы как контролируете сроки действия сертификатов? Может, используете специальные модули (PSPKI, Posh-ACME) или облачные сервисы? Делитесь идеями и скриптами в комментариях!
👉 @win_sysadmin
👍16
👋 Привет, админы!
Недавно столкнулся с задачей: нужно было быстро проверить, какие пользователи имеют права администратора на сотне удалённых серверов. Ручной подход — это бессмысленная трата времени и риска забыть какой-то хост, поэтому я собрал небольшой PowerShell-скрипт для автоматического аудита.
🛠 Что делает скрипт:
◾️Берёт список серверов из файла
◾️Через
◾️Обрабатывает ошибки (например, недоступный сервер)
◾️Экспортирует итоговый отчёт в CSV с датой в имени
Этот подход легко расширить — добавить уведомление по почте через
💬 А как вы проводите аудит локальных администраторов? Есть ли у вас готовые решения или сторонние инструменты? Поделитесь в комментариях!
👉 @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.💬 А как вы проводите аудит локальных администраторов? Есть ли у вас готовые решения или сторонние инструменты? Поделитесь в комментариях!
👉 @win_sysadmin
👍8
👋 Привет, админы!
На этой неделе у меня случился любопытный кейс: в нашем кластере файловых серверов неожиданно начал быстро расти объём используемого пространства на диске C:, и в итоге свободного места осталось менее 5 %. Из-за этого падали бэкапы и тормозили пользовательские шаринги.
🔥 Чтобы оперативно собрать информацию о свободном месте на всех серверах и получить наглядный отчёт, я использовал такой PowerShell-скрипт:
Этот скрипт помогает мгновенно увидеть, на каких серверах и дисках критически мало места. Я настроил его запуск раз в час через Task Scheduler и добавил оповещение по почте, если Used(%) превышает 90 %.
💬 А как вы мониторите заполнение дисков? Держите подобные задачи в Zabbix/PRTG, или предпочитаете чистый PowerShell + планировщик? Делитесь своими лайфхаками!
👉 @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 %.
💬 А как вы мониторите заполнение дисков? Держите подобные задачи в Zabbix/PRTG, или предпочитаете чистый PowerShell + планировщик? Делитесь своими лайфхаками!
👉 @win_sysadmin
👍8🔥3
👋 Привет, админы!
Из жизни. На продакшн-сервере внезапно упал веб-сервис — выяснилось, что 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