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
$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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。