ユーザーがログインすると、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
が空白の場合、ログインしているユーザーはいません。空白でない場合は、ユーザーがログインしているか、エラーが発生しています。完璧ではありませんが、より安全です。