👋 Привет, админы!
🔥 Делюсь скриптом, который создаёт и настраивает GPO, а потом линкует её к OU. Всё через PowerShell:
Под капотом это обычная настройка через
👉 @win_sysadmin
🔥 Делюсь скриптом, который создаёт и настраивает GPO, а потом линкует её к OU. Всё через PowerShell:
# Имя новой политики и OU
$gpoName = "WinRM Config"
$ou = "OU=Servers,DC=domain,DC=local"
# Создаём политику, если её ещё нет
if (-not (Get-GPO -Name $gpoName -ErrorAction SilentlyContinue)) {
New-GPO -Name $gpoName
}
# Настраиваем WinRM в этой политике
$gpo = Get-GPO -Name $gpoName
Set-GPRegistryValue -Name $gpo.DisplayName -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows\WinRM\Service" `
-ValueName "AllowAutoConfig" -Type DWord -Value 1
Set-GPRegistryValue -Name $gpo.DisplayName -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows\WinRM\Service" `
-ValueName "AllowUnencryptedTraffic" -Type DWord -Value 0
# Линкуем GPO к нужному OU
New-GPLink -Name $gpoName -Target $ou -Enforced $false
Под капотом это обычная настройка через
Set-GPRegistryValue, но ты можешь добавлять туда любые параметры: фаервол, автологон, аудит и т.д.👉 @win_sysadmin
👍7❤6🔥3
👋 Привет, админы!
Продолжая тему SPN, сегодня расскажу, как отслеживать изменения SPN в AD. Был у меня кейс: один коллега удалил SPN у критического сервера (по ошибке, конечно 😅), и всё, WinRM лег, приложения не коннектятся. Алертов не было. Делать так - нельзя.
🔥 Вот скрипт, который можно повесить на задачу по расписанию. Он проверяет наличие SPN
Можно доработать писать в лог, интегрировать с SIEM, триггерить webhook в Zabbix и т.д. Главное, не терять SPN из виду. Один сбой может стоить кучи нервов.
👉 @win_sysadmin
Продолжая тему SPN, сегодня расскажу, как отслеживать изменения SPN в AD. Был у меня кейс: один коллега удалил SPN у критического сервера (по ошибке, конечно 😅), и всё, WinRM лег, приложения не коннектятся. Алертов не было. Делать так - нельзя.
🔥 Вот скрипт, который можно повесить на задачу по расписанию. Он проверяет наличие SPN
WSMAN/имя_компьютера и шлёт алерт, если он исчез:
$computers = Get-ADComputer -Filter * -Properties ServicePrincipalName
$missingSpn = @()
foreach ($comp in $computers) {
$expectedSpn = "WSMAN/$($comp.Name)"
if (-not ($comp.ServicePrincipalName -contains $expectedSpn)) {
$missingSpn += $comp.Name
}
}
if ($missingSpn.Count -gt 0) {
$body = "На следующих машинах отсутствует SPN WSMAN:`n" + ($missingSpn -join "`n")
Send-MailMessage -To "admin@domain.local" -From "spn-monitor@domain.local" `
-Subject "❗ Отсутствует SPN WSMAN" -Body $body -SmtpServer "smtp.domain.local"
}
Можно доработать писать в лог, интегрировать с SIEM, триггерить webhook в Zabbix и т.д. Главное, не терять SPN из виду. Один сбой может стоить кучи нервов.
👉 @win_sysadmin
👍8
👋 Привет, админы!
Помнишь, мы говорили про мониторинг SPN? Так вот — одно дело заметить пропажу, а другое — сразу восстановить, пока не прилетели тикеты от пользователей и не начался хаос.
🔥 Вот PowerShell-скрипт, который проверяет наличие SPN
📌 Советую запускать это от имени учётки с правами на изменение SPN в AD. Можно повесить на планировщик или встроить в CI/CD пайплайн, если сервера поднимаются автоматически.
💡 Плюс: можно логировать в файл или отправлять уведомление при каждом восстановлении — для прозрачности.
💬 А у тебя бывали случаи, когда SPN пропадал и ломал всё? Как автоматизируешь восстановление? Делись кейсами в комментах 👇
👉 @win_sysadmin
Помнишь, мы говорили про мониторинг SPN? Так вот — одно дело заметить пропажу, а другое — сразу восстановить, пока не прилетели тикеты от пользователей и не начался хаос.
🔥 Вот PowerShell-скрипт, который проверяет наличие SPN
WSMAN/имя_компьютера и добавляет его обратно, если нужно:
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter * -Properties ServicePrincipalName
foreach ($comp in $computers) {
$spn = "WSMAN/$($comp.Name)"
if (-not ($comp.ServicePrincipalName -contains $spn)) {
try {
Write-Host "Восстанавливаю SPN для $($comp.Name)..." -ForegroundColor Yellow
setspn -S $spn $comp.Name
}
catch {
Write-Host "❌ Ошибка для $($comp.Name): $_" -ForegroundColor Red
}
}
}
📌 Советую запускать это от имени учётки с правами на изменение SPN в AD. Можно повесить на планировщик или встроить в CI/CD пайплайн, если сервера поднимаются автоматически.
💡 Плюс: можно логировать в файл или отправлять уведомление при каждом восстановлении — для прозрачности.
💬 А у тебя бывали случаи, когда SPN пропадал и ломал всё? Как автоматизируешь восстановление? Делись кейсами в комментах 👇
👉 @win_sysadmin
👍2👎2
👋 Привет, админы!
Неприятая ситуацию - на проде перестали запускаться скрипты PowerShell через Task Scheduler. Причём руками всё работает, а в планировщике - ноль реакции. Думаю, многим знакома такая картина.
🔍 В чём была проблема:
Оказалось, после обновления безопасности Windows один из серверов начал блокировать запуск скриптов из-за политики исполнения (
🛠️ Решение простое, всегда явно указывай политику исполнения при запуске из планировщика:
И не забудь, что путь к скрипту должен быть абсолютным, иначе Task Scheduler не найдёт файл, особенно если он запускается от
📌 если нужно логирование, добавь вывод в файл:
👉 @win_sysadmin
Неприятая ситуацию - на проде перестали запускаться скрипты PowerShell через Task Scheduler. Причём руками всё работает, а в планировщике - ноль реакции. Думаю, многим знакома такая картина.
🔍 В чём была проблема:
Оказалось, после обновления безопасности Windows один из серверов начал блокировать запуск скриптов из-за политики исполнения (
ExecutionPolicy). А в задаче стояло просто powershell.exe -File ..., без указания параметров.🛠️ Решение простое, всегда явно указывай политику исполнения при запуске из планировщика:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
И не забудь, что путь к скрипту должен быть абсолютным, иначе Task Scheduler не найдёт файл, особенно если он запускается от
SYSTEM или другого сервиса без профиля.📌 если нужно логирование, добавь вывод в файл:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1" >> C:\Logs\backup.log 2>&1
👉 @win_sysadmin
👍11😁4
👋 Привет, админы!
Недавно один из серверов начал ругаться на нехватку места на диске. Визуально всё в порядке, но свободного осталось меньше 1 ГБ. Надо было срочно найти, кто пожрал диск. Делюсь простым, но мощным PowerShell-способом найти самые тяжёлые файлы:
📦 Поиск топ-10 самых больших файлов на диске:
Что делает скрипт:
* Рекурсивно обходит все файлы (
* Отбрасывает каталоги (
* Сортирует по размеру
* Показывает путь и размер в МБ
📍 Хочешь ограничить область поиска? Просто меняй
⚡ Очень выручает, когда надо быстро понять, где «накапало» мусора, особенно в
А у тебя есть свой любимый способ находить крупные файлы в Windows? Используешь PowerShell, WinDirStat или что-то кастомное?
👉 @win_sysadmin
Недавно один из серверов начал ругаться на нехватку места на диске. Визуально всё в порядке, но свободного осталось меньше 1 ГБ. Надо было срочно найти, кто пожрал диск. Делюсь простым, но мощным PowerShell-способом найти самые тяжёлые файлы:
📦 Поиск топ-10 самых больших файлов на диске:
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue |
Where-Object { -not $_.PSIsContainer } |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="SizeMB";Expression={"{0:N2}" -f ($_.Length / 1MB)}} -First 10
Что делает скрипт:
* Рекурсивно обходит все файлы (
-Recurse)* Отбрасывает каталоги (
Where-Object { -not $_.PSIsContainer })* Сортирует по размеру
* Показывает путь и размер в МБ
📍 Хочешь ограничить область поиска? Просто меняй
-Path, например:
-Path "C:\Users", "D:\Temp"
⚡ Очень выручает, когда надо быстро понять, где «накапало» мусора, особенно в
TEMP, профилях пользователей или логах каких-нибудь нестабильных приложений.А у тебя есть свой любимый способ находить крупные файлы в Windows? Используешь PowerShell, WinDirStat или что-то кастомное?
👉 @win_sysadmin
🔥11👍7❤2
👋 Привет, админы!
Попался мне на днях любопытный случай: один из пользователей жаловался, что после входа в систему медленно прогружается рабочий стол, хотя железо бодрое и диск в порядке.
🔍 Начал копать — и довольно быстро нашёл виновника: в автозагрузке сидела куча мусора, но особенно отличился один Group Policy скрипт, который пытался смонтировать сетевой ресурс, которого уже не существует.
📌 Чтобы быстро проверить, какие групповые политики срабатывают при входе, и сколько времени они занимают, запустил на клиенте:
🕵️ ID 4016 — начало применения политики,
🕵️ ID 5312 — завершение.
Так можно выловить тормоза и даже понять, какой GPO затягивает загрузку. В моем случае один скрипт отрабатывал почти 90 секунд — удалил его, и всё полетело.
💬 А вы анализируете Group Policy лог? Или предпочитаете сторонние утилиты типа PolicyReporter, AGPM и т.п.? Делитесь своим опытом!
👉 @win_sysadmin
Попался мне на днях любопытный случай: один из пользователей жаловался, что после входа в систему медленно прогружается рабочий стол, хотя железо бодрое и диск в порядке.
🔍 Начал копать — и довольно быстро нашёл виновника: в автозагрузке сидела куча мусора, но особенно отличился один Group Policy скрипт, который пытался смонтировать сетевой ресурс, которого уже не существует.
📌 Чтобы быстро проверить, какие групповые политики срабатывают при входе, и сколько времени они занимают, запустил на клиенте:
Get-WinEvent -LogName Microsoft-Windows-GroupPolicy/Operational |
Where-Object { $_.Id -eq 4016 -or $_.Id -eq 5312 } |
Select-Object TimeCreated, Id, Message | Sort-Object TimeCreated -Descending
🕵️ ID 4016 — начало применения политики,
🕵️ ID 5312 — завершение.
Так можно выловить тормоза и даже понять, какой GPO затягивает загрузку. В моем случае один скрипт отрабатывал почти 90 секунд — удалил его, и всё полетело.
💬 А вы анализируете Group Policy лог? Или предпочитаете сторонние утилиты типа PolicyReporter, AGPM и т.п.? Делитесь своим опытом!
👉 @win_sysadmin
👍20⚡1
👋 Привет, админы!
Сегодня расскажу про один неприятный и коварный момент, с которым столкнулся буквально на днях - невозможность запустить скрипт PowerShell из планировщика задач, хотя руками он работает идеально.
🧩 Суть:
Есть скрипт
🔍 Что помогло выяснить причину:
1. В Action указывал не сам скрипт, а запуск
2. Обязательно указал "Start in" (рабочую папку), иначе относительные пути внутри скрипта не работали.
3. Заменил
4. В General поставил галочку "Run with highest privileges" - без этого не было доступа к сетевым путям и не выполнялись некоторые команды.
💡В итоге: Task Scheduler штука капризная, особенно с PowerShell. Поэтому всегда логируйте выход скрипта в файл, добавляйте
📌 Полный пример команды в задаче:
💬 А у вас бывали такие странности с планировщиком задач? Как отлаживаете такие случаи?
👉 @win_sysadmin
Сегодня расскажу про один неприятный и коварный момент, с которым столкнулся буквально на днях - невозможность запустить скрипт PowerShell из планировщика задач, хотя руками он работает идеально.
🧩 Суть:
Есть скрипт
.ps1, который делает бэкап и отправляет отчёт по почте. Запускаешь вручную — всё отлично. Но через Task Scheduler - тишина, никакой ошибки, ничего не происходит.🔍 Что помогло выяснить причину:
1. В Action указывал не сам скрипт, а запуск
powershell.exe с аргументами:
-ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
2. Обязательно указал "Start in" (рабочую папку), иначе относительные пути внутри скрипта не работали.
3. Заменил
powershell.exe на powershell.exe -NoProfile, чтобы избежать подвисаний из-за пользовательского профиля.4. В General поставил галочку "Run with highest privileges" - без этого не было доступа к сетевым путям и не выполнялись некоторые команды.
💡В итоге: Task Scheduler штука капризная, особенно с PowerShell. Поэтому всегда логируйте выход скрипта в файл, добавляйте
Start-Transcript и Stop-Transcript, и не забывайте про -NoProfile.📌 Полный пример команды в задаче:
Program/script: powershell.exe
Add arguments: -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
Start in: C:\Scripts
💬 А у вас бывали такие странности с планировщиком задач? Как отлаживаете такие случаи?
👉 @win_sysadmin
👍12❤2🔥1
👋 Привет, админы!
Если в домене внезапно начинают сыпаться жалобы вроде «не могу зайти, пароль верный» - один из первых шагов в расследовании: поиск заблокированных аккаунтов.
🔥 Вот простой PowerShell one-liner, который покажет всех заблокированных пользователей в Active Directory:
Эта команда выведет список пользователей, у которых стоит флаг
📌 А если хочешь сразу разблокировать всех (например, в тестовой среде):
⚠️ Но аккуратнее с этим, лучше сначала выяснить почему аккаунты блокируются. Часто причина это забытые пароли в автозапусках, мобильные устройства или сохранённые учётки на старых ПК.
💬 А как вы отслеживаете такие инциденты? Есть любимый способ логирования или используете сторонние решения типа ADAudit Plus?
👉 @win_sysadmin
Если в домене внезапно начинают сыпаться жалобы вроде «не могу зайти, пароль верный» - один из первых шагов в расследовании: поиск заблокированных аккаунтов.
🔥 Вот простой PowerShell one-liner, который покажет всех заблокированных пользователей в Active Directory:
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut, LastLogonDate
Эта команда выведет список пользователей, у которых стоит флаг
LockedOut. Особенно удобно, если нужно быстро понять масштаб проблемы или найти конкретного "жертву GPO".📌 А если хочешь сразу разблокировать всех (например, в тестовой среде):
Search-ADAccount -LockedOut | Unlock-ADAccount
⚠️ Но аккуратнее с этим, лучше сначала выяснить почему аккаунты блокируются. Часто причина это забытые пароли в автозапусках, мобильные устройства или сохранённые учётки на старых ПК.
💬 А как вы отслеживаете такие инциденты? Есть любимый способ логирования или используете сторонние решения типа ADAudit Plus?
👉 @win_sysadmin
👍9❤3
👋 Привет, админы!
Давеча пришлось накатить пачку обновлений на десяток серверов. Раньше делал это руками — заходишь, запускаешь
🔥 Теперь использую вот такой PowerShell-скрипт, который делает всё сам:
Для этого нужен модуль
💡 Скрипт:
- скачивает и устанавливает обновления,
- автоматически перезагружает сервер (если нужно),
- работает параллельно по всем указанным хостам.
Теперь обновления ставлю за кофе-паузу, а не за полдня 🙂
💬 А вы как обновляете свои сервера? WSUS, Intune, руками? Поделитесь лайфхаками в комментах!
👉 @win_sysadmin
Давеча пришлось накатить пачку обновлений на десяток серверов. Раньше делал это руками — заходишь, запускаешь
sconfig, подтверждаешь... Короче, муторно.🔥 Теперь использую вот такой PowerShell-скрипт, который делает всё сам:
Invoke-Command -ComputerName (Get-Content "servers.txt") -ScriptBlock {
Install-WindowsUpdate -AcceptAll -AutoReboot
} -Credential (Get-Credential)
Для этого нужен модуль
PSWindowsUpdate (ставится через Install-Module PSWindowsUpdate). А список серверов просто сохраняю в servers.txt.💡 Скрипт:
- скачивает и устанавливает обновления,
- автоматически перезагружает сервер (если нужно),
- работает параллельно по всем указанным хостам.
Теперь обновления ставлю за кофе-паузу, а не за полдня 🙂
💬 А вы как обновляете свои сервера? WSUS, Intune, руками? Поделитесь лайфхаками в комментах!
👉 @win_sysadmin
👍14
👋 Привет, админы!
На днях ловил интересную проблему с GPO. Пользователь жалуется: после перезагрузки пропадают закреплённые приложения на панели задач. Сначала подумал — баг профиля. Но нет, причина оказалась куда изощрённее: групповая политика переустанавливает taskbar layout при каждом входе.
🔍 Если используете XML-модификацию панели задач (через
📌 Решение:
1. Если цель — задать стартовую конфигурацию и разрешить пользователям её менять, используйте параметр:
Установите в Enabled.
2. Или вместо постоянного применения layout — разворачивайте XML один раз с помощью скрипта при создании профиля.
💡 Ещё вариант — вообще отказаться от XML и использовать PowerShell-скрипты для закрепления приложений. Например:
🧩 Такие нюансы часто всплывают, когда пытаешься автоматизировать «по красоте», а GPO делает всё по-своему.
💬 А вы как настраиваете панель задач в корпоративной среде? Через XML, скрипты или руками?
👉 @win_sysadmin
На днях ловил интересную проблему с GPO. Пользователь жалуется: после перезагрузки пропадают закреплённые приложения на панели задач. Сначала подумал — баг профиля. Но нет, причина оказалась куда изощрённее: групповая политика переустанавливает taskbar layout при каждом входе.
🔍 Если используете XML-модификацию панели задач (через
LayoutModification.xml), и она привязана в GPO, то при каждом входе пользователя этот layout применяется заново. В итоге все ручные закрепления — сносятся.📌 Решение:
1. Если цель — задать стартовую конфигурацию и разрешить пользователям её менять, используйте параметр:
User Configuration → Administrative Templates → Start Menu and Taskbar → Do not use the taskbar layout configured in XML
Установите в Enabled.
2. Или вместо постоянного применения layout — разворачивайте XML один раз с помощью скрипта при создании профиля.
💡 Ещё вариант — вообще отказаться от XML и использовать PowerShell-скрипты для закрепления приложений. Например:
$apps = @(
"Microsoft.Edge",
"Microsoft.Windows.Explorer"
)
foreach ($app in $apps) {
$AUMID = (Get-StartApps | Where-Object { $_.Name -eq $app }).AppID
if ($AUMID) {
(New-Object -ComObject Shell.Application).NameSpace('shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}').ParseName($AUMID).InvokeVerb('pin to taskbar')
}
}
🧩 Такие нюансы часто всплывают, когда пытаешься автоматизировать «по красоте», а GPO делает всё по-своему.
💬 А вы как настраиваете панель задач в корпоративной среде? Через XML, скрипты или руками?
👉 @win_sysadmin
👍11🔥1
👋 Привет, админы!
Недавно настроил автоматическое создание пользователей в AD для нового отдела, устал уже каждый раз руками забивать логины, назначать группы и почту. Решил поделиться скриптом, может, кому пригодится.
🔥 Вот простой PowerShell для создания пользователей по CSV:
CSV-шка выглядит так:
🛡 Конечно, пароль временный, дальше юзер меняет при первом входе. Плюс можно докрутить добавление в разные группы, создание home-директории и т.д.
💬 А как вы автоматизируете ввод новых пользователей? Делаете через PowerShell, сторонние тулзы или вручную? Поделитесь своим способом!
👉 @win_sysadmin
Недавно настроил автоматическое создание пользователей в AD для нового отдела, устал уже каждый раз руками забивать логины, назначать группы и почту. Решил поделиться скриптом, может, кому пригодится.
🔥 Вот простой PowerShell для создания пользователей по CSV:
Import-Csv "C:\Scripts\users.csv" | ForEach-Object {
$name = "$($_.FirstName) $($_.LastName)"
$sam = $_.SamAccountName
$ou = "OU=Users,DC=contoso,DC=local"
New-ADUser -Name $name `
-GivenName $_.FirstName `
-Surname $_.LastName `
-SamAccountName $sam `
-UserPrincipalName "$sam@contoso.local" `
-Path $ou `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd123" -AsPlainText -Force) `
-Enabled $true
Add-ADGroupMember -Identity "Domain Users" -Members $sam
}
CSV-шка выглядит так:
FirstName,LastName,SamAccountName
Ivan,Ivanov,i.ivanov
Petr,Petrov,p.petrov
🛡 Конечно, пароль временный, дальше юзер меняет при первом входе. Плюс можно докрутить добавление в разные группы, создание home-директории и т.д.
💬 А как вы автоматизируете ввод новых пользователей? Делаете через PowerShell, сторонние тулзы или вручную? Поделитесь своим способом!
👉 @win_sysadmin
👍17
👋 Привет, админы!
Сегодня словил интересную ситуацию с Windows Server, которая сначала выглядела как "магия", но в итоге — типичная особенность групповых политик.
🔥 Суть кейса: на нескольких новых машинах автоматически отключался экран через 1 минуту простоя, несмотря на выставленные GPO "никогда не выключать дисплей".
🤨 Что оказалось? Групповая политика исправно настраивала Computer Configuration > Policies > Administrative Templates > System > Power Management, но не трогала "Console lock display off timeout".
Эта настройка по умолчанию скрыта и не отображается в GUI! Но её можно включить в реестр или через GPO, а потом управлять через PowerShell:
А вот как вывести текущие значения:
💡 Если экран тухнет через минуту после блокировки — проверьте именно Console lock display off timeout. Это не то же самое, что просто "turn off display".
✅ Решение: через GPO включил видимость параметра и задал нужное значение. Проблема ушла.
💬 А у вас бывали случаи, когда политика "применена", но система ведет себя по-своему? Какие грабли были с powercfg и энергосбережением?
👉 @win_sysadmin
Сегодня словил интересную ситуацию с Windows Server, которая сначала выглядела как "магия", но в итоге — типичная особенность групповых политик.
🔥 Суть кейса: на нескольких новых машинах автоматически отключался экран через 1 минуту простоя, несмотря на выставленные GPO "никогда не выключать дисплей".
🤨 Что оказалось? Групповая политика исправно настраивала Computer Configuration > Policies > Administrative Templates > System > Power Management, но не трогала "Console lock display off timeout".
Эта настройка по умолчанию скрыта и не отображается в GUI! Но её можно включить в реестр или через GPO, а потом управлять через PowerShell:
powercfg /change monitor-timeout-ac 15
А вот как вывести текущие значения:
powercfg /query SCHEME_CURRENT SUB_VIDEO
💡 Если экран тухнет через минуту после блокировки — проверьте именно Console lock display off timeout. Это не то же самое, что просто "turn off display".
✅ Решение: через GPO включил видимость параметра и задал нужное значение. Проблема ушла.
💬 А у вас бывали случаи, когда политика "применена", но система ведет себя по-своему? Какие грабли были с powercfg и энергосбережением?
👉 @win_sysadmin
👍9🔥4❤1
👋 Привет, админы!
Недавно наткнулся на интересный момент при обновлении сертификатов на IIS, думаю, многим пригодится.
🛠 Когда меняешь сертификат вручную через GUI, всё просто. Но если нужно обновить десятки сайтов на одном сервере, то ручками долго и больно. Решение? Конечно, PowerShell!
Вот скрипт, который автоматически находит и заменяет SSL-сертификат по thumbprint на всех сайтах в IIS:
🔥 Работает быстро и чётко. Особенно выручает в связке с автоматической выдачей сертификатов (например, через ACMESharp или Win-ACME).
👉 @win_sysadmin
Недавно наткнулся на интересный момент при обновлении сертификатов на IIS, думаю, многим пригодится.
🛠 Когда меняешь сертификат вручную через GUI, всё просто. Но если нужно обновить десятки сайтов на одном сервере, то ручками долго и больно. Решение? Конечно, PowerShell!
Вот скрипт, который автоматически находит и заменяет SSL-сертификат по thumbprint на всех сайтах в IIS:
Import-Module WebAdministration
$oldThumb = "111122223333444455556666777788889999AAAA"
$newThumb = "AAAA999988887777666655554444333322221111"
$sites = Get-ChildItem IIS:\Sites
foreach ($site in $sites) {
$bindings = Get-WebBinding -Name $site.Name | Where-Object { $_.protocol -eq "https" }
foreach ($binding in $bindings) {
$bindingInfo = $binding.bindingInformation
$cert = Get-Item "cert://LocalMachine/My/$oldThumb"
if ($cert) {
Write-Host "Обновляю сертификат на сайте $($site.Name)..."
# Удаляем старый биндинг
Remove-WebBinding -Name $site.Name -BindingInformation $bindingInfo -Protocol "https"
# Добавляем с новым thumbprint
New-WebBinding -Name $site.Name -Protocol "https" -Port 443 -IPAddress "*" -HostHeader $binding.Host
Push-Location IIS:\SslBindings
New-Item "0.0.0.0!443!$($binding.Host)" -Thumbprint $newThumb -SSLFlags 1
Pop-Location
}
}
}
🔥 Работает быстро и чётко. Особенно выручает в связке с автоматической выдачей сертификатов (например, через ACMESharp или Win-ACME).
👉 @win_sysadmin
👍15👏1
👋 Привет, админы!
Недавно столкнулся с интересной ситуацией: один из пользователей пожаловался, что антивирус ничего не находит, а система всё равно ведёт себя подозрительно. Решил копнуть и не зря.
🕵️♂️ В итоге нашёл внедрение в процесс через WMI. Да-да, старый добрый WMI стал каналом для персистентности малвари. Чтобы выявить такие вещи, добавил себе в регулярный аудит вот такую проверку:
А дальше уже идёт разбор через:
⚠️ Если видите странные команды, непонятные пути, особенно с PowerShell или
Ну и напоследок
- Регулярно просматривайте WMI-события.
- Включите логирование WMI через Event ID 5861/5860 (Microsoft-Windows-WMI-Activity/Operational).
- Используйте Sysmon - он хорошо ловит подобные фокусы (Event ID 1 + родительские процессы).
👉 @win_sysadmin
Недавно столкнулся с интересной ситуацией: один из пользователей пожаловался, что антивирус ничего не находит, а система всё равно ведёт себя подозрительно. Решил копнуть и не зря.
🕵️♂️ В итоге нашёл внедрение в процесс через WMI. Да-да, старый добрый WMI стал каналом для персистентности малвари. Чтобы выявить такие вещи, добавил себе в регулярный аудит вот такую проверку:
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding |
Select-Object -Property Filter, Consumer
А дальше уже идёт разбор через:
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer
⚠️ Если видите странные команды, непонятные пути, особенно с PowerShell или
cmd.exe - повод для расследования.Ну и напоследок
- Регулярно просматривайте WMI-события.
- Включите логирование WMI через Event ID 5861/5860 (Microsoft-Windows-WMI-Activity/Operational).
- Используйте Sysmon - он хорошо ловит подобные фокусы (Event ID 1 + родительские процессы).
👉 @win_sysadmin
👍12❤2
👋 Привет, админы!
Бывает, нужно быстро понять, какие задачи по расписанию крутятся на сервере. Особенно когда сервер ведёт себя странно, а в логах тишина. У меня был случай, когда скрипт сливал логи на сторону, а запускался через Task Scheduler под безобидным именем
🔥 Вот командлет, который мне помог всё быстро найти:
А если хотите подробности (что запускается и от какого имени), то:
📌 Советую раз в месяц гонять такой скрипт по всем серверам. Лучше найти лишнее самому, чем ждать сюрпризов от пользователей (или вредоносов).
👉 @win_sysadmin
Бывает, нужно быстро понять, какие задачи по расписанию крутятся на сервере. Особенно когда сервер ведёт себя странно, а в логах тишина. У меня был случай, когда скрипт сливал логи на сторону, а запускался через Task Scheduler под безобидным именем
UpdateCheck.🔥 Вот командлет, который мне помог всё быстро найти:
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike '\Microsoft*'} |
Select-Object TaskName, TaskPath, State
А если хотите подробности (что запускается и от какого имени), то:
Get-ScheduledTask | ForEach-Object {
$info = $_
Get-ScheduledTaskInfo -TaskName $info.TaskName -TaskPath $info.TaskPath | Select-Object @{Name='Name';Expression={$info.TaskName}}, @{Name='User';Expression={$info.Principal.UserId}}, @{Name='LastRunTime';Expression={$_.LastRunTime}}, @{Name='NextRunTime';Expression={$_.NextRunTime}}, @{Name='Status';Expression={$_.LastTaskResult}}
}
📌 Советую раз в месяц гонять такой скрипт по всем серверам. Лучше найти лишнее самому, чем ждать сюрпризов от пользователей (или вредоносов).
👉 @win_sysadmin
👍15
👋 Привет, админы!
Вспомнил один случай пару лет назад: групповые политики перестали применяться, хотя GPO на месте, политики не менялись, сеть ок. На клиенте — никаких ошибок в обычных логах.
💥 А виноват оказался вот такой зверь:
Ошибка 0x8007000d: Data is invalid при выполнении
Что помогло:
1. Проверка журналов через Event Viewer:
Там вылезло: "The processing of Group Policy failed. Data is invalid."
2. Удаление сломанных GPO-кэшей на клиенте:
3. Также проверил, не повреждён ли
(после этого
✅ После этих действий GPO стали применяться нормально.
📌 На всякий случай теперь мониторю и кэш, и наличие ошибок 7016 / 7017 в журнале GroupPolicy.
💬 А у вас были кейсы с внезапной порчей групповых политик? Чем лечили?
👉 @win_sysadmin
Вспомнил один случай пару лет назад: групповые политики перестали применяться, хотя GPO на месте, политики не менялись, сеть ок. На клиенте — никаких ошибок в обычных логах.
💥 А виноват оказался вот такой зверь:
Ошибка 0x8007000d: Data is invalid при выполнении
gpupdate /force.Что помогло:
1. Проверка журналов через Event Viewer:
Applications and Services Logs -> Microsoft -> Windows -> GroupPolicy -> OperationalТам вылезло: "The processing of Group Policy failed. Data is invalid."
2. Удаление сломанных GPO-кэшей на клиенте:
Remove-Item -Path "C:\ProgramData\Microsoft\Group Policy\History\*" -Recurse -Force
gpupdate /force
3. Также проверил, не повреждён ли
Registry.pol:
del /f /q "%SystemRoot%\System32\GroupPolicy\Machine\Registry.pol"
(после этого
gpupdate сам пересоздаёт его по актуальным политикам)✅ После этих действий GPO стали применяться нормально.
📌 На всякий случай теперь мониторю и кэш, и наличие ошибок 7016 / 7017 в журнале GroupPolicy.
💬 А у вас были кейсы с внезапной порчей групповых политик? Чем лечили?
👉 @win_sysadmin
🔥6👍4
👋 Привет, админы!
На днях словил интересный кейс: Windows Server 2019 внезапно стал жутко медленным после установки обновлений. Диспетчер задач показывал — процессор почти не загружен, памяти хватает, но диски в 100% активности.
Оказалось, что Windows Search после апдейта начал перестраивать индекс, грузя дисковую подсистему. В продакшене это критично, поэтому пришлось быстро погасить пыл службы:
А чтобы не остаться без поиска навсегда, вынес отдельный плановый rebuild индекса на ночь (когда сервер не под нагрузкой).
💡 Если вы видите непонятные пиковые нагрузки на диск — первым делом смотрите
Очень наглядно показывает, кто активно долбит диск.
А как вы решаете проблему индексации? Полностью отключаете Search или настраиваете под себя?
👉 @win_sysadmin
На днях словил интересный кейс: Windows Server 2019 внезапно стал жутко медленным после установки обновлений. Диспетчер задач показывал — процессор почти не загружен, памяти хватает, но диски в 100% активности.
Оказалось, что Windows Search после апдейта начал перестраивать индекс, грузя дисковую подсистему. В продакшене это критично, поэтому пришлось быстро погасить пыл службы:
Stop-Service -Name "WSearch"
Set-Service -Name "WSearch" -StartupType Disabled
А чтобы не остаться без поиска навсегда, вынес отдельный плановый rebuild индекса на ночь (когда сервер не под нагрузкой).
💡 Если вы видите непонятные пиковые нагрузки на диск — первым делом смотрите
Get-Process с сортировкой по IO.
Get-Process | Sort-Object -Property IOReadBytes -Descending | Select-Object -First 10
Очень наглядно показывает, кто активно долбит диск.
А как вы решаете проблему индексации? Полностью отключаете Search или настраиваете под себя?
👉 @win_sysadmin
👍17❤1
👋 Привет, админы!
Недавно словил интересную ситуацию: доменный контроллер начал подвисать при логоне пользователей. Логи пустые, нагрузка на CPU и RAM в норме. Виновник нашёлся не сразу, забитый журнал безопасности (Security Log)!
Когда журнал переполнен и стоит политика “Do not overwrite events”, новые события просто не пишутся, и AD начинает чудить.
📌 Быстро проверить состояние журнала можно так:
А чтобы очистить журнал без захода в Event Viewer:
Ну и чтобы не ловить такие сюрпризы — ставьте автоматическую очистку или увеличьте размер лога:
(пример 500 МБ).
👉 @win_sysadmin
Недавно словил интересную ситуацию: доменный контроллер начал подвисать при логоне пользователей. Логи пустые, нагрузка на CPU и RAM в норме. Виновник нашёлся не сразу, забитый журнал безопасности (Security Log)!
Когда журнал переполнен и стоит политика “Do not overwrite events”, новые события просто не пишутся, и AD начинает чудить.
📌 Быстро проверить состояние журнала можно так:
Get-WinEvent -ListLog Security | Select-Object LogName, RecordCount, MaximumSizeInBytes, IsLogFull
А чтобы очистить журнал без захода в Event Viewer:
wevtutil cl Security
Ну и чтобы не ловить такие сюрпризы — ставьте автоматическую очистку или увеличьте размер лога:
wevtutil sl Security /ms:524288000
(пример 500 МБ).
👉 @win_sysadmin
👍13❤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 и др.
Системное администрирование, 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 и др.
MAX
Системный Администратор | Sysadmin Windows & Linux Server. …
Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Работа с Linux: Ubuntu, CentOS, Debian. Сетевое …
👎13🤮8👍4🖕1
👋 Привет, админы!
Один сервер на Windows Server 2019 внезапно перестал ставить обновления. Центр обновлений ругался на «поврежденные компоненты», но
Тут меня выручила DISM, старый добрый инструмент для починки образа системы. Ниже рабочая связка команд:
⚡ Что делают эти команды:
-
-
-
В моем случае именно
💡Если сервер без интернета, можно указать свой ISO-образ Windows:
А вы как чините такие баги? DISM, Repair-Install или сразу в продакшн с головой и reinstall? 😄
👉 @win_sysadmin
Один сервер на Windows Server 2019 внезапно перестал ставить обновления. Центр обновлений ругался на «поврежденные компоненты», но
sfc /scannow показывал, что всё ок.Тут меня выручила DISM, старый добрый инструмент для починки образа системы. Ниже рабочая связка команд:
DISM /Online /Cleanup-Image /CheckHealth
DISM /Online /Cleanup-Image /ScanHealth
DISM /Online /Cleanup-Image /RestoreHealth
⚡ Что делают эти команды:
-
CheckHealth - быстро проверяет, есть ли повреждения.-
ScanHealth - делает глубокую диагностику (долго, но надёжно).-
RestoreHealth - чинит поврежденные компоненты через Центр обновлений или указанный источник.В моем случае именно
RestoreHealth вылечил систему, и обновления пошли как по маслу.💡Если сервер без интернета, можно указать свой ISO-образ Windows:
DISM /Online /Cleanup-Image /RestoreHealth /Source:D:\sources\install.wim /LimitAccess
А вы как чините такие баги? DISM, Repair-Install или сразу в продакшн с головой и reinstall? 😄
👉 @win_sysadmin
👍12🔥1
👋 Привет, админы!
На одном из серверов службы Windows перестали стартовать после перезагрузки, хотя руками запускались без проблем.
Первое, что пришло в голову это задержка сети или зависимость от других сервисов. Проверил, всё в порядке. А вот в журнале событий нашёл интересное:
Оказалось, что учётка, от имени которой запускался сервис, поменяла пароль, но его забыли обновить в настройках службы.
🔧 Чтобы быстро проверить все службы, запускаемые не от
Так сразу видно, какие службы работают от доменных или локальных учёток.
Если находите неактуальные, обновляйте пароль через:
После обновления не забудьте перезапустить сервис:
⚡ В итоге за 10 минут нашли и починили всё, без долгого копания в GUI.
💬 А вы проверяете периодически пароли сервисных учёток? Есть ли у вас автоматизация для таких случаев?
👉 @win_sysadmin
На одном из серверов службы Windows перестали стартовать после перезагрузки, хотя руками запускались без проблем.
Первое, что пришло в голову это задержка сети или зависимость от других сервисов. Проверил, всё в порядке. А вот в журнале событий нашёл интересное:
"The service did not start due to a logon failure"
Оказалось, что учётка, от имени которой запускался сервис, поменяла пароль, но его забыли обновить в настройках службы.
🔧 Чтобы быстро проверить все службы, запускаемые не от
LocalSystem, я накатил простой PowerShell-скрипт:
Get-WmiObject Win32_Service |
Where-Object { $_.StartName -notmatch "LocalSystem|LocalService|NetworkService" } |
Select-Object Name, DisplayName, StartName, State
Так сразу видно, какие службы работают от доменных или локальных учёток.
Если находите неактуальные, обновляйте пароль через:
sc.exe config "ServiceName" obj= "DOMAIN\User" password= "NewPassword"
После обновления не забудьте перезапустить сервис:
Restart-Service -Name "ServiceName"
⚡ В итоге за 10 минут нашли и починили всё, без долгого копания в GUI.
💬 А вы проверяете периодически пароли сервисных учёток? Есть ли у вас автоматизация для таких случаев?
👉 @win_sysadmin
👍15