サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

リモートデスクトップでログインしているか、直接ログインしているかを判別する【Powershell/Windows】

はじめに

 Windows では、PC にログインする際に必ず使うツールを自動的に起動できる機能(スタートアップ)があります。そんなツール群をサポンテは、スタートアップに直接入れるのではなく、スタートアップに入れたバッチから間接的に起動しています1

 その「必ず使うツール」でも、直接ログインしたときには使いたいけれど、リモートデスクトップでログインした場合には起動してほしくないものがあります。ホスト側だけで使えれば良いツールなどです。

 そんなときに「現在のログインが、直接ログインかリモートログインか」を判別する方法はないものかと思っていて、それがあったので共有します。

やりかた

 サーバーにログインしているユーザーを一覧するコマンド query USER があるので、これをローカルホストに対して実行すれば、端末にログインしているユーザーとその状況がわかります。直接ログイン時は「セッション名」が console になっているので、それを正規表現で抜き出して判定しています。リモートログイン時は rdp- なんとかになっていると思います。

スクリプト

 PowerShell です。

$userName = ($env:USERNAME).ToLower()
$pattern = "^\s*" + $userName + "\s*consele"
$queryUser = (query USER /server:127:0:0:1) -As [String[]]
$IsConsoleLaunch = $False
foreach ($line in $queryUser) {
    $line = $line.ToLower()
    if ([regex]::IsMatch($line, $pattern)) {
        $IsConsoleLaunch = $True
    }
}

If ( $IsConsoleLaunch ) {
    Write-Host "直接ログインです。"
} else {
    Write-Host "リモートログインです。"
}

おわりに

複数のセッション同じユーザーがでログインしている場合、うまく行かない可能性がありますのでご注意ください。


  1. 起動の順序やタイミングを制御したいものもあったので。