개요
Get-Service/Start-Service/Stop-Service/Restart-Service는 Windows 서비스(백그라운드에서 상시 실행되는 시스템 구성 요소)를 관리하는 cmdlet 묶음이다. 89장의 Get-Process가 다룬 일반 프로세스와 달리, 서비스는 로그온한 사용자가 없어도 시스템 부팅과 함께 자동으로 시작되고, 다른 서비스와 의존 관계를 맺는다는 점이 다르다.
정신 모델은 “서비스는 시작·중지 상태를 갖는 프로세스이고, 어떤 서비스는 다른 서비스가 먼저 실행돼 있어야만 시작될 수 있다"는 것이다. 이 의존 관계를 무시하고 서비스를 중지하면 그 서비스에 의존하는 다른 서비스까지 연쇄적으로 중단될 수 있다.
사용법
| |
종류
| 값/매개변수 | 설명 |
|---|---|
Status 속성 | Running/Stopped/Paused 등 — 내부적으로는 열거형 정수값이라 오름차순 정렬 시 Stopped(1)가 Running(4)보다 앞에 옴 |
-DependentServices | 이 서비스에 의존하는 다른 서비스 목록 |
-RequiredServices(별칭 -ServicesDependedOn) | 이 서비스가 필요로 하는 다른 서비스 목록 |
-Force(Stop/Restart) | 의존 서비스가 있어도 함께 중지·재시작 |
-DisplayName | 서비스 이름 대신 사람이 읽는 표시 이름으로 조회 |
예시
| |
주의사항·함정
Status의 오름차순 정렬 결과가 직관과 반대다: Sort-Object Status로 정렬하면 Stopped 서비스가 Running 서비스보다 먼저 나온다. Status는 문자열이 아니라 내부적으로 정수값을 가진 열거형이고, Stopped가 1, Running이 4이기 때문이다. 실행 중인 서비스를 먼저 보고 싶다면 Sort-Object Status -Descending을 써야 한다.
의존 관계를 무시하고 -Force 없이 서비스를 중지하면 오류가 난다: 다른 서비스가 의존하고 있는 서비스를 그냥 Stop-Service로 중지하려 하면, PowerShell이 안전장치로 오류를 낸다. 의존 서비스까지 함께 내려도 괜찮다는 확신이 있을 때만 -Force를 써야 한다 — 프로덕션 서버에서는 어떤 서비스가 연쇄적으로 영향받는지 -DependentServices로 미리 확인하는 습관이 중요하다.
PowerShell 6.0부터 Get-Service에 -ComputerName 매개변수가 사라졌다: Windows PowerShell 5.1까지는 Get-Service -ComputerName으로 원격 서비스를 조회할 수 있었지만, PowerShell 6부터는 이 매개변수가 제거됐다. 원격 컴퓨터의 서비스를 다루려면 85장에서 배운 Invoke-Command로 감싸야 한다 — 이는 이 저장소가 반복해서 강조하는 Windows PowerShell/PowerShell 7 버전 차이의 또 다른 구체적 사례다.
이 cmdlet들은 Windows 전용이다: Get-Service 계열은 Windows의 서비스 제어 관리자(SCM)를 대상으로 하므로 macOS·Linux에서는 사용할 수 없다. 크로스플랫폼 스크립트를 작성한다면 $IsWindows 자동 변수로 플랫폼을 먼저 확인해야 한다.
이식성: Linux의 systemctl status/start/stop/restart(systemd 기반)가 정확히 대응하는 개념이다. -DependentServices/-RequiredServices는 systemd의 systemctl list-dependencies와 유사한 목적을 수행한다. CMD의 net start/net stop도 서비스를 제어하지만 의존 관계 조회 기능은 제공하지 않는다.
![Featured image of post [PowerShell] 91. Get-Service와 서비스 시작/중지/재시작](/post/powershell/get-start-stop-restart-service-powershell/wordcloud_hu_41e5730180f34dc5.webp)
![[PowerShell] 89. Get-Process/Stop-Process — 프로세스 관리](/post/powershell/get-stop-process-command-powershell/wordcloud_hu_35ba97214ccb33be.webp)
![[PowerShell] 90. Start-Process — 외부 프로그램 실행](/post/powershell/start-process-external-program-powershell/wordcloud_hu_bd96568dcd900372.webp)
![[PowerShell] 91. Get-Service와 서비스 시작/중지/재시작](/post/powershell/get-start-stop-restart-service-powershell/wordcloud_hu_592e6189f836acb0.webp)
![[PowerShell] 92. ScheduledTasks 모듈 — 예약 작업 등록](/post/powershell/scheduledtasks-module-register-task-powershell/wordcloud_hu_b2a7add1ec96d7f6.webp)
![[PowerShell] 93. Get-WinEvent/Get-EventLog — 이벤트 로그 조회](/post/powershell/get-winevent-get-eventlog-powershell/wordcloud_hu_2cd7b8bd9d97b108.webp)
![[PowerShell] 94. Get-CimInstance/Get-WmiObject — CIM/WMI 조회](/post/powershell/get-ciminstance-get-wmiobject-powershell/wordcloud_hu_95a94332eff9e659.webp)