종종 관리자는 원격 Windows 컴퓨터에 로그온한 사용자 이름을 빠르게 찾아야 합니다. 이 기사에서는 원격 컴퓨터에 로그온한 사용자의 이름을 가져오는 데 도움이 되는 몇 가지 도구와 PowerShell 스크립트를 보여줍니다.
내용:
- PSLoggedOn 및 Qwinsta로 로그인한 사용자 확인
- PowerShell을 사용하여 원격 컴퓨터의 현재 사용자를 가져오는 방법
- 원격 컴퓨터에서 로그온한 사용자를 찾기 위한 PowerShell 스크립트
PSLoggedOn 및 Qwinsta로 로그인한 사용자 확인
Microsoft의 SysInternals PSTools에는 PSLoggedOn.exe라는 콘솔 유틸리티가 포함되어 있습니다. 원격 컴퓨터에 로그인한 사용자의 이름과 여기에 연결된 SMB 세션 목록을 가져오는 데 사용할 수 있습니다.
도구를 다운로드하고 실행하십시오:
psloggedon \\RemoteCompName
보시다시피 도구는 로그온한 사용자(로컬로 로그온한 사용자 ) 및 네트워크를 통해 이 컴퓨터의 SMB 리소스에 액세스하는 사용자 목록(리소스 공유를 통해 로그온한 사용자 ).
로컬로 로그온한 사용자의 이름만 가져오려면 -l을 사용합니다. 옵션:
Psloggedon.exe \\pc1215wks1 –l
PSLoggedOn은 레지스트리에 연결하고 로컬로 로그온한 사용자의 이름을 확인합니다. 이를 위해 RemoteRegistry 서비스가 실행 중이어야 합니다. PowerShell을 사용하여 자동 서비스 시작을 실행하고 구성할 수 있습니다.
Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry
내장된 qwinsta
를 사용하여 원격 컴퓨터의 세션 목록을 가져올 수도 있습니다. 도구. 이 도구는 RDS(원격 데스크톱 서비스) 터미널 환경을 관리하는 모든 관리자에게 익숙해야 합니다. 원격 컴퓨터에서 기록된 사용자 세션 목록을 가져오려면 다음 명령을 실행하십시오.
qwinsta /server:be-rdsh01
이 도구는 RDS 서버 또는 데스크톱 Windows 10(11) 에디션(여러 RDP 연결을 허용한 경우에도)의 모든 세션(활성 및 RDP 시간 초과로 연결 해제) 목록을 반환합니다.
오류 5 액세스 거부가 표시되는 경우 qwinsta를 사용하여 원격 서버에 연결하려고 할 때 원격 호스트가 RPC를 통해 사용자를 원격으로 관리할 수 있는지 확인하십시오. 필요한 경우 다음 명령을 사용하거나 GPO를 사용하여 레지스트리에서 활성화합니다.
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f
PowerShell을 사용하여 원격 컴퓨터에서 현재 사용자를 가져오는 방법
Win32_ComputerSystem을 사용하여 컴퓨터에 로그온한 사용자의 이름을 얻을 수 있습니다. WMI 클래스. PowerShell 콘솔을 열고 다음 명령을 실행합니다.
Get-WmiObject -class Win32_ComputerSystem | Format-List Username
이 명령은 컴퓨터에 로그온한 사용자의 이름을 반환합니다.
Get-WmiObject cmdlet에는 –ComputerName이 있습니다. 원격 컴퓨터의 WMI 개체에 액세스하는 데 사용할 수 있는 옵션입니다. 다음 명령은 원격 컴퓨터에서 로그인한 사용자 이름을 반환합니다.
(Get-WmiObject -class Win32_ComputerSystem –ComputerName pc1215wks1).Username
이 명령은 콘솔에 로그온한 사용자만 표시합니다(RDP를 통하지 않음).
PSRemoting을 사용하여 Invoke-Command cmdlet으로 원격 컴퓨터에서 정보를 가져올 수도 있습니다.원격 컴퓨터(도메인 없이)에서 사용자 이름만 가져올 수 있습니다. 다음 명령을 사용하십시오.
$userinfo = Get-WmiObject -ComputerName pc1215wks1 -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\\'
$user[1]
Get-CimInstance –ComputerName pc1215wks1 –ClassName Win32_ComputerSystem | Select-Object UserName
또는:
(Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem).CimInstanceProperties | where{$_.Name -like "UserName"}| select value
GetCiminstance는 WinRM을 사용하여 원격 컴퓨터에 연결하므로 GPO 또는 다음 명령을 사용하여 원격 컴퓨터에서 WinRM을 활성화하고 구성해야 합니다.
WinRM quickconfig
원격 컴퓨터에서 로그온한 사용자를 찾기 위한 PowerShell 스크립트
여러 컴퓨터에서 로그인한 사용자에 대한 정보를 수집하려면 다음 PowerShell 기능을 사용하여 사용자 이름을 가져올 수 있습니다.
function Get-LoggedUser { [CmdletBinding()] param ( [string[]]$ComputerName ) foreach ($comp in $ComputerName) { $output = @{'Computer' = $comp } $output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName [PSCustomObject]$output } }
Get-LoggedUser를 사용하여 사용자 이름을 확인하려는 컴퓨터의 이름을 지정하십시오:
Get-LoggedUser pc1215wks1,pc1215wks2,mun-dc01
함수가 컴퓨터에 대해 빈 사용자 이름을 반환하면 아무도 로그온하지 않았음을 의미합니다.
Active Directory 도메인의 컴퓨터에 로그온한 사용자의 이름을 가져올 수 있습니다. Get-ADComputer cmdlet을 사용하여 도메인의 컴퓨터 목록을 가져옵니다. 아래 예에서는 특정 도메인 OU의 활성 컴퓨터에 로그온한 사용자 이름을 가져옵니다. 원격 컴퓨터에 액세스하기 전에 스크립트가 더 빠르게 작동하도록 하기 위해 ICMP ping 및 Test-NetConnection cmdlet을 사용하여 스크립트의 가용성 확인을 추가했습니다.
function Get-LoggedUser { [CmdletBinding()] param ( [string[]]$ComputerName ) foreach ($comp in $ComputerName) { if ((Test-NetConnection $comp -WarningAction SilentlyContinue).PingSucceeded -eq $true) { $output = @{'Computer' = $comp } $output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName } else { $output = @{'Computer' = $comp } $output.UserName = "offline" } [PSCustomObject]$output } } $computers = (Get-AdComputer -Filter {enabled -eq "true"} -SearchBase 'OU=Berlin,DC=woshub,DC=com').Name Get-LoggedUser $computers |ft -AutoSize
또한 로그온한 사용자의 이름을 AD의 컴퓨터 속성에 저장할 수 있습니다. 이를 수행하려면 "Set-ADComputer:AD 컴퓨터 속성에 사용자 정보를 추가하는 방법" 문서에 설명된 로그온 스크립트를 사용할 수 있습니다.
그 후에는 특정 사용자가 로그온한 위치를 찾기 위해 모든 컴퓨터를 검색할 필요가 없습니다. Active Directory에 대한 간단한 쿼리를 사용하여 사용자 컴퓨터를 찾을 수 있습니다.
$user='m.smith'
선택
$user_cn=(Get-ADuser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft