Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

ค่อนข้างบ่อยที่ผู้ดูแลระบบต้องการทราบ username ที่ล็อกอินอยู่บนคอมพิวเตอร์ Windows ระยะไกลอย่างรวดเร็ว ในบทความนี้ เราจะแสดงเครื่องมือและสคริปต์ PowerShell ที่ช่วยให้คุณได้ชื่อผู้ใช้ที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

محتويات:

  • ตรวจสอบผู้ใช้ที่ล็อกอินด้วย PSLoggedOn และ Qwinsta
  • วิธีหา Current User บนคอมพิวเตอร์ระยะไกลด้วย PowerShell
  • สคริปต์ PowerShell เพื่อหาผู้ใช้ที่ล็อกอินบนคอมพิวเตอร์ระยะไกลหลายเครื่อง

ตรวจสอบผู้ใช้ที่ล็อกอินด้วย PSLoggedOn และ Qwinsta

SysInternals PSTools ของ Microsoft รวมยูทิลิตี้คอนโซลชื่อ PSLoggedOn.exe ที่สามารถใช้เพื่อดึงชื่อผู้ใช้ที่ล็อกอินเข้าไปในคอมพิวเตอร์ระยะไกล รวมถึงรายการ SMB sessions ที่เชื่อมต่ออยู่

ดาวน์โหลดเครื่องมือและรัน:

psloggedon \\RemoteCompName

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

ตามที่เห็น เครื่องมือคืนค่าชื่อผู้ใช้ที่ล็อกอินในเครื่อง (Users logged on locally) และรายการผู้ใช้ที่เข้าถึงทรัพยากร SMB ของคอมพิวเตอร์นี้ผ่านเครือข่าย (Users logged on via resource shares)

หากคุณต้องการได้แค่ชื่อผู้ใช้ที่ล็อกอินในเครื่อง ให้ใช้ตัวเลือก -l:

Psloggedon.exe \\pc1215wks1 –l

PSLoggedOn เชื่อมต่อกับ registry และตรวจสอบชื่อผู้ใช้ที่ล็อกอินในเครื่อง ในการทำเช่นนี้ บริการ RemoteRegistry ต้องทำงานอยู่ คุณสามารถรันและกำหนดค่า automatic service startup ด้วย PowerShell:

Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry

คุณยังสามารถดูรายการ sessions บนคอมพิวเตอร์ระยะไกลโดยใช้เครื่องมือในตัว qwinsta เครื่องมือนี้คุ้นเคยสำหรับผู้ดูแลที่จัดการสภาพแวดล้อม Remote Desktop Services (RDS) terminal ในการดูรายการ user sessions ที่ล็อกอินจากคอมพิวเตอร์ระยะไกล ให้รันคำสั่ง:

qwinsta /server:be-rdsh01

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

เครื่องมือคืนค่ารายการ sessions ทั้งหมด (active และ disconnected โดย RDP timeout) บน RDS server หรือ Windows 10 (11) desktop edition (แม้คุณจะอนุญาต multiple RDP connections)

หากคุณได้ Error 5 Access Denied เมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลด้วย qwinsta ให้ตรวจสอบว่า remote host อนุญาตให้จัดการผู้ใช้ระยะไกลผ่าน RPC หากจำเป็น ให้เปิดใช้งานใน registry โดยใช้คำสั่งต่อไปนี้ หรือผ่าน GPO:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f

วิธีหา Current User บนคอมพิวเตอร์ระยะไกลด้วย PowerShell

คุณสามารถดูชื่อผู้ใช้ที่ล็อกอินอยู่บนคอมพิวเตอร์ได้โดยใช้คลาส WMI Win32_ComputerSystem เปิดคอนโซล PowerShell และรันคำสั่ง:

Get-WmiObject -class Win32_ComputerSystem | Format-List Username

