帖子内容
Управление удалёнными службами и процессами PowerShell позволяет управлять службами и процессами на нескольких удалённых компьютерах без ручного подключения по RDP. Для этого используются Invoke-Command для выполнения кода на удалённой машине или Get-CimInstance для прямого WMI-запроса. Запуск и остановка службы на удалённом ПК: # Через Invoke-Command (требует WinRM) Invoke-Command -ComputerName "PC-01", "PC-02" -ScriptBlock { Restart-Service "Spooler" -ErrorAction SilentlyContinue Get-Service "Spooler" | Select-Object Name, Status, MachineName } -Credential (Get-Credential) Получение списка процессов с удалённых серверов: $computers = @("SRV-WEB", "SRV-DB", "SRV-FILE") $result = $computers | ForEach-Object { Get-CimInstance -ComputerName $_ -ClassName Win32_Process -Filter "Name='chrome.exe'" | Select-Object PSComputerName, Name, ProcessId, WorkingSetSize } $result | Format-Table Остановка зависшего процесса на нескольких машинах: $targetProcess = "notepad" Invoke-Command -ComputerName (Get-Content C:\Servers.txt) -ScriptBlock { Get-Process -Name $using:targetProcess -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "$env:COMPUTERNAME: Процесс $using:targetProcess остановлен" } -ThrottleLimit 10 Проверка статуса службы перед действием: $services = @("W3SVC", "MSSQLSERVER") $computers = "192.168.1.10", "192.168.1.11" foreach ($svc in $services) { $status = Get-CimInstance -ComputerName $computers -ClassName Win32_Service -Filter "Name='$svc'" $status | Where-Object State -ne 'Running' | ForEach-Object { Invoke-Command -ComputerName $_.PSComputerName -ScriptBlock { Start-Service -Name $using:svc } } } Эти методы особенно полезны для централизованного администрирования серверов, мониторинга и автоматического восстановления служб. Важно предварительно настроить WinRM на целевых компьютерах (Enable-PSRemoting). #кмд@pcTeapot