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

PowerShell:基于来自多台计算机的部分服务名称的服务枚举,powershell,windows-server-2008,Powershell,Windows Server 2008,我知道我可以使用PowerShell检查多个服务的服务状态。例如,像这样的东西: Get-Service -ComputerName server-a, server-b, server-c -Name MyService | Select Name, MachineName, Status 有人能建议我如何修改它吗: -枚举大量的服务器,例如数组或其他方式,使其比将大量服务器放在一行中更具可读性 -在服务名称参数中使用通配符,例如“MYSERVICE*”您可以将服务器放入文本文件中,如

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

Get-Service -ComputerName server-a, server-b, server-c -Name MyService | 
  Select Name, MachineName, Status
有人能建议我如何修改它吗:
-枚举大量的服务器,例如数组或其他方式,使其比将大量服务器放在一行中更具可读性

-在服务名称参数中使用通配符,例如“MYSERVICE*”

您可以将服务器放入文本文件中,如
servers.TXT

Server-a
Server-b
Server-c
...
和使用:

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

您也可以对服务执行相同操作。

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

Get-Service -Computer 'server-a', 'server-b', 'server-c' -Name MyService* |
  select Name, MachineName, Status
-Computer
参数接受字符串数组,因此您可以从文件中读取服务器列表(每行包含一个主机名),建议如下:

$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* | ...