如何用PowerShell注销用户且无用户时不显示错误
修复后的注销用户PowerShell脚本
以下是可以实现注销其他用户且无用户时不报错的脚本:
# 捕获quser的输出和错误信息 $quserOutput = quser.exe 2>&1 # 检查是否没有用户登录 if ($quserOutput -match 'No User exists') { exit 0 } # 将quser输出解析为CSV格式 $users = $quserOutput | ForEach-Object { $_.Trim(' ', '>') } ` -replace '\s{20,39}', ',,' ` -replace '\s{2,}', ',' | ConvertFrom-Csv # 过滤当前用户并注销其余用户 $users | Where-Object { $_.UserName -ne $env:USERNAME } | ForEach-Object { if ($_.ID) { # 执行注销操作,抑制错误输出 logoff.exe $_.ID 2>&1 | Out-Null } }
关键改进点:
- 直接捕获
quser.exe的标准输出和错误输出,避免依赖try/catch捕获原生程序错误 - 检测到"No User exists"提示时直接正常退出,不抛出错误
- 保留原有解析逻辑处理quser的列格式(包括空会话名的情况)
- 增加实际注销操作(调用
logoff.exe),并抑制注销过程中可能出现的错误(如会话已终止) - 确保不会注销当前登录的用户
注意:运行此脚本需要管理员权限才能注销其他用户。
内容的提问来源于stack exchange,提问作者s.x
相关产品推荐
相关产品推荐

