Powershell

遠端桌面服務上的註銷腳本

  • March 5, 2021

我有一個在 Server 2012 R2 上執行的遠端桌面服務。我的超時設置已設置為在斷開連接後 60 分鐘結束會話。這對除一個使用者之外的所有使用者都有好處:該使用者的會話必須在他斷開連接後立即結束。我無法創建另一個集合,因為我沒有第二個會話主機。

我決定創建一個超級簡單的批處理文件,它將強制使用者註銷,如下所示:

@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”即可完成完全相同的工作,而無需複雜的權限。

您不能將其添加到具有提升權限的任務計劃程序中,然後在需要時執行它嗎?使用當使用者與術語服務斷開連接時觸發的事件 ID 來執行您的腳本。這應該在他們斷開連接後執行,並且因為您可以為任務提供管理員憑據,所以它應該在不觸發 UAC 提示的情況下執行。

不確定該事件 ID 是什麼,但我確信日誌中有記錄它的內容,但您可能必須啟用日誌記錄。

引用自:https://serverfault.com/questions/659535