Повседневная работа администратора: службы, журналы событий, реестр, задания по расписанию и откат изменений
Служба — программа, которая работает в фоне без входа пользователя и без окна: печать, обновления, антивирус, журнал событий, веб-сервер. Службами управляет диспетчер служб services.exe (раздел 04: его запускает wininit). Графическая оснастка — Win+R → services.msc.
PS> Get-Service | Group-Object Status | Select-Object Count, Name
Count Name
----- ----
172 Stopped
98 Running
PS> Get-Service Spooler, wuauserv, WinDefend, EventLog | Select-Object Name, DisplayName, Status, StartType
Name DisplayName Status StartType
---- ----------- ------ ---------
EventLog Журнал событий Windows Running Automatic
Spooler Диспетчер печати Running Automatic
WinDefend Служба антивирусной программы Microsoft Defender Running Automatic
wuauserv Центр обновления Windows Running Manual
PS> Get-Service Spooler -RequiredServices
Status Name DisplayName
------ ---- -----------
Running RPCSS Удаленный вызов процедур (RPC)
Running http HTTP-служба
У каждой службы есть тип запуска:
| Тип | Когда запускается |
|---|---|
| Автоматически | При загрузке Windows |
| Автоматически (отложенный запуск) | Через пару минут после загрузки — чтобы не тормозить вход |
| Вручную | Когда её запросит программа или администратор. Центр обновления — такая: он запускается сам, когда нужно |
| Отключена | Никогда, даже по запросу |
Службы зависят друг от друга: Диспетчер печати не запустится без службы RPC и HTTP. Если служба не стартует, первым делом проверяют её зависимости. Полную настройку показывает sc qc: исполняемый файл, тип запуска, учётная запись, под которой работает служба (LocalSystem — максимальные права):
PS> sc.exe qc Spooler
[SC] QueryServiceConfig: успех
Имя_службы: Spooler
Тип : 110 WIN32_OWN_PROCESS (interactive)
Тип_запуска : 2 AUTO_START
Управление_ошибками : 1 NORMAL
Имя_двоичного_файла : C:\WINDOWS\System32\spoolsv.exe
Группа_запуска : SpoolerGroup
Тег : 0
Выводимое_имя : Диспетчер печати
Зависимости : RPCSS
: http
Начальное_имя_службы : LocalSystem
В PowerShell sc — псевдоним другой команды, поэтому пишут sc.exe. Остановка и запуск:
PS> Stop-Service Spooler; Get-Service Spooler
Status Name DisplayName
------ ---- -----------
Stopped Spooler Диспетчер печати
PS> Start-Service Spooler; Get-Service Spooler
Status Name DisplayName
------ ---- -----------
Running Spooler Диспетчер печати
Тип запуска меняют Set-Service Spooler -StartupType Disabled или в свойствах службы. На вкладке «Восстановление» задают, что делать при сбое: перезапустить службу, перезагрузить компьютер или ничего.
Создадим службу, которая заведомо не заработает: вместо программы-службы укажем обычную cmd.exe. Настоящая служба при запуске должна сообщить диспетчеру служб «я работаю», а cmd этого не умеет:
PS> New-Service os-demo -BinaryPathName "C:\Windows\System32\cmd.exe /c exit" -DisplayName "Учебная служба" -StartupType Manual | Out-Null
PS> Start-Service os-demo
Start-Service : Не удается запустить службу "Учебная служба (os-demo)" из-за следующей ошибки: Не удалось запустить службу os-demo на компьютере '.'.
PS> sc.exe start os-demo
[SC] StartService: ошибка: 1053:
Служба не ответила на запрос своевременно.
PS> Get-Service os-demo
Status Name DisplayName
------ ---- -----------
Stopped os-demo Учебная служба
PowerShell пишет общими словами «не удалось запустить», sc.exe называет код ошибки: 1053 — служба не ответила вовремя. Подробности всегда в журнале событий «Система», источник — Service Control Manager:
PS> Get-WinEvent -FilterHashtable @{LogName="System"; ProviderName="Service Control Manager"; Level=2} -MaxEvents 10 | Where-Object Message -match "Учебная служба" | Select-Object -First 1 | Format-List TimeCreated, Id, LevelDisplayName, Message
TimeCreated : 31.10.2026 10:50:17
Id : 7000
LevelDisplayName : Ошибка
Message : Сбой при запуске службы "Учебная служба" из-за ошибки
Служба не ответила на запрос своевременно.
Порядок разбора любого сбоя: время сбоя → журнал «Система» или «Приложение» за это время → события уровня «Ошибка» → код и текст → поиск по коду. Код 1053 обычно значит, что программа службы зависла при запуске, повреждена или ей не хватает зависимостей. Учебную службу удаляют командой sc.exe delete os-demo.
Просмотр событий — Win+R → eventvwr.msc. Основные журналы Windows:
PS> Get-WinEvent -ListLog Application, System, Security | Select-Object LogName, RecordCount, @{n="МБ"; e={[math]::Round($_.MaximumSizeInBytes/1MB)}}
LogName RecordCount МБ
------- ----------- --
Application 969 20
System 1662 20
Security 26673 20
PS> Get-WinEvent -FilterHashtable @{LogName="System"; Level=2} -MaxEvents 200 | Group-Object ProviderName | Sort-Object Count -Descending | Select-Object -First 5 Count, Name
Count Name
----- ----
16 Service Control Manager
14 Microsoft-Windows-BitLocker-Driver
12 Microsoft-Windows-FilterManager
3 Microsoft-Windows-WindowsUpdateClient
3 Microsoft-Windows-DistributedCOM
Журнал безопасности самый большой: каждый вход и проверка прав — запись. Размер журналов ограничен (здесь 20 МБ), старые записи затираются новыми — если журнал нужен для расследования, его размер увеличивают или пересылают события на сервер. Вторая команда отвечает на вопрос «что тут чаще всего ломается»: последние 200 ошибок журнала «Система», сгруппированные по источнику.
Уровни событий: «Критический», «Ошибка», «Предупреждение», «Сведения». В Get-WinEvent уровень — числом: 1, 2, 3, 4. Полезные коды: 41 (Kernel-Power) — неожиданная перезагрузка, например пропало питание; 6005 и 6006 — запуск и остановка службы журнала, то есть загрузка и завершение Windows; 4625 в журнале «Безопасность» — неудачный вход, их поток — признак подбора пароля.
Реестр — база настроек Windows и программ: дерево разделов (ключей) со значениями внутри. Основные корневые разделы:
| Раздел | Что хранит |
|---|---|
HKEY_LOCAL_MACHINE (HKLM) | Настройки компьютера: оборудование, службы, программы для всех |
HKEY_CURRENT_USER (HKCU) | Настройки вошедшего пользователя: рабочий стол, программы |
HKEY_USERS | Настройки всех загруженных профилей |
HKEY_CLASSES_ROOT | Какая программа открывает какой тип файла |
Службы, кстати, тоже описаны в реестре: HKLM\. Сведения о версии Windows:
PS> Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select-Object ProductName, DisplayVersion, CurrentBuild, EditionID
ProductName DisplayVersion CurrentBuild EditionID
----------- -------------- ------------ ---------
Windows 10 Pro 26H2 26300 Professional
Знаменитая ловушка: в ProductName у Windows 11 написано «Windows 10 Pro» — Microsoft не стала менять значение ради совместимости старых программ. Версию надёжнее определять по номеру сборки: 22000 и выше — Windows 11.
Редактор — Win+R → regedit, в командной строке — reg, в PowerShell реестр выглядит как диски HKLM: и HKCU:. Создадим ключ с настройкой, прочитаем, сохраним в файл и удалим:
PS> New-Item HKCU:\Software\os-demo | Out-Null; New-ItemProperty HKCU:\Software\os-demo -Name Server -Value "srv-01" | Out-Null
PS> Get-ItemProperty HKCU:\Software\os-demo | Select-Object Server
Server
------
srv-01
PS> reg query HKCU\Software\os-demo
HKEY_CURRENT_USER\Software\os-demo
Server REG_SZ srv-01
PS> reg export HKCU\Software\os-demo os-demo.reg /y; Get-Content os-demo.reg
Операция успешно завершена.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\os-demo]
"Server"="srv-01"
PS> Remove-Item HKCU:\Software\os-demo
reg export — резервная копия ключа в файл .reg; вернуть её — reg import os-demo.reg или двойной щелчок по файлу.
HKLM\SYSTEM может сделать Windows незагружаемой. Перед правкой — снимок ВМ или хотя бы reg export ключа.Планировщик заданий (Win+R → taskschd.msc) запускает программы по расписанию или по событию: при входе, при загрузке, при появлении записи в журнале. Сама Windows держит в нём сотни заданий: обновления, оптимизацию дисков, проверку защитника.
Задание = действие (что запустить) + триггер (когда) + учётная запись (от чьего имени). Сделаем ежедневный архив папки docs в 18:00 от имени системы (SID S-1-5-18 — учётная запись СИСТЕМА, ей не нужен пароль и вход пользователя). Сразу запустим вручную, чтобы проверить:
PS> $a = New-ScheduledTaskAction -Execute powershell -Argument '-NoProfile -Command "Compress-Archive -Path C:\Users\student\os\docs -DestinationPath C:\Users\student\os\backup-$(Get-Date -Format yyyy-MM-dd).zip -Force"'
PS> $t = New-ScheduledTaskTrigger -Daily -At 18:00
PS> $p = New-ScheduledTaskPrincipal -UserId "S-1-5-18" -RunLevel Highest
PS> Register-ScheduledTask os-backup -Action $a -Trigger $t -Principal $p -Description "Архив папки docs" | Out-Null
PS> Start-ScheduledTask os-backup; Start-Sleep 8; Get-ScheduledTaskInfo os-backup | Select-Object LastRunTime, LastTaskResult, NextRunTime
LastRunTime LastTaskResult NextRunTime
----------- -------------- -----------
31.10.2026 10:50:22 0 31.10.2026 18:00:00
PS> Get-ChildItem backup-*.zip | Select-Object Name, Length
Name Length
---- ------
backup-2026-10-31.zip 146
PS> schtasks /query /tn os-backup /fo list
Папка: \
Имя узла: PC-01
Имя задачи: \os-backup
Время следующего запуска: 31.10.2026 18:00:00
Состояние: Готово
Режим входа в систему: Интерактивный/фоновый
LastTaskResult 0 — успешно; любое другое число — код ошибки, его ищут в журнале «Microsoft → Windows → TaskScheduler». Архив создан, следующий запуск — сегодня в 18:00. Удаление — Unregister-ScheduledTask os-backup; в cmd то же делают schtasks /create, /query, /delete.
Обновления закрывают уязвимости, и большинство атак используют давно исправленные ошибки на необновлённых компьютерах. Настройки — Параметры → Центр обновления Windows, журнал — там же, «Журнал обновлений». Установленные обновления в PowerShell:
PS> Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 4 HotFixID, Description, InstalledOn
HotFixID Description InstalledOn
-------- ----------- -----------
KB5127647 Security Update 29.10.2026 0:00:00
KB5127648 Security Update 29.10.2026 0:00:00
KB5127694 Update 29.10.2026 0:00:00
KB5121794 Update 29.10.2026 0:00:00
KB-номер — идентификатор обновления: по нему ищут описание и, если обновление что-то сломало, удаляют его (wusa /uninstall /kb:номер). В организациях обновления сначала ставят на тестовые машины, а потом на остальные.
Точка восстановления — снимок системных файлов, реестра и драйверов (но не документов пользователя). Если после установки драйвера или программы Windows работает плохо, к точке можно откатиться: Win+R → rstrui. Работают точки, только если для диска включена защита системы — в ВМ курса она была выключена:
PS> Get-ComputerRestorePoint
PS> Enable-ComputerRestore -Drive "C:\"
PS> Checkpoint-Computer -Description "Перед практической работой" -RestorePointType MODIFY_SETTINGS
PS> Get-ComputerRestorePoint | Select-Object SequenceNumber, Description, @{n="Создана"; e={$_.ConvertToDateTime($_.CreationTime)}}
SequenceNumber Description Создана
-------------- ----------- -------
2 Перед практической работой 31.10.2026 10:50:34
Включили защиту диска C:, создали точку, проверили. Windows сама создаёт точки перед установкой обновлений и драйверов, но не чаще раза в сутки. Настройка в графике — Win+R → sysdm.cpl → Защита системы. Для документов нужна отдельная резервная копия: «История файлов», копирование на другой диск или сервер. Точка восстановления, снимок ВМ и резервная копия — три разные вещи, и только последняя спасает от поломки диска.
Службами в Debian управляет systemd. Запущенные службы:
$ systemctl list-units --type=service --state=running --no-pager --no-legend | head -8
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
containerd.service loaded active running containerd container runtime
cron.service loaded active running Regular background program processing daemon
dbus.service loaded active running D-Bus System Message Bus
docker.service loaded active running Docker Application Container Engine
getty@tty1.service loaded active running Getty on tty1
polkit.service loaded active running Authorization Manager
postgresql@17-main.service loaded active running PostgreSQL Cluster 17-main
$ systemctl list-units --type=service --state=running --no-pager --no-legend | wc -l
15
Состояние одной службы — systemctl status: включена ли при загрузке (enabled), работает ли (active (running)), с какого времени, PID главного процесса, память:
$ systemctl status cron --no-pager -n 0
● cron.service - Regular background program processing daemon
Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
Active: active (running) since Wed 2026-08-26 09:37:01 MSK; 2 months 5 days ago
Invocation: 44cd676a63fa4cb0a352137cf12dbd66
Docs: man:cron(8)
Main PID: 579 (cron)
Tasks: 1 (limit: 4638)
Memory: 1.1M (peak: 3.6M, swap: 120K, swap peak: 252K)
CPU: 1min 2.088s
CGroup: /system.slice/cron.service
└─579 /usr/sbin/cron -f
$ systemctl is-enabled cron; systemctl is-active cron
enabled
active
Описание службы — юнит-файл: что запускать (ExecStart), после чего (After), перезапускать ли при сбое (Restart=on-failure):
$ systemctl cat cron --no-pager
# /usr/lib/systemd/system/cron.service
[Unit]
Description=Regular background program processing daemon
Documentation=man:cron(8)
After=remote-fs.target nss-user-lookup.target
[Service]
EnvironmentFile=-/etc/default/cron
ExecStart=/usr/sbin/cron -f $EXTRA_OPTS
IgnoreSIGPIPE=false
KillMode=process
Restart=on-failure
SyslogFacility=cron
[Install]
WantedBy=multi-user.target
Расписание в Linux — таймеры systemd и cron. Таймеры:
$ systemctl list-timers --no-pager | head -5
NEXT LEFT LAST PASSED UNIT ACTIVATES
Sat 2026-10-31 11:09:00 MSK 18min Sat 2026-10-31 10:39:00 MSK 11min ago phpsessionclean.timer phpsessionclean.service
Sun 2026-11-01 00:00:00 MSK 13h Sat 2026-10-31 00:00:26 MSK 10h ago dpkg-db-backup.timer dpkg-db-backup.service
Sun 2026-11-01 00:59:15 MSK 14h Sat 2026-10-31 00:33:26 MSK 10h ago logrotate.timer logrotate.service
Sun 2026-11-01 03:10:43 MSK 16h Sun 2026-10-25 03:10:36 MSK 6 days ago e2scrub_all.timer e2scrub_all.service
logrotate — ежедневная ротация журналов (сжать старые, удалить очень старые), dpkg-db-backup — резервная копия базы пакетов. Строка cron — пять полей времени (минута, час, день месяца, месяц, день недели) и команда:
$ grep -v "^#" /etc/crontab | grep -v "^$"
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
17 * * * * — в 17 минут каждого часа, 47 6 * * 7 — в 6:47 по воскресеньям. Своё задание пользователь добавляет командой crontab -e, например архив в 18:00 каждый день: 0 18 * * * tar czf ~/backup.tgz ~/docs.
| Задача | Windows | Linux |
|---|---|---|
| Список служб | Get-Service, services.msc | systemctl list-units --type=service |
| Запуск, остановка | Start-Service, Stop-Service | sudo systemctl start, stop, restart |
| Автозапуск | Set-Service -StartupType Automatic | sudo systemctl enable |
| Журнал | Get-WinEvent, eventvwr.msc | journalctl -u служба, /var/log |
| Настройки | Реестр | Текстовые файлы в /etc |
| Расписание | Планировщик заданий, schtasks | crontab -e, таймеры systemd |
| Обновления | Центр обновления Windows | sudo apt update && sudo apt upgrade |
Журнал службы в Linux читают sudo journalctl -u cron -n 20 — последние 20 записей; без sudo обычный пользователь видит только свои записи.
services.msc, Get-Service, sc.exereg export или снимок ВМLastTaskResultsystemctl, расписание — cron и таймеры