function Parse-CronExpression {
param (
[Parameter(Mandatory=$true)]
[string]$cronExpression
)
$cronParts = $cronExpression -split ' '
if ($cronParts.Length -ne 5) {
Write-Host "无效的cron表达式。"
return
}
$minute = Parse-CronPart $cronParts[0] 0 59
$hour = Parse-CronPart $cronParts[1] 0 23
$dayOfMonth = Parse-CronPart $cronParts[2] 1 31
$month = Parse-CronPart $cronParts[3] 1 12
$dayOfWeek = Parse-CronPart $cronParts[4] 0 7
$parsedExpression = @{
Minute = $minute
Hour = $hour
DayOfMonth = $dayOfMonth
Month = $month
DayOfWeek = $dayOfWeek
}
return $parsedExpression
}
function Parse-CronPart {
param (
[Parameter(Mandatory=$true)]
[string]$part,
[Parameter(Mandatory=$true)]
[int]$minValue,
[Parameter(Mandatory=$true)]
[int]$maxValue
)
$parsedPart = @()
if ($part -eq '*') {
$parsedPart = $minValue..$maxValue
}
elseif ($part -match '^\d+$') {
$parsedPart = $part -as [int]
}
elseif ($part -match '^\*/(\d+)$') {
$step = $Matches[1] -as [int]
$parsedPart = $minValue..$maxValue | Where-Object { $_ % $step -eq 0 }
}
elseif ($part -match '^(\d+)-(\d+)$') {
$start = $Matches[1] -as [int]
$end = $Matches[2] -as [int]
$parsedPart = $start..$end
}
elseif ($part -match '^(\d+),(\d+)(,\d+)*$') {
$parsedPart = $part -split ',' | ForEach-Object { $_ -as [int] }
}
else {
Write-Host "无效的cron部分: $part"
}
return $parsedPart
}
# 使用示例
$cronExpression = "0 0 * * *"
$parsedExpression = Parse-CronExpression $cronExpression
# 输出结果
$parsedExpression