将数字转换为 DayOfWeek 列表

Ric*_*ick 2 windows powershell dayofweek

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

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

我稍微研究了一下,但对于如何轻松地将“43”转换为选定日期的列表,我一无所获。有没有我忽略的功能或东西?如何将列出的数字转换为[DayOfWeek[]]$currentDays

谢谢!

Ash*_*Ash 6

@TheMadTechnician 好的答案的替代方案:

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

[DaysOfWeek]43

# Outputs:
# Sunday, Monday, Wednesday, Friday
Run Code Online (Sandbox Code Playgroud)

PowerShell 枚举标志- PowerShell 5.0 及更高版本。


The*_*ian 5

DaysOfTheWeek 是一个按位掩码,其文档页面中显示了枚举:https: //learn.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[$_]}
Run Code Online (Sandbox Code Playgroud)

以 43 为例,将输出星期五、星期三、星期一和星期日。