Mike
Mike

Reputation: 2211

PowerShell: Service enumeration based on part of service name from multiple machines

I know that I can use PowerShell to check service status on multiple services. For example with something like this:

Get-Service -ComputerName server-a, server-b, server-c -Name MyService | 
  Select Name, MachineName, Status

Can somebody advice how I can modify this so that:
- Enumerate large number of servers like an array or somehow else so that make it more readable than if I put large number of servers in one line.
- Use a wildcard in service name parameter, e.g. "MYSERVICE*"

Upvotes: 0

Views: 106

Answers (2)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200293

To answer your second question first, the -Name parameter of the Get-Service cmdlet supports wildcards, so you can simply do this to check several services with similar names:

Get-Service -Computer 'server-a', 'server-b', 'server-c' -Name MyService* |
  select Name, MachineName, Status

The -Computer parameter accepts an array of strings, so you can read the server list from a file (containing one hostname per line), as JPBlanc suggested:

$computers = Get-Content 'C:\path\to\serverlist.txt'
Get-Service -Computer $computers -Name MyService* | ...

This is probably the best choice, as it separates data from code.

However, there are situations where it's more practical to keep data and code in the same file (e.g. when you move the script around a lot). In a situation like that you can define an array spanning multiple lines like this:

$computers = 'server-a',
             'server-b',
             'server-c',
             ...
Get-Service -Computer $computers -Name MyService* | ...

Upvotes: 0

JPBlanc
JPBlanc

Reputation: 72630

You can put your servers in a text file such as SERVERS.TXT :

Server-a
Server-b
Server-c
...

And use :

$servers = get-content SERVERS.TXT
Get-Service -ComputerName $servers -Name MyService | Select Name, MachineName, Status

You can do the same for services.

Upvotes: 1

Related Questions