我有一个脚本来测试服务器是否正常运行,我的脚本运行得很好,我只是想知道它是否可以进行更多优化,还是它的方式很好?它会查找所有以特定前缀开头的服务器,在这种情况下,' PreSvr *'如果它找到其中一个启动并运行,它将停止处理其余的,并告诉我它找到的第一个的名称。如果发现这些服务器都没有响应,它会告诉我。
$found = $null
$status = $false
$SvrName = "PreSvr*"
$GetSvrs = (Get-ADComputer -Filter {Name -like $SvrName}).Name
foreach ($Svr in $GetSvrs)
{
try {$Status = (Get-Service -ComputerName $Svr -Name WinRM -ErrorAction SilentlyContinue).Status} catch {$Status = $false}
IF ($Status) {$Found = $Svr;break}
}
IF ($Found) {$Svr} Else {"No Server Responded"}
答案 0 :(得分:0)
您正试图获取WinRM服务状态的状态,如果这是目的 - 下面的代码应该有效。你可以在try块本身内部打破。
$found = $null
$winRMServiceStatus = $null
$serverReachable = $false
$srvName = "*"
$getSvrs = (Get-ADComputer -Filter {Name -like $srvName}).Name
foreach ($svr in $getSvrs) {
try {
$winRMServiceStatus= (Get-Service -ComputerName $svr -Name WinRM -ErrorAction SilentlyContinue).Status
$serverReachable = $true
$found = $svr
break;
}
catch {
$serverReachable = $false
}
}
if($serverReachable) {"found $found with WinRM status $winRMServiceStatus"} else{"No server responded"}
在您的示例中,您尝试访问foreach循环之外的$ srv,它不可用。
我能够在我的实验室快速测试它,让我知道它对你有用。