我有一个脚本来测试服务器是否启动,我有的脚本工作得很好,我只是想知道它是否可以优化得更多,或者只是它的方式很棒?它查找所有以某个前缀开头的服务器,在本例中是'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"}发布于 2018-06-07 14:42:14
您正在尝试获取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,但它不可用。
我可以在我的实验室快速测试它,让我知道它是如何为你工作的。
https://stackoverflow.com/questions/50732365
复制相似问题