services.msc 스냅인 또는 sc.exe 명령줄 도구뿐만 아니라 PowerShell을 사용하여 Windows 서비스를 관리할 수 있습니다. 이 기사에서는 PowerShell을 사용하여 Windows 서비스를 관리하는 다양한 시나리오를 고려할 것입니다.
Windows 서비스를 관리하는 데 사용되는 PowerShell Cmdlet
Windows 서비스의 상태를 보고 관리하는 8개의 기본 Service cmdlet이 있습니다. 서비스 관리 cmdlet의 전체 목록을 보려면 다음 명령을 실행하십시오.
Get-Help \*-Service
<강한>
- 서비스 받기 — 실행 중이거나 중지된 상태에서 로컬 또는 원격 컴퓨터에서 서비스를 가져올 수 있습니다.
- 신규 서비스 – 서비스를 생성합니다. cmdlet은 레지스트리 및 서비스 데이터베이스에 Windows 서비스에 대한 새 항목을 만듭니다.
- 다시 시작-서비스 – 서비스를 다시 시작합니다. cmdlet은 Windows 서비스 컨트롤러를 통해 다시 시작 메시지를 보냅니다.
- 이력서 서비스 – 서비스를 재개합니다. cmdlet은 Windows 서비스 관리자에 재개 메시지를 보냅니다.
- 세트 서비스 — 상태, 설명, 표시된 이름 또는 시작 모드를 포함하여 로컬 또는 원격 서비스의 설정을 변경합니다. 이 cmdlet을 사용하여 서비스를 시작, 중지 또는 일시 중단할 수도 있습니다.
- 서비스 시작 – 서비스를 시작합니다.
- 서비스 중지 – 서비스를 중지합니다( cmdlet은 Windows 서비스 관리자에 중지 메시지를 보냅니다).
- 서비스 중단 – 서비스를 일시 중단합니다. 일시 중단된 서비스는 여전히 실행 중이지만(예:Resume-Service cmdlet 사용) 다시 시작할 때까지 아무 작업도 수행하지 않습니다.
Get-Help와 함께 특정 cmdlet 사용에 대한 자세한 설명과 예를 얻을 수 있습니다.
Get-Help Start-Service
Get-Service로 Windows 서비스 상태를 확인하는 방법
Get-Service를 사용하여 로컬 또는 원격 컴퓨터에서 서비스 목록 및 해당 상태(실행 중/중지됨)를 가져올 수 있습니다. cmdlet. –이름 매개변수를 사용하면 이름으로 서비스를 선택할 수 있습니다. 서비스 이름은 와일드카드 문자 *
를 사용하여 지정할 수 있습니다. .
정확한 서비스 이름을 모르는 경우 –DisplayName을 사용하여 표시된 이름으로 찾을 수 있습니다. 매개변수. 값 목록과 와일드카드를 사용할 수 있습니다.
Get-Service 사용 -ComputerName이 있는 cmdlet 원격 컴퓨터의 서비스 상태를 가져오는 매개변수입니다. 쉼표로 구분된 이름을 지정하여 한 번에 여러 원격 컴퓨터의 서비스 상태를 쿼리할 수 있습니다. 예를 들어, 아래 표시된 명령은 원격 컴퓨터 ny-prnt1 및 ny-prnt2에서 스풀러 서비스 상태를 가져옵니다.
Get-Service spooler –ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped spooler Print Spooler
서비스의 모든 속성을 표시하려면 객체 선택을 사용합니다. cmdlet:
Get-Service spooler | Select-Object *
Select-Object cmdlet을 사용하면 서비스의 특정 속성을 가져올 수 있습니다. 예를 들어, 스풀러 서비스의 이름, 상태 및 사용 가능한 옵션을 보고 싶습니다.
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
선택
서비스 받기 cmdlet에는 서비스 종속성을 볼 수 있는 두 개의 매개 변수가 있습니다.
- -DependentServices 주어진 서비스에 종속된 서비스를 표시할 수 있습니다.
- -필수 서비스 주어진 서비스가 의존하는 서비스를 표시합니다.
다음 명령은 스풀러 서비스를 시작하는 데 필요한 서비스를 표시합니다.
Get-Service –Name Spooler -RequiredServices
다음 명령은 스풀러에 의존하는 서비스를 보여줍니다:
Get-Service –Name Spooler -DependentServices
특정 상태 또는 매개변수가 있는 서비스를 찾으려면 where-Object를 사용하세요. cmdlet. 예를 들어 실행 중인 서비스 목록을 가져오겠습니다.
Get-Service | Where-Object {$_.status -eq 'running'}
수동 시작 유형으로 서비스를 표시하려면 다음 명령을 실행하십시오.
Get-Service | Where-Object {$_.starttype -eq 'Manual'}
다음 PowerShell 스크립트를 사용하여 현재 컴퓨터에 특정 Windows 서비스가 있는지 확인하십시오.
if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}
PowerShell을 사용하여 서비스를 중지, 시작 또는 다시 시작하는 방법
서비스 중지를 사용하여 서비스를 중지할 수 있습니다. cmdlet. 스풀러를 중지하려면 다음 명령을 실행하십시오.
Stop-Service -Name spooler
Stop-Service cmdlet은 실행 후 아무 것도 표시하지 않습니다. 결과를 보려면 -PassThru를 사용하세요. 매개변수.
모든 서비스를 중지할 수 있는 것은 아닙니다. 종속 서비스가 있는 경우 오류가 표시됩니다.
Cannot stop service because it has dependent services. It can only be stopped if force flag set.
서비스를 강제로 중지하려면 –Force 를 사용하십시오. 매개변수. 모든 종속 서비스도 중지됩니다.
Stop-Service samss –Force -Passthru
다음 명령은 "실행 중" 상태인 경우 지정된 서비스(비트, 스풀러)를 중지합니다.
get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru
때때로 서비스가 "중지" 상태에서 끊기고 강제로 종료되어야 합니다.
서비스 시작 cmdlet은 중지된 서비스를 시작합니다.
Start-Service -Name spooler -PassThru
종속 서비스가 중지되면 서비스가 시작되지 않습니다. 이들을 찾고 시작하려면 다음 PowerShell 한 줄짜리를 사용하십시오:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}
서비스 일시 중단 cmdlet은 이 상태를 지원하는 경우 서비스를 일시 중지할 수 있습니다. 서비스를 일시 중지할 수 있는지 알아보려면 Get-Service를 사용하세요. CanPauseAndContinue가 있는 cmdlet 재산.
Get-Service samss | Format-List name, canpauseandcontinue
일시 중지될 수 있는 모든 서비스 목록을 표시하려면 다음 명령을 실행하십시오.
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}
SQLBrowser 서비스를 일시 중단합니다:
Suspend-Service -Name SQLBrowser
일시 중단된 서비스를 재개하려면 서비스 재개 를 사용하십시오. cmdlet:
Resume-Service -Name SQLBrowser
다음 명령은 일시 중단된 모든 서비스를 재개합니다.
get-service | where-object {$_.Status -eq "Paused"} | resume-service
다시 시작-서비스 cmdlet이 서비스를 다시 시작합니다.
Restart-Service -Name spooler
이 명령은 컴퓨터에서 중지된 모든 네트워크 서비스를 시작합니다.
get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service
이러한 명령에는 –ComputerName이 없습니다. 매개 변수이지만 Invoke-Command cmdlet 또는 파이프를 사용하여 원격 컴퓨터에서 실행할 수 있습니다.
예를 들어, 원격 컴퓨터 ny-prnt1에서 인쇄 스풀러를 다시 시작하려면 다음 명령을 실행합니다.Get-Service Spooler -ComputerName ny-prnt1 | Start-Service
Set-Service를 사용하여 서비스 설정 변경
세트 서비스 cmdlet을 사용하면 로컬 또는 원격 컴퓨터에서 서비스의 모든 매개 변수 또는 설정을 변경할 수 있습니다. 서비스 상태는 속성이므로 이 cmdlet을 사용하여 서비스를 시작, 중지 또는 일시 중단할 수 있습니다. 세트 서비스 -StartupType 있음 서비스의 시작 유형을 변경할 수 있는 매개변수입니다.
스풀러 시작 유형을 자동으로 변경해 보겠습니다.
Set-Service spooler –startuptype automatic –passthru
수동 시작 유형을 설정할 수 있습니다.
Set-Service spooler –startuptype manual –passthru
PowerShell을 통해 Windows 서비스를 생성 또는 삭제하는 방법
신규 서비스 – Windows에서 새 서비스를 만드는 cmdlet입니다. 새 서비스의 이름과 실행 파일을 지정합니다(Windows 서비스로 PowerShell 스크립트를 실행할 수도 있음).
TestSvc라는 이름으로 새 서비스를 만들어 보겠습니다.
new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"
Get-WmiObject cmdlet을 사용하여 서비스의 시작 유형 및 설명에 대한 정보를 가져옵니다.
get-wmiobject win32_service -filter "name='testservice'"
다음 명령을 사용하여 새 서비스의 설정을 변경할 수 있습니다.
Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual
서비스를 삭제하려면 다음 명령을 실행하십시오.
(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()
Windows 서비스를 실행하는 사용자 계정 변경
PowerShell을 사용하여 서비스를 시작하는 데 사용되는 사용자 계정을 변경할 수 있습니다. TestSvc를 시작하는 데 사용된 계정의 이름을 가져옵니다.
get-wmiobject win32_service -filter "name='TestSvc'" | Select name,startname
선택
Windows 서비스의 사용자 이름과 암호를 변경하려면 다음 명령을 실행하십시오.
$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")
Change() 메서드 매개변수 목록이 표시됩니다. StartName 및 StartPassword 매개변수가 있는 위치를 계산합니다. 매개변수는 20 번째 에 위치합니다. 및 21 st 각각의 장소입니다.
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")
또는 gMSA 계정의 이름을 입력할 수 있습니다(이 경우 계정 암호는 지정되지 않음).
보시다시피 PowerShell을 사용하면 Windows 서비스를 쉽게 관리할 수 있습니다. 서비스를 생성, 중지, 시작 또는 재개하고 속성을 변경할 수 있습니다. 대부분의 cmdlet을 사용하면 원격 컴퓨터에서 서비스를 관리할 수 있습니다.