2017-09-25 54 views
0

如何在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 
} 

回答

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 
+0

我應該把「 get-childitem -path ...「後括號內還是內部? – farag

+0

嗯,儘管wuauserv正在運行,它仍會清空文件夾!爲什麼不檢查服務狀態? – farag

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 
} 
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 
相關問題