คำสั่งคืนค่าชื่อผู้ใช้ที่ล็อกอินอยู่บนคอมพิวเตอร์

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

คอมมานด์เลต Get-WmiObject มีตัวเลือก –ComputerName ที่คุณสามารถใช้เพื่อเข้าถึง WMI objects บนคอมพิวเตอร์ระยะไกล คำสั่งต่อไปนี้จะคืนค่า username ที่ล็อกอินจากคอมพิวเตอร์ระยะไกล:

(Get-WmiObject -class Win32_ComputerSystem –ComputerName pc1215wks1).Username

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

คำสั่งแสดงเฉพาะผู้ใช้ที่ล็อกอินที่คอนโซล (ไม่ใช่ผ่าน RDP)

คุณยังสามารถใช้ PSRemoting เพื่อดึงข้อมูลจากคอมพิวเตอร์ระยะไกลด้วยคอมมานด์เลต Invoke-Command

คุณสามารถดู username เฉพาะบนคอมพิวเตอร์ระยะไกล (ไม่รวมโดเมน) ใช้คำสั่งเหล่านี้:

$userinfo = Get-WmiObject -ComputerName pc1215wks1 -Class Win32_ComputerSystem
$user = $userinfo.UserName -split '\\'
$user[1]

ใน PowerShell Core (pwsh.exe) เวอร์ชันใหม่ คุณต้องใช้คอมมานด์เลต Get-CimInstance แทน Get-WmiObject:

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 เพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกล ดังนั้นคุณต้องเปิดใช้งานและกำหนดค่า WinRM บนพวกมันโดยใช้ GPO หรือคำสั่งต่อไปนี้:

WinRM quickconfig

สคริปต์ PowerShell เพื่อหาผู้ใช้ที่ล็อกอินบนคอมพิวเตอร์ระยะไกลหลายเครื่อง

หากคุณต้องการรวบรวมข้อมูลเกี่ยวกับผู้ใช้ที่ล็อกอินจากหลายคอมพิวเตอร์ คุณสามารถใช้ฟังก์ชัน PowerShell ต่อไปนี้เพื่อดึง username

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 } } 

ระบุชื่อคอมพิวเตอร์ที่คุณต้องการตรวจสอบ username ด้วย Get-LoggedUser:

Get-LoggedUser pc1215wks1,pc1215wks2,mun-dc01

ค้นหาผู้ใช้ปัจจุบันที่ล็อกอินอยู่บนคอมพิวเตอร์ระยะไกล

หากฟังก์ชันคืนค่า username ว่างสำหรับคอมพิวเตอร์ หมายความว่าไม่มีใครล็อกอินอยู่

คุณสามารถดูชื่อผู้ใช้ที่ล็อกอินอยู่บนคอมพิวเตอร์ในโดเมน Active Directory ใช้คอมมานด์เลต Get-ADComputer เพื่อดึงรายการคอมพิวเตอร์ในโดเมน ในตัวอย่างด้านล่าง เราจะดึง username ที่ล็อกอินบนคอมพิวเตอร์ที่ active ใน OU ของโดเมนเฉพาะ เพื่อให้สคริปต์ทำงานเร็วขึ้น ก่อนเข้าถึงคอมพิวเตอร์ระยะไกล ผมเพิ่มการตรวจสอบความพร้อมใช้งานด้วย ICMP ping และคอมมานด์เลต Test-NetConnection:

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 ได้ ในการทำเช่นนั้น คุณสามารถใช้ logon script ที่อธิบายในบทความ “Set-ADComputer: How to Add User Information to AD Computer Properties”

หลังจากนั้น คุณไม่จำเป็นต้องสแกนคอมพิวเตอร์ทั้งหมดเพื่อหาว่าผู้ใช้เฉพาะล็อกอินอยู่ที่ไหน คุณสามารถหาคอมพิวเตอร์ของผู้ใช้ได้โดยใช้ query ง่ายๆ ไปยัง 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