PowerShell:基于来自多台计算机的部分服务名称的服务枚举

时间:2014-02-10 14:12:29

标签: powershell windows-server-2008

我知道我可以使用PowerShell检查多个服务的服务状态。例如,有这样的事情:

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

有人可以建议我如何修改它,以便: - 枚举大量服务器,如数组或其他方式,以便使其比我将大量服务器放在一行中更具可读性。
- 在服务名称参数中使用通配符,例如“MYSERVICE *”

2 个答案:

答案 0 :(得分:1)

您可以将服务器放在文本文件中,例如SERVERS.TXT

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

并使用:

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

您也可以为服务做同样的事。

答案 1 :(得分:0)

要先回答第二个问题,-Name cmdlet的Get-Service参数支持通配符,因此您只需执行此操作即可检查具有相似名称的多个服务:

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

-Computer参数接受一个字符串数组,因此您可以从文件中读取服务器列表(每行包含一个主机名),如JPBlanc所示:

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

这可能是最佳选择,因为它将数据与代码分开。

但是,在某些情况下,将数据和代码保存在同一个文件中更为实际(例如,当您将脚本移动很多时)。在这种情况下,您可以定义一个跨越多行的数组,如下所示:

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