PowerShell에서 서비스 관리하는 방법
- PowerShell에서 서비스 나열하기
- PowerShell에서 원격 서비스 찾기
- PowerShell에서 서비스 시작 및 중지하기
- PowerShell에서 서비스 재시작하기
- PowerShell에서 서비스의 시작 유형 변경하기

Windows 서비스는 거의 모든 Windows 시스템 관리자들이 사용해야 하는 주제 중 하나입니다. 물론 Windows 서비스를 관리하기 위해 우리는 일회성 작업을 위해 services.msc
MMC 스냅인을 시작할 수 있지만, PowerShell을 사용하여 자동화를 구축해야 할 경우는 어떻게 해야 할까요?
이 기사는 모든 PowerShell 서비스 cmdlet을 논의하고, 그것들을 사용하며, 많은 컴퓨터에서 서비스를 관리하기 위한 스크립트를 개발하는 방법에 대해 설명합니다.
PowerShell에서 서비스 나열하기
Windows PowerShell과 서비스로 수행할 수 있는 가장 기본적인 작업 중 하나는 로컬 또는 원격 컴퓨터에서 어떤 서비스가 존재하는지를 단순히 나열하는 것입니다. 예를 들어 PowerShell을 열고 Get-Service
명령을 실행하여 출력을 관찰하십시오.
Get-Service
명령만으로도 로컬 컴퓨터의 모든 서비스와 각 서비스의 상태
, 이름
, 및 표시 이름
을 나열합니다.
Get-Service
출력:
Status Name DisplayName
------ ---- -----------
Stopped AarSvc_55244 AarSvc_55244
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Running AMD Crash Defen... AMD Crash Defender Service
<SNIP>
다른 cmdlet과 마찬가지로 PowerShell은 각 서비스에 대한 모든 속성을 반환하지 않습니다.
예를 들어, 필요한 서비스나 아마도 서비스 설명을 보고 싶다면, 결과를 Select-Object
명령으로 파이프하여 *
와일드카드를 사용하여 모든 속성을 나타내는 방식으로 이러한 속성을 찾을 수 있습니다.
Get-Service ALG | select *
출력:
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Application Layer Gateway Service
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Manual
Site :
Container :
PowerShell에서 원격 서비스 찾기
어쩌면 우리는 네트워크에 있으며 하나 이상의 원격 Windows 컴퓨터에서 서비스를 나열해야 할 수도 있습니다. Windows PowerShell 시절에는 -ComputerName
매개변수를 사용하여 이를 할 수 있었지만, 불행히도 그 매개변수는 더 이상 존재하지 않습니다.
원격 컴퓨터에서 Windows 서비스를 검사하는 한 가지 방법은 Windows PowerShell 원격(Remoting) 기능을 사용하는 것입니다. PS Remoting을 사용하면 모든 로컬 명령을 캡슐화하고 로컬에서 하던 것처럼 원격 세션에서 호출할 수 있습니다.
원격 컴퓨터에서 PowerShell 원격이 활성화된 경우, 예를 들어, Invoke-Command
cmdlet을 사용하여 원격 컴퓨터에서 Get-Service
명령을 실행할 수 있습니다.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
출력:
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
실행된 후 Invoke-Command
cmdlet은 Get-Service
가 반환한 모든 정보를 전달하며, 예상대로 서비스가 반환됩니다.
Invoke-Command
cmdlet이 반환하는 추가적인 PSComputerName
속성을 확인하십시오. 우리는 또한 많은 원격 컴퓨터에서 서비스를 나열하기 위한 간단한 스크립트를 만들 수 있습니다.
PowerShell에서 서비스 시작 및 중지하기
Windows PowerShell로 서비스도 시작하고 중지할 수 있습니다.
Start-Service
및 Stop-Service
cmdlet은 우리가 기대하는 대로 정확히 실행됩니다. 다음으로, 아래의 파이프라인 또는 -Name
매개변수를 사용할 수 있습니다.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
모든 *-Service
cmdlet은 -Name
및 -DisplayName
매개변수를 사용하여 서비스 이름 값을 탭 완성할 수 있도록 해줍니다. -Name
매개변수를 입력한 후 공백을 추가하고 Tab
키를 누르십시오.
우리는 로컬 컴퓨터의 모든 서비스를 자전거처럼 순환하는 것을 볼 수 있습니다. 같은 개념은 서비스 시작에도 적용됩니다.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Start-Service
및 Stop-Service
명령은 항등적이므로, 서비스가 시작되거나 중지된 후, 이미 그 상태일 때 서비스를 중지하거나 시작하려고 하면 cmdlet은 서비스를 건너뛰게 됩니다.
PowerShell로 원격 서비스를 중지하고 시작하려면, 다시 이 명령들을 스크립트 블록에 래핑하고 PowerShell 원격을 사용하여 원격으로 호출해야 합니다. 아래와 같이 보여줍니다.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
PowerShell에서 서비스 재시작하기
Windows PowerShell로 서비스를 재시작하기 위한 코드 재사용을 제한하려면, Restart-Service
cmdlet을 사용하는 것이 좋습니다. 이 cmdlet은 우리가 생각하는 대로 정확히 작동하며 다른 서비스 명령과 유사하게 작동합니다.
예를 들어, 위의 이전 예제에서 보였듯이 wuauserv
서비스를 시작하고 중지하려고 한다면, Get-Service
의 출력을 Restart-Service
로 직접 파이프하여 일부 코드를 절약할 수 있습니다. 아래와 같이 보여줍니다.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
PowerShell에서 서비스의 시작 유형 변경하기
서비스의 시작 유형은 Windows가 부팅될 때 서비스가 어떻게 작동하는지를 결정하는 속성입니다. 따라서 우리는 다시 몇 가지 옵션이 있습니다.
자동
: Windows가 부팅될 때 서비스가 자동으로 시작됩니다.비활성화
: 서비스는 변경되지 않는 한 절대 시작되지 않습니다.수동
: 서비스는 시작할 수 있지만 수동으로 이루어져야 합니다.자동 - 지연
: Windows가 부팅될 때 자동으로 시작되지만 지연됩니다.
먼저 시작 유형이 무엇인지 알아야 합니다. 이것은 Get-Service
로 확인할 수 있습니다.
시작 유형을 찾기 위해 Get-Service
를 사용하는 경우, Get-Service
가 이를 상태
라고 부르며 상태
속성으로 표시됩니다.
(Get-Service -Name wuauserv | select *).StartType
출력:
Manual
현재 시작 유형을 알게 되면, Set-Service
를 사용하여 이를 변경할 수 있습니다. 아래 예제는 시작 유형을 자동
으로 설정하는 것입니다.
Set-Service -Name <service name> -StartupType Automatic
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn