當使用者登入時,他們可以輕鬆地使用 quser.exe 查看所有登入的使用者。
我想在不同時間執行一項計劃任務(作為 SYSTEM 運行),並且腳本中的一個函數有可能執行一些可能啟動重新啟動的操作。因此,在該函數運行之前,我需要先檢查是否有使用者登入。
在Win7中,我一直在檢查以下輸出:
quser.exe 2>&1
對於“沒有用戶存在”字串,效果很好。但是在Win10中它不起作用。
當無人登入時,Win10 中相同指令的輸出顯示為空白/空。測試空值似乎是一件有風險的事情,因為空字串有很多可能的錯誤來源,導致使用者遇到意外重新啟動。 我無法使用通知和倒數計時以警告用戶。
是否有任何其他(顯然是自動的)方法來驗證目前沒有使用者登入?
答案1
quser
更好的解決方案似乎是使用(即查詢會話),而不是使用(即查詢使用者)並依賴有效的空返回qwinsta
。
基本上,查詢所有會話,並解析傳回的使用者名稱。在服務或系統下執行的會話沒有使用者名稱。所以在 PowerShell 中:
$qwinstaOut = & "$env:windir\system32\QWinSta.exe"
if (-not $qwinstaOut) {
$UserSessions = "unknown"
} else {
$UserSessions = $qwinstaOut[1..($qwinstaOut.count-1)] | % {$_.substring(19)} | ? {$_ -match "^\w"}
}
# If there are no sessions with a username, this must be running as SYSTEM
if (-not $UserSessions) {
...
如果變數$userSessions
為空,則表示沒有使用者登入。不完美,但更安全。