LoginSignup
2
2

リモートデスクトップで追い出しを避ける方法

Last updated at Posted at 2024-05-26

共有アカウントでRDPしていると他人を追い出す/追い出される・・・

Windowsのリモートデスクトップ(RDP)をする際に同じアカウントを利用している場合、
後から入った人が先に入っていた人を弾いてしまう。といった経験があると思います。

今回はそういったことが起こらないよう、
バッチとPowerShellを使ってRDPの追い出しを防止する仕組みを実現します。

↓まずはのようにbatとps1を同じフォルダに作ってください
(batの名前はなんでもよいです、文字コードをANSIにしないと文字化けするかも)
image.png


bat内の「My_Computername」変数に接続したいホスト名を記入して下さい
aaa.bat
@echo off
cls

rem 接続したいホスト名を設定
set My_Computername=ComputerAAAAA

PowerShell -ExecutionPolicy Bypass -File "%~dp0リモート接追い出し防止.ps1" %My_Computername%

ps1の方は何も弄らなくていいです
リモート接追い出し防止.ps1

# 変数の初期化
Remove-Variable -Name * -ErrorAction SilentlyContinue
Clear-Host

# 引数の取得
$MyHostname = $args[0]
$MyMode     = $args[1]
$MyPID      = $args[2]

# 観察モードでない場合の処理
if ($MyMode -ne "observation") {
    # ホスト名に一致するファイルの検索
    $MyHostnameFile = Get-ChildItem $PSScriptRoot -ErrorAction SilentlyContinue -Exclude "*.bat" | Where-Object { $_.Name -match $MyHostname }
    
    if ($MyHostnameFile) {
        # ログインユーザーの取得
        $LoginUser = Get-Content $MyHostnameFile.FullName
        Write-Host "既に $LoginUser さんがログオンしています"
        Write-Host "$LoginUser さんに連絡を取るか、5分後に再度お試しください。`r`n"
        Pause
        Exit
    }

    # ログインユーザー名をファイルに保存
    $env:USERNAME | Out-File "$PSScriptRoot\$MyHostname.txt"
    "$(Get-Date)$env:USERNAME$MyHostname へのリモートデスクトップ接続を開始しました" | Out-File "$PSScriptRoot\RDPlogs.log" -Append

    # mstsc.exe を起動
    $MyProcess = Start-Process mstsc.exe -ArgumentList " -v $MyHostname" -PassThru
    
    # PowerShellスクリプトを観察モードで再度起動
    Start-Process PowerShell -ArgumentList "-File `"$PSCommandPath`" $MyHostname `"observation`" $($MyProcess.Id)" -WindowStyle Hidden
    Exit
}

# 観察モードの処理
while ($true) {
    if (-not (Get-Process | Where-Object { $_.Id -eq $MyPID })) {
        "$(Get-Date)$env:USERNAME$MyHostname へのリモートデスクトップ接続を終了しました" | Out-File "$PSScriptRoot\RDPlogs.log" -Append
        Remove-Item "$PSScriptRoot\$MyHostname.txt"
        Exit
    }
    Start-Sleep 1
}

~仕組み~

batを起動するとRDPの画面が表示されます
image.png

RDPすると「My_Computername」変数に設定したホスト名のファイルが作成されます
image.png

中には実行したユーザー名が記載されています
image.png

テキストファイルがある場合は、batを起動してもRDPできません。
image.png

RDPが終了するとtxtファイルが自動的に削除されます。
image.png

「RDPlogs.log」ファイルには接続ログが記録されます
image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2