PowerShell 5.1
我注意到,当我将
Get-Service
与多台计算机和多个服务名称一起使用时,如果服务名称不在其中一台计算机中,即使它存在于列出的其他计算机中,执行也会失败。我试过以下方法:
get-service -ComputerName $computers -Name $serviceNames -ErrorAction Continue
我想列出指定计算机中指定的所有服务。某些服务可能在某些计算机上,但并非所有计算机上都存在所有服务。
推荐的方法是不使用
Get-Service
进行远程处理,而是使用 Invoke-Command
。请注意,较新版本的 PowerShell 中的 Get-Service
不再支持远程处理。
$service = 'foo', 'bar', 'baz'
Invoke-Command -ComputerName $computers { Get-Service $using:service }
如果您受到没有启用 WinRM 的远程主机的限制/需要使用 DCOM 作为您的远程协议,您可以使用
Get-WmiObject
和构造过滤器,这样,它不是特别漂亮,但它不应该抛出当在其中一个远程主机中找不到服务:
$service = 'foo', 'bar', 'baz'
$filter = $service | ForEach-Object { "name='$_'" }
$filter = $filter -join ' OR '
Get-WmiObject win32_service -Filter $filter -ComputerName $computers