8

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

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

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

4

2 回答 2

14

如果它们都具有相同的名称或显示名称,您可以在一个命令中完成。如果不是,您需要运行 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.txtwhere...是上述之一。

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

于 2013-07-21T04:33:22.183 回答
3

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

$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 名称。

于 2013-07-21T04:41:01.763 回答