Win10でログインしているユーザーがいないかどうかをテストする方法

Win10でログインしているユーザーがいないかどうかをテストする方法

ユーザーがログインすると、quser.exe を使用してログインしているすべてのユーザーを簡単に確認できます。

スケジュールされたタスク (SYSTEM として実行) をさまざまな時間に実行したいのですが、スクリプト内の 1 つの関数は、再起動を開始する可能性のある操作を実行する可能性があります。したがって、その関数を実行する前に、まずユーザーがログインしているかどうかを確認する必要があります。

Win7では、次の出力を確認しています:

quser.exe 2>&1

「ユーザーが存在しません」という文字列を検索すると、うまく動作します。ただし、Win10 では動作しません。

誰もログインしていないときに Win10 で同じコマンドを実行すると、出力は空白になります。空の文字列には多くのエラーの原因があり、予期しない再起動をユーザーに経験させることになる可能性があるため、空の値はテストするにはリスクが高いと思われます。 通知とカウントダウンが使えないユーザーに警告します。

現在ログインしているユーザーがいないことを確認する他の方法(明らかに自動化された方法)はありますか?

答え1

(つまり、ユーザーのクエリ)を使用して有効な空の戻り値に依存するのではなく、 (つまり、セッションのクエリ) を使用する方quserがよい解決策のようです。qwinsta

基本的に、すべてのセッションをクエリし、返されたユーザー名を解析します。サービスまたは SYSTEM で実行されているセッションにはユーザー名がありません。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が空白の場合、ログインしているユーザーはいません。空白でない場合は、ユーザーがログインしているか、エラーが発生しています。完璧ではありませんが、より安全です。

関連情報