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
相关产品推荐
相关产品推荐

