使用start-sleep后检查服务是否正在运行

时间:2017-09-25 10:41:48

标签: powershell

如何在Start-Sleep -m 120之后检查服务是否再次运行?

即使在120分钟后wuauserv可以正常运行,也许会出现这种情况。

$getservice = Get-Service -Name wuauserv
If($getservice.Status -eq 'Running')
{
    Start-Sleep -m 120
    Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
}
Else
{
    Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
}

3 个答案:

答案 0 :(得分:1)

似乎您只想在服务停止后调用Get-ChildItem。 一种选择是:

$getservice = Get-Service -Name wuauserv
$getservice.WaitForStatus('Stopped')

Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | 
    Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

您可以选择指定超时:

$getservice.WaitForStatus('Stopped', '02:00:00')

请注意,WaitForStatus方法在每次状态检查之间等待大约250毫秒。如果这太重了,你可以使用while循环。

$getservice = Get-Service wuauserv
while($getservice.State -ne 'Stopped')
{
   Start-Sleep -m 10
   $getservice = Get-Service wuauserv
}

Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | 
    Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

答案 1 :(得分:0)

您可以运行脚本,直到服务停止,然后运行Get-ChilItem

while($true){

    if(-not isWuauservRunning){
        Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
        break
    }
}
  • 如果这是较大脚本的一部分,则由于使用Start-Job,我们while($true)可以在后台运行此活动。

您也可以这样做(我不喜欢这种方法,我认为最好在服务停止时检查一下):

function isWuauservRunning(){
    $isRunning = $false
    $service = Get-Service -Name wuauserv
    if(($service -ne $null) -and ($service.Status -eq 'Running')){
        $isRunning = $true
    }

    return $isRunning
}

function getAndRemoveItems(){
    Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
}


if(isWuauservRunning()){
    Start-Sleep -m 120
    if(-not isWuauservRunning()){
        getAndRemoveItems
    }

}else{
    getAndRemoveItems
}

答案 2 :(得分:0)

$getservice = Get-Service -Name wuauserv
while($getservice.Status -eq 'Running')
{
    Start-Sleep -s 1800
$getservice = Get-Service -Name wuauserv
}
Get-ChildItem -Path $env:SystemRoot\SoftwareDistribution\Download -Force -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
相关问题