Get-service: Checking the Status of Windows Services with PowerShell

You can use the Get-Service cmdlet to get a list of all the services installed on the Windows operating systems, their status and startup type. This one and other cmdlets to get the status and management of Windows services first time appeared in Powershell 1.0. In this article we will demonstrate typical examples of Get-Service cmdlet usage to get the status of a service on local or remote computers, the type of services startup, also we’ll cover how to determine the dependencies of services.

You can get a list of services on a local or remote computer by using the Get-Service cmdlet. Get-Service command without parameters returns a list of all services on the local system.

Use Get-Service to Check Windows Service Status

This command will list all local Windows services, their status (running or stopped) and display name.

get-service remote computer

To save the service list to a text file for future investigation, use the Out-File cmdlet:

Get-Service | Out-File "C:\PS\Current_Services.txt"

To get two or more service state, you need to specify its name divided by commas:

get-service bits, wuauserv

If you need to display only running services, use this command:

Get-Service | Where-Object {$_.Status -EQ "Running"}

The pipeline operator (|) passes the results to the Where-Object cmdlet, which selects only those services for which the Status parameter is set to “Running”. If you want to display only the stopped services, specify “Stopped”.

powershell get service status

You can get all the properties of the service object using the Get-Member.

get-service | get-member

As you can see, these objects have the Typename –  System.ServiceProcess.ServiceController. The screenshot shows all the available properties and methods of service objects in the system (most of them are not used when displaying by default).

powershell get-service remote computer

To display specific properties of the service, use the next command. For example, we need to display the Display Name, status and features of the Windows Update (wuauserv) service:

get-service wuauserv | select Displayname,Status,ServiceName,Can*

DisplayName : Windows Update

Status : Stopped

CanPauseAndContinue : False

CanShutdown : False

CanStop : False

powershell check service status

You can find all services that can be paused and resumed without Windows restart:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

For example, to get the type of Windows services startup type, run the command (works in PowerShell 5.1):

Get-Service | select -property name,starttype

You can filter the services list by the service name using the asterisk as a wildcard:

get-service wi*

Also, note that the PowerShell is not a not case-sensitive language. It means that the following command will return the equal results:

get-service win*

get-service WIN*

To exclude some service from resulting list you can use the -Exclude option:

Get-Service -Name "win*" -Exclude "WinRM"

You can sort services in descending order by the value of the Status property (running services are displayed earlier than stopped):

get-service s* | sort-object status – Descending

How to Check if a Specific Service Exists via PowerShell?

If you want to check whether a specific Windows service in exist on current, you can use the following commands (usually used in various scripts):

$servicename = “SomeService”

if (Get-Service $servicename -ErrorAction SilentlyContinue)

{

Write-Host "$servicename exists"

# do something

}

Else {

Write-Host " $servicename not found"

# do something

}

get service status powershell

You can check if a specific Windows service exists on a list of remote computers/servers. To do this task you need to save the list of remote computers to the text file comp_list.txt in the simple format:

server1

server2

server3

PC21

PC34

powershell get-service

And run the following PowerShell script:

$servicename = "SomeService"

$list = get-content “c:\ps\comp_list.txt”

foreach ($server in $list) {

if (Get-Service $servicename -computername $server -ErrorAction 'SilentlyContinue'){

Write-Host "$servicename exists on $server "

# do something

}

else{write-host "No service $servicename found on $server."}

}

Use PowerShell to Check Service Status on a Remote Computer

You can use the Get-Service cmdlet to get the status of services not only on the local, but also on remote computers. To do this, use the –ComputerName parameter. You can use the NetBIOS, FQDN name or an IP address as a computer name. Connection to remote computers is established not through PowerShell Remoting (WinRM), but through Service Manager (similar to the sc.exe command).

get-service wuauserv -ComputerName remotePC1

In PowerShell v3 you can get the status of the service on multiple remote computers at once, their names must be separated by commas.

get-service spooler -ComputerName remotePC1,remotePC2, remotePC3| format-table Name,Status,Machinename –autosize

powershell service status

Use the format-table cmdlet in this example to get a more convenient table with the list of the services status.

Also, you can get the services health on a list of remote computers that is being stored in a plain text file:

$list = get-content “c:\ps\comp_list.txt”
Get-Service -Computername (Get-Content -path “c:\ps\comp_list.txt”) -Name spooler | Select-Object MachineName,Name,Displayname,Status | Sort-Object Status

To restart a service on a remote computer, use the following command:

Get-Service wuauserv -ComputerName server1| Start-Service

Use Get-Service to Display Service Dependencies

The Get-Service cmdlet has two other useful parameters that you can use when managing Windows services. The DependentServices parameter returns services that depend on this service. The RequiredServices parameter returns the services on which this service depends.

The following command receives the services needed to start the LanmanWorkstation service.

Get-Service -Name LanmanWorkstation –RequiredServices

get-service powershell

The next command returns dependent services that require the LanmanWorkstation service.

Get-Service -Name LanmanWorkstation -DependentServices

If you manually stop all dependence services, you won’t be able to run your service. In order to automatically run all dependency services, use the following PowerShell one-liner:

get-service servicename | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

5 comments

  1. you uploaded great artice , I wondered after reading your article , so much thanks .getting services using powershell is great and very usefull to all windows users.
    I will you all the best for keep posting new articles

  2. WMI query can show a list of all services in bulk and filter results (such as as started/stopped, service name, description etc).
    1. Run WMI query in ROOT\CIMV2 namespace:

    – Start WMI Explorer or any other tool which can run WMI queries.
    – Run WMI query: SELECT * FROM Win32_Service
    2. Run wmic command-line interface:

    – Press WIN+R
    – Type “wmic”, press Enter
    – In wmic command prompt type: /node:RemoteComputerName service
    3. Run Powershell script:

    – thru WMI object: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service -Computer RemoteComputerName
    4. Select specific columns:

    – run: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service -Computer RemoteComputerName | Select-Object DisplayName, Started, StartMode, PSComputerName
    5. Sort results:

    – run: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service -Computer RemoteComputerName | Select-Object DisplayName, Started, StartMode, PSComputerName | Sort-Object DisplayName
    6. Filter results:

    – run: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service -Computer RemoteComputerName | Select-Object DisplayName, Started, StartMode, PSComputerName | Where-Object -FilterScript {$_.DisplayName -like “Microsoft*”}
    7. Save to CSV file:

    – run: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Service -Computer RemoteComputerName | Select-Object DisplayName, Started, StartMode, PSComputerName | Export-CSV “c:\file.csv” -Append -NoTypeInformation

    Read this kb to execute this command on multiple computers https://www.action1.com/kb/list_of_services_on_remote_computer.html

  3. I’m trying to make a PowerShell script which pulls Status of different services in different servers. I need it in below format but don’t know where to start. Please help me.
    ServiceName Server1 Server2 Server3
    Service1 Running Stopped Running
    Service2 Running Running Running

  4. Great article. I’m looking for some example if the service name have to words. For example:

    Data usage
    DHCP Client

    If write get-service netlogon will show an output. But if I write get-service dhcp client it will show an error. So I wondering how to use get-service with a service name that have two or more words. Thanks.

  5. Found it. get-service -name dh*

    Status Name DisplayName
    —— —- ———–
    Running Dhcp DHCP Client

    So the command is get-service dhcp

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.