簡體   English   中英

為 Powershell 中的計划任務創建每月觸發器(帶有附加條件)

[英]Create monthly trigger for Scheduled Task in Powershell (With additional criteria)

我目前正在編寫一個腳本,該腳本在運行時會創建一些計划任務,使主機做幾件事,然后在指定的時間范圍內重新啟動。 該腳本需要在多個域控制器上運行,因此我想通過使用類似 New-ScheduledTaskTrigger -RandomDelay 的東西來“負載平衡”,以便它們不會一次重新啟動,而是將其分散開來。

目標是能夠更改何時重新啟動的一些變量,例如:

  1. 每月第一個星期一 18:00 至 23:59
  2. 每個星期四 01:00 和 06:00 之間
  3. 每天 04:00 到.....你看我要去哪里

但是,在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM