2014-03-12 52 views
0

我期待運行一個基於條件的聲明,如果它的營業時間與否。我們的營業時間爲08:00至17:00。我有下面的腳本,但它不起作用。運行PowerShell如果聲明之間的營業時間

我試圖將(Get-Date).tostring('%H')與小時編號進行比較。

我也試過((Get-Date).hour -ge 17)它仍然失敗。

有什麼想法?

while ($loop -eq 1) { 

Write-Host "Running" 

    # Get last write timestamp 
    $lastwrite = [datetime](Get-ItemProperty -Path $source -Name LastWriteTime).lastwritetime 

    if (((Get-Date).tostring('%H') -le "8") -and ((Get-Date).tostring('%H') -ge "17")) { 
     # Do nothing, it is outside of the time window 
     Write-Host "Nothing to do, outside of business hours" 
    } elseif (($lastwrite -le (Get-Date).addMinutes(-$ageMinutes)) -and ((Get-Date).tostring('%H') -ge "8" -and (Get-Date).tostring('%H') -le "17")) { 
     # If it's older than $ageMinutes variable above, send an email 
     notify 
     $oldTimestampFound = 1 
     # Sleep for 4 minutes to not flood inboxes (5 minute sleep total with the while loop) 
     Write-Host "Alert sent. Sleeping for 4 minutes..." 
     Start-Sleep -s 300 
    } elseif (($lastwrite -ge (Get-Date).addMinutes(-$ageMinutes)) -and ($oldTimestampFound -eq 1)) { 
     $oldTimestampFound = 0 
     Write-Host "All clear" 
     notifyAllClear 
    } 

    Write-Host "Sleeping for 60 seconds..." 
    Start-Sleep -s 60 

} 

我擺在那裏的Write-Hosts嘗試和調試,但我的輸出是

Running 
Sleeping for 60 seconds... 
+0

出於好奇,你爲什麼不只是設置它在任務調度在工作時間反覆執行。如果腳本崩潰,它也會在下一個睡眠週期後自動啓動。 – kemiller2002

+0

好問題和我思考的一個問題。這個腳本是臨時的,只是想讓腳本中的某些東西進入,並保持它運行。 – Pat

回答

3

你格式化獲取最新的錯誤,用於獲取最新的個人我的-Format HH選項d將它作爲一次像這樣簡單的比較整數:

[int]$hour = get-date -format HH 
If($hour -lt 8 -or $hour -gt 17){ <do nothing> } 
Else{ 
    If($lastwrite -le (Get-Date).addMinutes(-$ageMinutes)){ <send email, set oldTimeStampFound flag, and sleep> } 
    Else{ 
     <Clear oldTimeStampFound flag> 
    } 
} 
+1

我認爲 - 可能需要成爲 - 或。 – mjolinor

+0

@mjolinor很好的接收,謝謝你把它引起我的注意!我已經在我的答案中解決了它。 – TheMadTechnician

+0

工程很好,你清理了我的「大腦垃圾」雜亂的代碼。謝謝! – Pat