2014-11-25 44 views
0

我寻求帮助,再次与我的脚本:)检查使用PowerShell如果服务安装在多台计算机

我有一个脚本,将查询服务器列表找到,如果安装了特定的服务。这工作正常。但是,我知道我的列表中有一些服务器无法访问,或者有不同的凭据。我如何使这在输出中可见?因为我只得到服务没有安装的输出,这是不正确的,我只是没有正确的凭据。

$name = "BESClient" 
$servers = Get-content C:\list.txt 

function Confirm-WindowsServiceExists($name) 
{ 
    if (Get-Service -Name $name -Computername $server -ErrorAction Continue) 
    { 
     Write-Host "$name Exists on $server" 
     return $true 
    } 
     Write-Host "$name does not exist on $server" 
     return $false 
} 

ForEach ($server in $servers) {Confirm-WindowsServiceExists($name)} 

另外,我想有格式化成一个线路输出,例如:

Server1  Service running 
Server2  Service not installed 
Server3  no access 
etc... 

非常感谢任何帮助。

+1

您是否检查过http://stackoverflow.com/questions/23421507/get-service-status-from-remote-server-using-powershell,建议的解决方案使用WMI而不是get-service,以便您可以传递凭据 – 2014-11-25 10:01:55

回答

1

这里是刚刚显示错误的失败内容的选项:

function Confirm-WindowsServiceExists($name) 
{ 
    if (Get-Service -Name $name -Computername $server -ErrorAction SilentlyContinue -ErrorVariable WindowsServiceExistsError) 
    { 
     Write-Host "$name Exists on $server" 
     return $true 
    } 

    if ($WindowsServiceExistsError) 
    { 
     Write-Host "$server" $WindowsServiceExistsError[0].exception.message 
    } 

    return $false 
} 

至于第二部分问题@ arco444已经描述了正确的方法。

2

这是一个WMI解决方案。尝试连接远程计算机时出现的任何错误都会被try/catch块捕获。每个操作的结果将存储到一个自定义对象中,并添加到保存所有操作结果的数组中。

$result = @() 

$name = "BESClient" 
$servers = Get-Content C:\list.txt 
$cred = Get-Credential 

foreach($server in $servers) { 
    Try { 
    $s = gwmi win32_service -computername $server -credential $cred -ErrorAction Stop | ? { $_.name -eq $name } 
    $o = New-Object PSObject -Property @{ server=$server; status=$s.state } 
    $result += ,$o 
    } 
    Catch { 
    $o = New-Object PSObject -Property @{ server=$server; status=$_.Exception.message } 
    $result += ,$o 
    } 
} 

$result | Format-Table -AutoSize 

您应该结束了,像这样:

server state 
------ ----- 
s1  running 
s4  stopped 
s2  The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) 
+0

谢谢,但是我在执行这个脚本时遇到了错误: '在foreach循环中缺少语句正文。 在C:\用户\ jkollam \桌面\ process_check.ps1:8字符:2 + <<<<:尝试{ + CategoryInfo:ParserError:(:) [],ParseException的 + FullyQualifiedErrorId:MissingForeachStatement' – 2014-11-25 10:53:12

+0

重试现在...只有一个缺失的支架 – arco444 2014-11-25 10:55:09

+0

可能已经注意到了:)它现在可以工作,做我想做的事情。非常感谢。 – 2014-11-25 10:57:48

相关问题