将数字转换为星期几列表

Convert Number to DayOfWeek List

我 运行 遇到了一个奇怪的问题,希望这里有人能提供帮助。我在 Windows 计算机上查询计划任务并获取计划执行的日期。但是,在我想看到“星期日、星期一、星期三、星期五”之类的地方,我得到“43”。

$taskObject = Get-ScheduledTask -TaskName "MyTestTask" -TaskPath "\Testing\" | Select-Object *
foreach ($trigger in $taskObject.Triggers) {
    write-host $trigger.DaysOfWeek
}

我查了一些东西,但我对如何轻松地将“43”转换为选定日期的列表一无所知。我忽略了某个功能或某处吗?如何将列出的数字转换为 [DayOfWeek[]]$currentDays?

谢谢!

DaysOfTheWeek 是一个按位掩码,其文档页面中显示了枚举:https://docs.microsoft.com/en-us/windows/win32/taskschd/weeklytrigger-daysofweek

看到我们可以枚举哈希表中的那些,然后使用它来确定您的任务在哪几天触发。

$DayofWeek=@{
    1='Sunday'
    2='Monday'
    4='Tuesday'
    8='Wednesday'
    16='Thursday'
    32='Friday'
    64='Saturday'
}
$DayofWeek.Keys | Where{$trigger.DaysOfTheWeek -band $_} | ForEach-Object {$Dayofweek[$_]}

以你的 43 为例,它会输出星期五、星期三、星期一和星期日。

的替代方法:

[Flags()] enum DaysOfWeek {
    Sunday = 1
    Monday = 2
    Tuesday = 4
    Wednesday = 8
    Thursday = 16
    Friday = 32
    Saturday = 64
}

[DaysOfWeek]43

# Outputs:
# Sunday, Monday, Wednesday, Friday

PowerShell Enum Flags - PowerShell 5.0 及更高版本。