Server 2012R2でリモートデスクトップサービスを実行しています。タイムアウト設定は、切断後60分でセッションを終了するように設定されています。これは、1人を除くすべてのユーザーに適しています。そのユーザーのセッションは、切断されたらすぐに終了する必要があります。 2番目のセッションホストがないため、別のコレクションを作成できません。
次のように、ユーザーにログオフを強制する非常に単純なバッチファイルを作成することにしました。
@ECHO off
logoff f
これには、何らかの理由で管理者権限が必要であり、昇格プロンプトが表示されます。したがって、現時点では問題外です。
次に、次のようなPowerShellスクリプトを作成しました。
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
import-module RemoteDesktop
$name = [Environment]::Username
$session = get-rdusersession | Where-Object -Filter {$_.username -eq $name}
Invoke-RDUserLogoff -UnifiedSessionID $session.SessionID -HostServer $session.HostServer -Force
繰り返しますが、これには管理者権限が必要であり、機能しません。管理者には機能しますが、通常のユーザーには機能しません。
誰かが私がこれをどのように達成できるか考えていますか?
思ったよりずっと簡単でした。 sys32で「logoff.exe」を使用して公開するだけで、権限を複雑にすることなく、まったく同じ作業を実行できます。
これを昇格された特権を持つタスクスケジューラに追加し、必要に応じて実行できませんでしたか?ユーザーがTermサービスから切断したときにトリガーされるイベントIDを使用して、スクリプトを実行します。これは、切断後に実行され、タスクに管理者の資格情報を提供できるため、UACプロンプトをトリガーせずに実行する必要があります。
そのイベントIDが何であるかはわかりませんが、ログにそれを記録するものがあると確信していますが、ロギングを有効にする必要がある場合があります。