You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本故障排查:检查当前时间是否处于指定工作时段时始终返回True

为什么你的PowerShell脚本始终返回True?问题排查与修复

让我们一步步拆解你的脚本里的问题,找出根源并解决:

1. 先看一眼明显的变量错误

你定义了$day、$from_hour、$to_hour这些变量,但在输出语句里用的是$string_day、$string_from_hour、$string_to_hour——这些都是未定义的变量,导致你调试时看不到正确的时段信息,虽然这不是返回值异常的核心原因,但会干扰你排查问题。

2. 时间比较的逻辑完全写反了(核心问题)

你的判断条件$current_hour -le $from_hour -and $current_hour -ge $to_hour有两个致命问题:

  • 逻辑运算符用错了:对于16:00 to 00:00这种跨天的时段,正确逻辑应该是「当前时间≥16:00 或者 当前时间≤00:00」,而不是用-and(要求同时满足)。用-and的话,只有当一个时间既小于等于16:00又大于等于00:00时才会返回True——而几乎所有白天的时间都满足这个条件,这就是为什么你总是得到True的原因!
  • 字符串比较不靠谱:你把时间转成HH:mm字符串来比较,虽然同一天的时间字符串能按字典序比较,但跨天的00:00是第二天的零点,单纯字符串比较没法区分这一点,很容易出错。

3. 漏掉了星期的判断

你的脚本获取了当前星期和指定星期,但完全没在条件里判断两者是否匹配——也就是说,哪怕今天是周一,脚本也会拿周一的时间去和周六的时段比较,结果自然不准确。


修复后的完整脚本

下面是修正了所有问题的版本,还优化了时间比较的逻辑,完美支持跨天时段:

# 获取当前时间的完整对象,方便后续处理
$current_date = Get-Date
$current_day = $current_date.ToString("dddd")
$current_time = $current_date.TimeOfDay

# 解析输入的时段字符串
$time_string = "Sat 16:00 to 00:00"
$parts = $time_string.Split(" ")
$target_day = $parts[0]
# 用TimeSpan类型存储时间,避免字符串比较的坑
$from_time = [TimeSpan]::Parse($parts[1])
$to_time = [TimeSpan]::Parse($parts[3])

# 输出正确的调试信息
Write-Output("CURRENT TIME: {0} {1}" -f $current_day, $current_time.ToString("HH:mm"))
Write-Output("GIVEN TIME: {0} from {1} to {2}" -f $target_day, $from_time.ToString("HH:mm"), $to_time.ToString("HH:mm"))

# 先判断星期是否匹配,再处理时间逻辑
if ($current_day -eq $target_day) {
    # 处理跨天时段(结束时间早于起始时间,比如16:00到00:00)
    if ($to_time -lt $from_time) {
        $is_in_window = ($current_time -ge $from_time) -or ($current_time -le $to_time)
    }
    # 同一天的正常时段(比如09:00到18:00)
    else {
        $is_in_window = ($current_time -ge $from_time) -and ($current_time -le $to_time)
    }
}
else {
    # 星期不匹配直接返回False
    $is_in_window = $false
}

# 返回最终结果
return $is_in_window

重点优化说明

  • 用[TimeSpan]来处理时间:它是专门用于时间跨度的类型,可以直接进行准确的数值比较,完全避免字符串比较的歧义。
  • 加入星期匹配判断:确保只有当前是指定的星期时,才会进行时间校验。
  • 区分跨天和同一天的逻辑:跨天时段用-or,同一天用-and,逻辑更准确。
  • 修正了变量名错误:现在调试输出的信息完全正确,方便你验证结果。

内容的提问来源于stack exchange,提问作者Aviv Ben Ezra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:29:04