fa
Feedback
Системный Администратор Windows

Системный Администратор Windows

رفتن به کانال در Telegram

🖥️ Windows для системных администраторов: управление, оптимизация, безопасность. Полезные советы, лайфхаки, PowerShell-скрипты, автоматизация и практические решения для работы с серверами и рабочими станциями. Авторский канал.

نمایش بیشتر
3 086
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-77 روز
-830 روز
آرشیو پست ها
👋 Привет, админы! Пользователи жаловались на долгий логон на RDS-сервер. Вроде и ресурсов хватает, и сеть нормальная, а сессия грузится по минуте. Покопался в логах и наткнулся на то, что отрабатывает куча лишних GPO, в том числе старые скрипты входа, которые уже давно никому не нужны. Быстро проверить, какие политики реально применяются, помогла вот такая команда:

gpresult /h C:\Temp\GPO_Report.html
Открыв отчет в браузере, сразу видно все примененные политики и время их применения. А еще можно через PowerShell собрать сводку по GPO и времени логина:

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-GroupPolicy/Operational';ID=5312} |
Select-Object TimeCreated, Message |
Sort-Object TimeCreated -Descending |
Select-Object -First 20
Так я нашел пару древних скриптов, которые тормозили загрузку профиля. Удалил и логон снова за 10 секунд! 🚀 👉 @win_sysadmin

👋 Привет, админы! Недавно поймал интересный кейс: один из серверов на Windows Server 2019 неожиданно перестал обновляться. Центр обновлений крутился без конца, а в WindowsUpdate.log - стандартный "ничего полезного". Оказалось, что проблема была в битом кэше обновлений. Решение оказалось простым, но спасло несколько часов:

net stop wuauserv
net stop bits
Remove-Item -Recurse -Force C:\Windows\SoftwareDistribution\*
net start bits
net start wuauserv
После этого сервер спокойно подтянул все обновления. 👉 Маленький лайфхак: если часто сталкиваетесь с зависаниями обновлений, автоматизируйте этот процесс. Например:

$services = "wuauserv","bits"
Stop-Service $services -Force
Remove-Item -Recurse -Force C:\Windows\SoftwareDistribution\*
Start-Service $services
Write-Host "Кэш обновлений очищен!"
Скрипт можно положить в отдельный .ps1 и запускать при необходимости. 👉 @win_sysadmin

👋 Привет, админы! Раз уж тема зашла, делюсь готовым скриптом для массового обновления паролей сервисных учёток. Иногда после смены пароля учётки приходится руками лазить по десяткам серверов и обновлять службы — это ад. Решается всё PowerShell’ем. Вот скрипт:

# Задаем данные
# автор: https://t.me/win_sysadmin
$ServiceAccount = "DOMAIN\ServiceUser"
$NewPassword = "NewSecurePassword123!"
$Servers = @("Server1","Server2","Server3")  # список серверов

foreach ($Server in $Servers) {
    Write-Host "Обновляю службы на $Server..." -ForegroundColor Cyan
    $services = Get-WmiObject Win32_Service -ComputerName $Server | Where-Object { $_.StartName -eq $ServiceAccount }
    foreach ($svc in $services) {
        Write-Host "  -> Обновляем $($svc.Name) ($($svc.DisplayName))" -ForegroundColor Yellow
        $result = sc.exe \\$Server config $($svc.Name) obj= $ServiceAccount password= $NewPassword
        if ($result -like "*[SC] ChangeServiceConfig SUCCESS*") {
            Restart-Service -Name $svc.Name -ComputerName $Server -Force
            Write-Host "     Перезапущено." -ForegroundColor Green
        } else {
            Write-Host "     Ошибка при обновлении!" -ForegroundColor Red
        }
    }
}
Работа скрипта: - Берёт список серверов. - Находит службы, которые работают под указанной учёткой. - Меняет пароль и сразу перезапускает сервис. Можно легко адаптировать под CSV, чтобы брать серверы и учётки из файла. 👉 @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

👋 Привет, админы! Один сервер на 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

🚀 Подборка полезных 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 и др.

👋 Привет, админы! Недавно словил интересную ситуацию: доменный контроллер начал подвисать при логоне пользователей. Логи пустые, нагрузка на 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

