[英]Create monthly trigger for Scheduled Task in Powershell (With additional criteria)
我目前正在編寫一個腳本,該腳本在運行時會創建一些計划任務,使主機做幾件事,然后在指定的時間范圍內重新啟動。 該腳本需要在多個域控制器上運行,因此我想通過使用類似 New-ScheduledTaskTrigger -RandomDelay 的東西來“負載平衡”,以便它們不會一次重新啟動,而是將其分散開來。
目標是能夠更改何時重新啟動的一些變量,例如:
但是,在 New-ScheduledTaskTrigger 中沒有“-Monthly”之類的東西
這是第一個問題,我可能可以在其他帖子的幫助下解決這個問題,但如果我這樣做,例如我無法使用 -RandomDelay,我認為這是它的主要功能。
如果 -Monthly 確實有效(對於每月觸發),我想象它應該是這樣的:
$rebootFrequency = MONTHLY # DAILY, WEEKLY, MONTHLY
$rebootWeek = FIRST # FIRST, SECOND, THIRD, FOURTH, LAST
$rebootDayOfWeek = MON # MON, TUE, WED, THU, FRI, SAT, SUN
$rebootTimeFrom = 10:00 # HH:MM[:SS]
$rebootTimeTo = 16:00 # HH:MM[:SS]
New-ScheduledTaskTrigger -"$rebootFrequency" -WeekOfMonth $rebootWeek;
-DayOfWeek $rebootDayOfWeek -At $rebootTimeFrom -RandomDelay $rebootTimeTo
你對我應該如何解決這個問題有什么建議嗎?
我可以用 schtask.exe 做同樣的事情,但是我最終不得不制作某種腳本來執行“RandomDelay”function。
如果您有任何問題,請隨時進一步詢問。 提前致謝。
我現在已經讓它工作了,但我試圖讓腳本更直觀一點,但我不知道我會怎么做......
我想要做的是將使用天數(例如:星期四 16)“轉換”為能夠寫“THU”。
現在它看起來像這樣:
$rebootDaysOfWeek = "16" # SUN=1, MON=2, TUE=4, WED=8, THU=16 etc.
$trigger.DaysOfWeek = $rebootDaysOfWeek
但如果是這樣的話,我會發現它更酷:
$rebootDaysOfWeek = "THU" # SUN, MON, TUE, WED, THU, FRI, SAT
$trigger.DaysOfWeek = $rebootDaysOfWeek
但我似乎找不到“轉換” $rebootDaysOfWeek 以使用位掩碼的方法。
查看 Microsoft 文檔: https://docs.microsoft.com/en-us/windows/win32/taskschd/time-trigger-example--scripting-
該示例在 VB 中,但看起來它只是一個 ComObject。 我沒有足夠的時間玩,但你可以這樣開始:
$service = new-object -comobject Schedule.Service
$service.connect()
$taskdefinitiion = $service.NewTask(0)
有很多任務定義的東西,但它歸結為觸發器,你會這樣做:
$triggers = $taskDefinition.Triggers
$trigger = triggers.Create(5) # I had to try different numbers here, didn't dig through the docs
$trigger.DaysOfWeek = 16 #Thursday
$trigger.WeeksOfMonth = 1 # First week, 2 for second, 6 for third, 8 for forth
$trigger.MonthsOfYear = 4095 # all months
$trigger.RandomDelay = 'PT1H' # 1 hour random delay.
我會讓你從這里拿走。 上述部分項目的鏈接: https: //docs.microsoft.com/en-us/windows/win32/taskschd/monthlydowtrigger-daysofweek https: //docs.microsoft.com/en-us/windows/win32/taskschd/ /monthlydowtrigger-monthsofyear https: //docs.microsoft.com/en-us/windows/win32/taskschd/monthlydowtrigger-weeksofmonth https: //docs.microsoft.com/en-us/windowstrigger-randomdelay3
挑戰 1 更新
為了使用對位十進制值的“友好”引用,您可以創建一個常量部分或使用哈希表,無論哪種方式您都必須自己進行轉換:
# Constants
$SUN = 1
$MON = 2
$TUE = 4
$WED = 8
$THU = 16
$FRI = 32
$SAT = 64
# Hashtable - because why not!
$DaysOfWeek = @{
SUN = 1
MON = 2
TUE = 4
WED = 8
THU = 16
FRI = 32
SAT = 64
}
然后你可以使用: $trigger.DaysOfWeek = $THU
或$trigger.DaysOfWeek = $DaysOfWeek["THU"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.