You can use a Timer for this:
$ElapsedEventHandler = {
param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
($sender -as [System.Timers.Timer]).Stop()
Unregister-Event -SourceIdentifier Timer.Elapsed
# Do whatever you want
}
$PSRemoteSession = New-PSSession -ComputerName $ServerName -Credential user1
$serviceInfo = Invoke-Command -Session $PSRemoteSession -ScriptBlock { Get-Service -Name SrvNameHere }
$serviceName = $serviceInfo.Name
switch ($serviceInfo.Status) {
'Stopped' {
Invoke-Command -Session $PSRemoteSession -Verbose -ArgumentList $serviceName -ScriptBlock { param ($serviceName) Start-Service -Name $serviceName -Verbose }
}
'StopPending' {
Invoke-Command -Session $PSRemoteSession -Verbose -ScriptBlock { Stop-Process -Force -Name mtsrv -Confirm } Invoke-Command -Session $PSRemoteSession -Verbose -ArgumentList $serviceName -ScriptBlock { param ($serviceName) Start-Service -Name $serviceName -Verbose }
}
'Running' {
$timer = New-Object System.Timers.Timer
$timer.Interval = 60000
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed -Action $ElapsedEventHandler
$timer.Start()
Invoke-Command -Session $PSRemoteSession -Verbose -ArgumentList $serviceName -ScriptBlock { param ($serviceName) Stop-Service -Name $serviceName -Force -Confirm }
}
}