Windows и PowerShell

5.1 Что такое службы Windows

Службы Windows — это приложения, которые работают в фоновом режиме и выполняют системные функции без взаимодействия с пользователем.

Основные характеристики служб

  • Автоматический запуск — могут запускаться при загрузке системы
  • Фоновый режим — работают без пользовательского интерфейса
  • Системные привилегии — могут иметь повышенные права доступа
  • Управляемость — можно запускать, останавливать и настраивать

Типы служб

По типу запуска:

  • Автоматический — запускаются при загрузке системы
  • Вручную — запускаются по требованию
  • Отключено — не запускаются

Просмотр служб в PowerShell

# Просмотр всех служб
Get-Service
                        
                        # Просмотр запущенных служб
Get-Service | Where-Object {$_.Status -eq "Running"}
                        
                        # Просмотр остановленных служб
Get-Service | Where-Object {$_.Status -eq "Stopped"}
                    

5.2 Управление службами

PowerShell предоставляет полный набор команд для управления службами Windows.

Запуск и остановка служб

# Запуск службы
                        Start-Service -Name "Spooler"
                        
                        # Остановка службы
                        Stop-Service -Name "Spooler"
                        
                        # Перезапуск службы
                        Restart-Service -Name "Spooler"
                        
                        # Приостановка службы
                        Suspend-Service -Name "Spooler"
                    

Настройка служб

# Изменение типа запуска службы
Set-Service -Name "Spooler" -StartupType Automatic
Set-Service -Name "Spooler" -StartupType Manual
Set-Service -Name "Spooler" -StartupType Disabled
                        
                        # Просмотр настроек службы
Get-Service -Name "Spooler" | Select-Object Name, Status, StartType
                    

Фильтрация служб

# Поиск служб по имени
Get-Service -Name "*spool*"
                        
                        # Фильтрация по статусу
Get-Service | Where-Object {$_.Status -eq "Running" -and $_.StartType -eq "Automatic"}
                        
                        # Сортировка служб
Get-Service | Sort-Object Status, Name
                    

5.3 Диагностика служб

Диагностика проблем со службами включает анализ журналов событий, проверку зависимостей и мониторинг производительности.

Анализ зависимостей

# Просмотр зависимостей службы
Get-Service -Name "Spooler" -DependentServices
                        
                        # Просмотр служб, от которых зависит данная служба
Get-Service -Name "Spooler" -RequiredServices
                    

Просмотр журналов событий

# Просмотр событий службы
Get-WinEvent -FilterHashtable @{LogName='System'; ID=7034} | Where-Object {$_.Message -like "*Spooler*"}
                        
                        # Просмотр ошибок служб
Get-WinEvent -FilterHashtable @{LogName='System'; Level=2} | Where-Object {$_.Message -like "*service*"}
                    

Мониторинг производительности

# Просмотр процессов службы
Get-Process | Where-Object {$_.ProcessName -like "*spool*"}
                        
                        # Мониторинг использования ресурсов
Get-Counter "\Process(spoolsv)\% Processor Time"
                    

5.4 Создание пользовательских служб

Создание собственных служб позволяет автоматизировать выполнение задач в фоновом режиме.

Создание службы через sc.exe

# Создание службы
                        sc create "MyService" binPath= "C:\MyApp\MyService.exe" start= auto
                        
                        # Удаление службы
                        sc delete "MyService"
                        
                        # Просмотр службы
                        sc query "MyService"
                    

Создание службы через PowerShell

Пример создания службы


# Создание службы
New-Service -Name "MyPowerShellService" -BinaryPathName "powershell.exe -File C:\Scripts\MyService.ps1" -StartupType Automatic -DisplayName "My PowerShell Service"

# Удаление службы
Remove-Service -Name "MyPowerShellService"
                        

Управление службами через WMI

# Просмотр служб через WMI
Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -like "*spool*"}
                        
                        # Запуск службы через WMI
                        $service = Get-WmiObject -Class Win32_Service -Filter "Name='Spooler'"
                        $service.StartService()