【发布时间】:2016-05-06 00:48:44
【问题描述】:
我已经构建了一个小型 powershell 脚本来检查服务是否已启动。如果未启动,请尝试启动它,然后等待一分钟并再次检查。不断重复这个过程,直到服务启动成功。我发现循环的行为不像我预期的那样,我似乎必须在循环中重新分配服务变量才能获得更新的状态。这是我的代码:
$ServiceName = 'Serenade'
$arrService = Get-Service -Name $ServiceName
if ($arrService.Status -ne 'Running'){
$ServiceStarted = $false}
Else{$ServiceStarted = $true}
while ($ServiceStarted -ne $true){
Start-Service $ServiceName
write-host $arrService.status
write-host 'Service started'
Start-Sleep -seconds 60
$arrService = Get-Service -Name $ServiceName #Why is this line needed?
if ($arrService.Status -eq 'Running'){
$ServiceStarted = $true}
}
如果我在没有倒数第三行(带有注释的行)的情况下运行代码,我会得到以下输出。我可以签入 Windows 服务管理器,并且该服务在第一个循环之后显然已启动。为什么需要倒数第三行?
鉴于这种行为,是否有更好的方法来编写此代码?
谢谢
【问题讨论】:
-
因为存储了服务的可变状态,为了让它工作,需要再次获取服务的状态。
-
我不是在检查倒数第二行的状态吗?带有
if($arrService.Status...的那个? -
您是,但您正在从已设置的变量中检查它,如果没有该行来更新该变量,则不会再次调用该变量。
-
对不起,我是个ps新手。我打算查看服务的状态,如果它是“正在运行”,请将 $ServiceStarted 变量更改为 true。完成后,将重新评估初始循环条件,并再次检查 $ServiceStarted 变量,所以它不会找到更新后的值 true 吗?
-
你想要完成什么?检查服务是否正在运行,如果它没有运行则启动。在开始之前停止重新评估?
标签: powershell