एक एडमिनिस्ट्रेटर को अक्सर रिमोट Windows कंप्यूटर पर लॉग ऑन उपयोगकर्ता का उपयोगकर्ता नाम जल्दी से जानने की आवश्यकता होती है। इस लेख में, हम कुछ टूल्स और PowerShell स्क्रिप्ट्स दिखाएंगे जो रिमोट कंप्यूटर पर लॉग ऑन उपयोगकर्ताओं के नाम प्राप्त करने में आपकी मदद कर सकते हैं।
PSLoggedOn और Qwinsta के साथ लॉग इन उपयोगकर्ताओं की जांच करें
Microsoft के SysInternals PSTools में PSLoggedOn.exe नामक एक कंसोल यूटिलिटी शामिल है जिसका उपयोग रिमोट कंप्यूटर पर लॉग ऑन उपयोगकर्ता का नाम प्राप्त करने के साथ-साथ उससे जुड़े SMB सत्रों की सूची के लिए किया जा सकता है।
टूल डाउनलोड करें और चलाएं:
psloggedon \\RemoteCompName

जैसा कि आप देख सकते हैं, टूल ने स्थानीय रूप से लॉग ऑन उपयोगकर्ता का नाम लौटाया (Users logged on locally) और इस कंप्यूटर के SMB रिसोर्सेज को नेटवर्क पर एक्सेस करने वाले उपयोगकर्ताओं की सूची (Users logged on via resource shares)।
यदि आप केवल स्थानीय रूप से लॉग ऑन उपयोगकर्ता का नाम प्राप्त करना चाहते हैं, तो -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 कनेक्शन्स की अनुमति दी हो)।
यदि qwinsta का उपयोग करके रिमोट सर्वर से कनेक्ट करने का प्रयास करते समय Error 5 Access Denied प्राप्त होता है, तो सुनिश्चित करें कि रिमोट होस्ट को 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]
आधुनिक PowerShell Core (pwsh.exe) संस्करणों में, आपको Get-WmiObject के बजाय Get-CimInstance cmdlet का उपयोग करना होगा:
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 पिंग और 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