2021/06/17

ログオン中のユーザー数(0を含む)を取得する PowerShell スクリプト

 Windows Admin Center の Get-NumberOfLoggedOnUsers ファンクションはバグってますが(→ Windows Admin Center の残念な 2つのバグ )、ちゃんと動けば便利だと思い、ちゃんと動くように書き換えてみました。

注:Windows Admin Center のを修正するものではありません。(C:\Program Files\Windows Admin Center\UX.zip の中に入ってるし、コード署名もあるし、勝手に修正不可能)

Get-NumberOfLoggedOnUsers を自分の PowerShell スクリプトに埋め込んで、(Get-NumberOfLoggedOnUsers).Count すれば 0 (ログオン中のユーザーなし)、ログオン中のユーザーの数を取得できます。例えば、タスクスケジューラでログオン中のユーザーがいないときにタスクを実行させたいときなどに応用できるかと。太字部分が手を入れたとこ。

function Get-NumberOfLoggedOnUsers{
$count = 0
$error.Clear();

# Use Process class to hide exe prompt when executing
$process = New-Object System.Diagnostics.Process
$process.StartInfo.FileName = "quser.exe"
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.CreateNoWindow = $true
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.RedirectStandardError = $true
$process.Start() | Out-Null

$result = @()
while (($line = $process.StandardOutput.ReadLine()) -ne $null) {
  if($line.Contains("Active")){
    $result += $line
  }
}

if ([string]::isNullOrEmpty($process.StandardError.ReadToEnd()))
{
    # quser does not return a valid ps object and includes the header.
    # subtract 1 to get actual count.
    $count = $result.count
}

$process.WaitForExit()
$process.Dispose()


@{Count = $count}
}

(Get-NumberOfLoggedOnUsers).Count

Hyper-V の PowerShell Direct で動作確認。

ログオン中のユーザーがいないとき。


1 人以上のログオン中のユーザーがいるとき(下は 2 ユーザー)。Windows Admin Center のように標準出力-ヘッダー行(英語1行だけど日本語2行)で取得するのではなく、単純に”Active”の行だけカウント。


 


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。