Powershell
遠端桌面服務上的註銷腳本
我有一個在 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 是什麼,但我確信日誌中有記錄它的內容,但您可能必須啟用日誌記錄。