🎥 Вебинар по Linux: GREP и другие регулярные выражения Linux На вебинаре вы узнаете: - Разберём, что такое регулярные выраже
🎥 Вебинар по Linux: GREP и другие регулярные выражения Linux На вебинаре вы узнаете: - Разберём, что такое регулярные выражения и в чём разница между их основными типами (Basic, Extended, PCRE) - Узнаем, как не сломать grep, sed и awk одной неловкой скобкой и заставить их делать ровно то, что вам нужно. - Составим шаблоны для логов, чтобы находить не просто «ошибки», а именно ту ошибку, которая мешает спать. И чтобы конфиги сами себя проверяли (ну, почти). - Научимся отлаживать и тестировать регулярные выражения на практике. В результате вебинара вы: - Перестанете путать .* с .+ и будете знать, почему это важно. - Научитесь писать выражения, которые работают с первого раза (ладно, со второго). - Автоматизируете хотя бы одну рутину прямо на вебинаре. Хватит уже это делать руками. - Уйдёте с готовыми шаблонами, которые не страшно показать коллегам. 👉 Для участия зарегистрируйтесь: https://vk.cc/cUPFVy 🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional" Курс от OTUS — для тех, кто хочет работать с Linux на уровне профессионала. Упор на Ubuntu 22.04 и реальные задачи: от RAID и LVM до сетей, firewall, мониторинга и тонкой настройки систем под нагрузку. В программе: Zabbix, Prometheus, Nginx, Docker, ELK, Ansible, SELinux, BGP и другие инструменты, которые реально используются в продакшене. 👉 Повысить свои навыки: https://vk.cc/cUPFPV Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

👋 Привет, админы! На днях словил интересный кейс: 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

👋 Привет, админы! Вспомнил один случай пару лет назад: групповые политики перестали применяться, хотя 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

👋 Привет, админы! Бывает, нужно быстро понять, какие задачи по расписанию крутятся на сервере. Особенно когда сервер ведёт себя странно, а в логах тишина. У меня был случай, когда скрипт сливал логи на сторону, а запускался через 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

👋 Привет, админы! Недавно столкнулся с интересной ситуацией: один из пользователей пожаловался, что антивирус ничего не находит, а система всё равно ведёт себя подозрительно. Решил копнуть и не зря. 🕵️‍♂️ В итоге нашёл внедрение в процесс через 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

👋 Привет, админы! Недавно наткнулся на интересный момент при обновлении сертификатов на 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

👋 Привет, админы! Сегодня словил интересную ситуацию с 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

👋 Привет, админы! Недавно настроил автоматическое создание пользователей в 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

Освойте UserGate и повысьте уровень защиты своей ИТ-инфраструктуры! Бесплатный онлайн-курс поможет вам шаг за шагом освоить в
Освойте UserGate и повысьте уровень защиты своей ИТ-инфраструктуры! Бесплатный онлайн-курс поможет вам шаг за шагом освоить внедрение и настройку UserGate — без лишней теории, с упором на практику. В программе курса: ✅ Настройка сетевых зон, NAT, VPN, кластеров, фильтрации на уровне приложений и правил межсетевого экрана ✅ Интеграция с LDAP и Active Directory, фильтрация контента, системы обнаружения вторжений и обратный прокси ✅ Пошаговые видеоуроки, практические упражнения и итоговое тестирование По завершении курса Вы получите: ⭐ именной сертификат 📕 PDF-инструкции 📋 чек-листы и готовые конфигурации, которые помогут в дальнейшей работе Пройдите курс в удобное время — запись уже доступна. Реклама. ООО "ИНФРАТЕХ". ИНН 5024197250.

👋 Привет, админы! На днях ловил интересную проблему с 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

Освойте UserGate и повысьте уровень защиты своей ИТ-инфраструктуры! Бесплатный онлайн-курс поможет вам шаг за шагом освоить в
Освойте UserGate и повысьте уровень защиты своей ИТ-инфраструктуры! Бесплатный онлайн-курс поможет вам шаг за шагом освоить внедрение и настройку UserGate — без лишней теории, с упором на практику. В программе курса: ✅ Настройка сетевых зон, NAT, VPN, кластеров, фильтрации на уровне приложений и правил межсетевого экрана ✅ Интеграция с LDAP и Active Directory, фильтрация контента, системы обнаружения вторжений и обратный прокси ✅ Пошаговые видеоуроки, практические упражнения и итоговое тестирование По завершении курса Вы получите: ⭐ именной сертификат 📕 PDF-инструкции 📋 чек-листы и готовые конфигурации, которые помогут в дальнейшей работе Пройдите курс в удобное время — запись уже доступна. Реклама. ООО "ИНФРАТЕХ". ИНН 5024197250.

👋 Привет, админы! Давеча пришлось накатить пачку обновлений на десяток серверов. Раньше делал это руками — заходишь, запускаешь 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

👋 Привет, админы! Если в домене внезапно начинают сыпаться жалобы вроде «не могу зайти, пароль верный» - один из первых шагов в расследовании: поиск заблокированных аккаунтов. 🔥 Вот простой 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