บ่อยครั้งผู้ดูแลระบบจำเป็นต้องค้นหาชื่อผู้ใช้ที่เข้าสู่ระบบบนคอมพิวเตอร์ Windows ระยะไกลอย่างรวดเร็ว ในบทความนี้ เราจะแสดงเครื่องมือและสคริปต์ PowerShell บางอย่างที่สามารถช่วยให้คุณได้รับชื่อของผู้ใช้ที่เข้าสู่ระบบบนคอมพิวเตอร์ระยะไกล
สารบัญ:
- ตรวจสอบผู้ใช้ที่เข้าสู่ระบบด้วย PSLoggedOn และ Qwinsta
- จะรับผู้ใช้ปัจจุบันบนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell ได้อย่างไร
- สคริปต์ PowerShell เพื่อค้นหาผู้ใช้ที่เข้าสู่ระบบบนคอมพิวเตอร์ระยะไกล
ตรวจสอบผู้ใช้ที่เข้าสู่ระบบด้วย PSLoggedOn และ Qwinsta
SysInternals PSTools ของ Microsoft มียูทิลิตี้คอนโซลชื่อ 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
เครื่องมือจะส่งคืนรายการเซสชันทั้งหมด (ใช้งานอยู่และถูกตัดการเชื่อมต่อโดยการหมดเวลา RDP) บนเซิร์ฟเวอร์ RDS หรือในเดสก์ท็อปรุ่น Windows 10 (11) (แม้ว่าคุณจะอนุญาตให้มีการเชื่อมต่อ 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 เพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกล ดังนั้นคุณต้องเปิดใช้งานและกำหนดค่า WinRM บนเครื่องเหล่านั้นโดยใช้ GPO หรือคำสั่งต่อไปนี้:
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:How to Add User Information to AD Computer Properties”
หลังจากนั้น คุณไม่จำเป็นต้องสแกนคอมพิวเตอร์ทุกเครื่องเพื่อค้นหาว่าผู้ใช้รายใดเข้าสู่ระบบอยู่ คุณสามารถค้นหาคอมพิวเตอร์ของผู้ใช้โดยใช้แบบสอบถามอย่างง่ายไปยัง 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