Windows Powershell服务自动化

Windows Powershell服务自动化,windows,winforms,powershell,Windows,Winforms,Powershell,我有100多台服务器,我必须检查这些服务器的服务。在几乎5台服务器上,我们有相同的服务。每个箱子至少包含3项服务。 我正在从保存在某个位置的文件导入内容。对于服务器名,我很好。对于服务,我在下面的文件下的列中保存了类似于Service\u start\u name*的内容 AA* BB* CC* 下面是代码。根据下面的代码,这是自动化的好主意吗 $ServerName = Get-Content "Absolutepath" $Service = Get-Content "Absolutepa

我有100多台服务器,我必须检查这些服务器的服务。在几乎5台服务器上,我们有相同的服务。每个箱子至少包含3项服务。 我正在从保存在某个位置的文件导入内容。对于服务器名,我很好。对于服务,我在下面的文件下的列中保存了类似于Service\u start\u name*的内容

AA*
BB*
CC*
下面是代码。根据下面的代码,这是自动化的好主意吗

$ServerName = Get-Content "Absolutepath"
$Service = Get-Content "Absolutepath"
foreach ($Server in $ServerName) {

        write-host $($server)
        Get-Service -ComputerName $Server $Service


}
另外,我们如何在不打印服务名称的情况下更好地显示? 假设在服务器X中有5个服务,所以如果所有服务都在运行,只需在该服务器上打印所有好的服务即可

我尝试使用if条件,但由于有许多服务,它会打印多次,因为for-each循环。
请建议。

你可以玩各种各样的东西。。 对于测试,我使用localhost,当您尝试时:

Get-Service -ComputerName localhost -DisplayName *sophos*
你会得到:

结果10

结果正确

因此,如果您使用:

if (!((Get-Service -ComputerName localhost -DisplayName *sophos*).Status -contains stopped)) { Write-Host "Localhost: All ok" }
或:

您可以对服务“停止”或其他内容使用各种检查。。 以上只是给你一些想法


希望有帮助。

对于您提供的上一个解决方案,所有远程计算机的所有服务器的输出(全部正常)都是相同的,无论服务是否已停止或正在运行。首先,您需要将服务器名更改为Server::foreach($ServerName中的服务器){if(!((获取服务-ComputerName$Server$Service)。状态-包含“stopped”)){Write Host“Localhost:All ok”}。此外,这只搜索服务“name”。如果名称不相关,则DisplayName可能更好。对我来说,区别是从“DisplayName”返回的12个服务到从“name”返回的8个服务查询。对于我可以运行的本地计算机。状态,但对于远程计算机,它不工作,因为我必须检查所有远程框中的所有服务。您可以从Get Service-ComputerName xxxx查看服务吗?如果您的访问被拒绝,请确保您使用的外壳具有域管理员权限。Get Service不接受credentials,您可以使用(如果需要)Get-WmiObject Win32_Service-Credential$Cred-ComputerName$Computer-Filter“Name='Something'”。我可以在没有密码的情况下获取-services。工作正常。Get-Service_-Name*如果我在循环中执行此操作,它将提供所有服务器输出。
(Get-Service -ComputerName localhost -DisplayName *sophos*).Status -contains "stopped"
if (!((Get-Service -ComputerName localhost -DisplayName *sophos*).Status -contains stopped)) { Write-Host "Localhost: All ok" }
if (!(Get-Service -ComputerName $server -DisplayName $Service | select status | where {$_.Status -like "Stopped"})) { Write-Host "$($Server): All OK" }