PowerShell에서 원격 세션 로그오프

Marion Paul Kenneth Mendoza 2022년6월21일
PowerShell에서 원격 세션 로그오프

조직의 관리자로서 특정 서버나 워크스테이션의 성능 저하가 발생할 수 있는 작업장에서 흔히 발생하는 문제입니다.

이 상황은 일반적으로 특히 공유 워크스테이션인 경우 여러 사용자가 원격으로 시스템에 연결하기 때문에 발생합니다. 그러나 원격으로 연결하는 대부분의 사용자는 제대로 로그오프하지 않고 원격 데스크톱 연결 또는 RDP에서 닫기 버튼을 누르기만 하면 됩니다.

사용자가 컴퓨터에서 제대로 로그오프하지 않으면 프로필이 활성 상태로 유지되고 리소스를 차지합니다. 관리자는 로그오프 작업을 수행하여 이 문제를 해결할 수 있습니다.

이 문서에서는 명령줄과 PowerShell을 사용하여 원격 사용자를 로그오프하는 방법에 대해 설명합니다.

PowerShell에서 원격 세션 로그오프

원격 세션을 프로그래밍 방식으로 로그오프하는 것은 쉽습니다. 그러나 이 사용 사례에서는 기본 제공 PowerShell 명령 모듈 대신 레거시 명령을 사용하는 것이 좋습니다.

예를 들어 PowerShell 모듈 Invoke-RDUserLogoff 명령에는 도메인에 가입된 컴퓨터 및 운영 체제 Windows Server 2012 R2 또는 8.1 이하에서만 실행되는 것과 같은 제한 사항이 있습니다.

지금은 원격 사용자를 로그오프하는 몇 가지 레거시 명령에 초점을 맞추겠습니다. 이 명령은 오늘날까지 여전히 널리 사용됩니다.

logoff 명령

logoff 명령은 로컬 또는 원격 서버 또는 워크스테이션에서 사용자의 현재 세션을 종료합니다. 아래 코드로 help 명령을 실행하면 logoff cmdlet이 세션 이름이나 ID, 서버 이름과 같은 몇 가지 매개변수를 사용하는 것을 볼 수 있습니다. 둘 다 중요합니다.

예제 코드:

logoff /?

출력:

LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]

대상 서버를 이미 알고 있는 경우 해당 시스템의 현재 세션을 어떻게 알 수 있습니까? 이제 쿼리 사용자 명령 또는 quser를 사용합니다.

quuser 명령을 사용하여 사용자 세션 쿼리

지금은 아래 코드 조각을 사용하여 로컬 컴퓨터에서 quser를 실행해 보십시오.

예제 코드:

quser

출력:

USERNAME              SESSION NAME        ID  STATE   IDLE TIME  LOGON TIME
>marion               console             1  Active      none   6/10/2022 5:56 AM

quser 명령을 실행하면 컴퓨터의 현재 세션이 모두 표시됩니다. 그러나 실제로 해당 서버에 로그인하지 않고 원격 서버에서 특정 사용자의 세션 ID를 어떻게 격리할 수 있습니까?

원격 컴퓨터를 대상으로 하는 동안 quser 명령을 로컬로 실행할 수 있음을 기억하십시오. 컴퓨터에 원격으로 연결할 수 있는 권한이 있는 관리자 계정만 있으면 됩니다.

이 시점부터 Windows PowerShell이 ​​필요합니다.

-split과 같은 문자열 작업을 수행하려면 아래 스니펫에 PowerShell이 ​​필요합니다. 또한 아래 출력은 logoff 명령에 대한 매개변수로 필요한 사용자의 세션 ID를 표시합니다.

예제 코드:

((quser /server:RDP01 | ? { $_ -match "marion" }) -split ' +')[3]

출력:

1

quserlogoff와 같은 레거시 명령을 PowerShell에서 실행할 수 있다는 점은 주목할 가치가 있습니다. 따라서 이제부터는 명령 프롬프트 대신 PowerShell 터미널을 인터프리터로 사용합니다.

quuserlogoff 명령을 사용하여 사용자 로그오프

컴퓨터에서 원격 세션을 설정하지 않고 사용자의 세션 ID를 얻는 방법을 알았으므로 이제 PowerShell 내에서 모든 명령을 결합할 수 있습니다. 예를 들어 아래 코드 스니펫을 따를 수 있습니다.

Set-Alias Query-User quser
Set-Alias Logoff-User logoff

$serverName   = 'RDP01'
$userName = 'marion'

$sessionID = ((Query-User /server:$serverName | ? { $_ -match $userName }) -split ' +')[3]

Logoff-User $sessionID /server:$serverName

보시다시피 quserlogoff 명령에 대한 새 별칭을 만들었습니다. 이 단계는 선택 사항이지만 동사-명사 명령 형식을 사용하여 PowerShell 스크립팅에 더욱 몰두하기 위해 이 작업을 수행했습니다.

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn