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

PowerShell脚本报错:找不到op_Subtraction重载(参数数2),求解决

问题分析与修复

你的脚本报错的核心原因有两个:

  • 错误的空值判断:$lastInput.LastInputTime是无效的属性调用,$lastInput本身就是LastInputTime的返回值(DateTime类型),不存在子属性LastInputTime,这会导致判断逻辑完全错误。
  • 时间类型不匹配:[System.Windows.Forms.SystemInformation]::LastInputTime返回的是UTC时间,而Get-Date默认返回本地时间,直接相减会引发类型重载错误,同时计算结果也会有偏差。

修正后的脚本

Add-Type -AssemblyName System.Windows.Forms

while ($true) {
    # 获取当前UTC时间,和LastInputTime的时区保持一致
    $currentUtcDate = (Get-Date).ToUniversalTime()
    $lastInputUtc = [System.Windows.Forms.SystemInformation]::LastInputTime

    # 检查LastInputTime是否为有效时间(排除默认的最小时间值)
    if ($lastInputUtc -eq [DateTime]::MinValue) {
        Write-Host "无法获取用户上次输入时间"
    }
    else {
        $idleTime = $currentUtcDate - $lastInputUtc
        if ($idleTime.TotalMinutes -gt 10) {
            Write-Host "用户已空闲超过10分钟。"
            # 这里执行你的操作(比如锁定工作站:rundll32.exe user32.dll,LockWorkStation)
            break
        }
    }
    Start-Sleep -Seconds 60
}

关键修改点

  • 统一使用UTC时间计算,避免时区差异导致的类型和数值错误。
  • 替换错误的空值判断为检查LastInputTime是否等于DateTime.MinValue(这是该属性无法获取有效时间时的返回值)。
  • 移除了无效的$lastInput.LastInputTime调用,修正判断逻辑。

内容的提问来源于stack exchange,提问作者FoxCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:12:41