如何监控远程计算机上的服务列表?

时间:2016-07-09 21:15:55

标签: powershell

我想监控远程计算机上的服务列表。 这些服务在所有远程计算机上都不相同。

我最接近的是监控远程机器上停止的所有服务,但我似乎无法找到一种方法来编写监控服务列表的方法。

这是我正在处理的脚本:

$Date = Get-Date -Format dd-MMM-yyyy
$Time = Get-Date -Format "hh:mm:ss tt"
$Style = @"
<!DOCTYPE html>
<html>
...
"@

$ServerList = Get-Content -Path C:\temp\computers1.txt
$body = $ServerList |
        Foreach-Object {
          Get-Service -ComputerName $_ | Where-Object {
            $_.Status -ne "Running" -and
            $_.StartType -like "Automatic"
          }
        } |
        Select-Object MachineName, Status, DisplayName, StartType |
        Sort-Object -Property MachineNAme -Descending |
        ConvertTo-Html

$colorTagTable = @{
  Stopped = ' bgcolor="#ff0000">Stopped<';
  Running = ' bgcolor="#00ff00">Running<'
}

# get possible values look them in text sorrounded by > < and replace
# them with style (pun intended).
$colorTagTable.Keys | foreach {
  $body = $body -replace ">$_<", ($colorTagTable.$_)
}

ConvertTo-Html -Head $Style -Body $body | Out-File "C:\temp\srv.htm"    

2 个答案:

答案 0 :(得分:1)

如有疑问,请阅读documentation

  

<强> -ComputerName&LT;字符串[]&GT;
  获取在指定计算机上运行的服务。默认为本地计算机   键入远程计算机的NetBIOS名称,IP地址或完全限定的域名(FQDN)。要指定本地计算机,请键入计算机名称,点(。)或localhost   [...]
  的 - 名称&LT;字符串[]&GT;
  指定要检索的服务的服务名称。允许使用通配符。默认情况下,此cmdlet获取计算机上的所有服务。

$Style = @"
<style>
...
</style>
"@

$ServiceList = 'NetLogon', 'Spooler', 'W32Time'
$ServerList  = Get-Content -Path C:\temp\computers1.txt

Get-Service -ComputerName $ServerList -Name $ServiceList |
  Select-Object MachineName, Status, DisplayName, StartType |
  Sort-Object -Property MachineNAme -Descending |
  ConvertTo-Html -Head $Style |
  Out-File 'C:\temp\srv.htm'

除非在该计算机上没有运行任何服务,否则将忽略在特定计算机上不存在的服务,在这种情况下,您将收到错误。如果您想忽略它,请使用参数Get-Service运行-ErrorAction SilentlyContinue

答案 1 :(得分:0)

对于服务列表我会有类似的东西来实际获得应该运行的服务并拥有电子邮件报告而不是记录和检查html页面

$servicelist=Get-WmiObject -Class Win32_Service -Filter "state = 'stopped' and startmode = 'auto'" | select Name


$From = "YourEmail@gmail.com"
$To = "AnotherEmail@YourDomain.com"
$Subject = "Daily Service Report From "
$Body = "get-content C:\temp\srv.htm "
$SMTPServer = "smtp.email.com"
#$SMTPPort = "587"
Send-MailMessage -From $From -to $To  -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer #-port $SMTPPort