環境によっては、ここで説明するように、これは地雷原になる可能性があります。
ScriptingGuyの記事
要約すると、 SysInternals Suiteから入手できるPSLoggedOnツールを使用し、返される可能性のあるサービスアカウントを除外するように注意してください。リンク切れを防ぐために、上記のScriptingGuyの記事の使用例を次に示します。
$Computers = @(
, "PC001"
, "PC002"
, "PC003"
, "PC004"
)
Foreach ($Computer in $Computers)
{
[object[]]$sessions = Invoke-Expression ".\PsLoggedon.exe -x -l \\$Computer" |
Where-Object {$_ -match '^\s{2,}((?<domain>\w+)\\(?<user>\S+))|(?<user>\S+)'} |
Select-Object @{
Name='Computer'
Expression={$Computer}
},
@{
Name='Domain'
Expression={$matches.Domain}
},
@{
Name='User'
Expression={$Matches.User}
}
IF ($Sessions.count -ge 1)
{
Write-Host ("{0} Users Logged into {1}" –f $Sessions.count,
$Computer) -ForegroundColor 'Red'
}
Else
{
Write-Host ("{0} can be rebooted!" -f $Computer) `
-ForegroundColor 'Green'
}
}