如何使用PowerShell检查特定服务是否在远程计算机上运行

时间:2013-07-21 04:16:14

标签: powershell

我有3台服务器,运行3项服务:

  • SERVER-A正在运行的serv1.exe服务
  • SERVER-B正在运行serv2.exe服务
  • SERVER-C正在运行serv3.exe服务

使用PowerShell如何查询每个服务以检查它们是否正在运行并将信息输出到文本文件?

2 个答案:

答案 0 :(得分:13)

如果它们都具有相同的名称或显示名称,则可以在一个命令中执行。如果不是,则需要运行3个命令。

如果所有名称或显示名称相同:

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

如果他们有不同的名称或显示名称:

我会这样做 -

@{
  'server-a' = 'service-a'
  'server-b' = 'service-b'
  'server-c' = 'service-c'
}.GetEnumerator() | ForEach-Object {
  Get-Service -ComputerName $_.Name -Name $_.Value
} | Select Name, MachineName, Status

要输出到文本文件,请使用... | Set-Content ~\Documents\Service_Status.txt,其中...是以上之一。

注意 - 您的帐户需要具有查询远程计算机的权限。

答案 1 :(得分:2)

有几种方法可以实现这一目标。我正在使用值的哈希值,因为您提到服务器到服务的映射始终是一对一的。

$svrHash = @{"SERVER-01"="winmgmt";"SERVER-02"="Wecsvc"}
$svrHash.Keys 
  | ForEach-Object {Get-Process -ComputerName $_ -Name $svrHash[$_] -Ea SilentlyContinue} 
  | Select ProcessName 
  | Out-File C:\Scripts\test.txt

您需要使用服务名称而不是.exe名称。