Wanneer je met Windows werkt, zul je op een gegeven moment waarschijnlijk moeten achterhalen welke gebruikersaccounts momenteel zijn aangemeld op een computer. Gelukkig kun je PowerShell gebruiken om huidige gebruikers op lokale of externe computers te krijgen.
Heb je gecompromitteerde wachtwoorden in je Active Directory? Ontdek het met Specops Password Auditor Free.
In deze tutorial leer je verschillende manieren om PowerShell te gebruiken om huidige gebruikers op een computer te krijgen. De methoden die je leert zullen native commando’s, .NET classes, en Windows Management Instrumentation (WMI) specifieke cmdlets omvatten.
Ben je klaar om uit te vinden wie er op de loer ligt op je computer? Laten we beginnen!
Vereisten
In deze tutorial leer je het best door de voorbeelden te volgen. En om dat te doen, heb je een computer nodig die draait op een moderne versie van Windows, zoals Windows 10, Windows Server 2012, of later.
Deze tutorial zal een computer gebruiken die draait op Windows Server 2019 met de naam DC1.
Waarom PowerShell Gebruiken om Huidige Gebruikers Aangemeld op een Computer te Krijgen?
Toegegeven, er zijn manieren om huidige gebruikers op een computer ingelogd te krijgen zonder PowerShell. Immers, systeembeheerders moesten toch al een manier hebben gehad om dit te doen zelfs vóór PowerShell, toch? Zo ja, waarom PowerShell gebruiken?
Hetzelfde taak uitvoeren in PowerShell heeft als voordeel dat de resultaten worden behandeld als objecten die je kunt manipuleren. Als je bijvoorbeeld een script uitvoert dat vraagt om de gebruikersreferenties, kan PowerShell programmatisch de gebruikersnaam invullen, en hoef je alleen het wachtwoord handmatig in te voeren.
Nog een voorbeeld uit de praktijk is het exporteren van de lijst met momenteel ingelogde gebruikers op een server naar een bestand. Dit gebeurt door PowerShell te gebruiken om de huidige gebruikers op te halen en vervolgens het resultaat te exporteren naar CSV, HTML of XML-bestanden. Daarna kunnen verschillende geautomatiseerde workflows deze uitvoer gebruiken.
Er kunnen duizenden redenen zijn om PowerShell te gebruiken om huidige gebruikers op te halen, maar uiteindelijk komt het allemaal neer op je vereisten. En deze tutorial zal je de verschillende manieren leren om dat doel te bereiken.
Opvragen van de Win32_ComputerSystem-klasse
Laten we beginnen met de PowerShell-native cmdlets genaamd Get-WMIObject
en Get-CimInstance
. Deze cmdlets stellen je in staat informatie op te vragen, inclusief de momenteel ingelogde gebruiker, met behulp van de Windows Management Instrumentation (WMI)-klassen op een lokaal of extern computersysteem.
Get-WMIObject
is de oudere (verouderde) cmdlet en is alleen beschikbaar tot Windows PowerShell 5.1. Daarentegen isGet-CIMInstance
de nieuwere, meer beveiligde cmdlet en is beschikbaar tot de laatste versies van PowerShell.
Om meer te weten te komen, bezoek Get-CIMInstance Vs. Get-WMIObject: Wat is het verschil?
Om PowerShell te gebruiken om de huidige gebruiker op te halen, roep je de cmdlet aan die gericht is op de Win32_ComputerSystem class. De Win32_ComputerSystem class bevat verschillende eigenschappen, waaronder de Username
eigenschap. Doe dit door een PowerShell-venster te openen en de onderstaande commando’s uit te voeren.
Let op: Het bevragen van de Win32_ComputerSystem class zal alleen de gebruikersnaam opleveren van degene die rechtstreeks op de computer is ingelogd (console sessie). Als de gebruiker extern is ingelogd (bijv. Remote Desktop), zal de gebruikersnaam leeg zijn.
Beide commando’s leveren hetzelfde resultaat op, zoals hieronder getoond. Als de huidige gebruiker een domeingebruikersaccount is, zal het commando het domein en de gebruikersnaam teruggeven (domein\gebruikersnaam
). Maar voor een lokaal gebruikersaccount zou de uitvoer computer\gebruikersnaam
zijn.

Get-WMIObject
enGet-CimInstance
hebben een parameter genaamd-computerName
, die de naam van de computer accepteert om te bevragen. Door deze parameter te gebruiken, kunt u dezelfde informatie opvragen vanaf een externe machine in het netwerk.
Maar als u alleen de gebruikersnaam zonder het domein moet krijgen, is een oplossing om de uitvoer te splitsen met behulp van de split()
methode. Voer hiervoor het onderstaande commando uit in PowerShell.
Als gevolg hiervan geeft PowerShell alleen het gebruikersdeel terug, zoals te zien is op de onderstaande screenshot.

Lezen van de Windows Omgevingsvariabelen
Een andere manier om PowerShell te gebruiken om de huidige gebruiker op een computer te krijgen, is door waarden op te halen uit de omgevingsvariabelen. De omgevingsvariabelen vertegenwoordigen de gegevens van het besturingssysteem, inclusief de gebruikersnaam van de huidige gebruiker, onder andere.
Er zijn drie manieren om met de omgevingsvariabelen om te gaan. Welke manier je ook kiest, het zou hetzelfde resultaat opleveren.
De Env PowerShell Drive
PowerShell cached omgevingsvariabelen en maakt ze beschikbaar via een PowerShell Drive (PSDrive) genaamd de Env:
drive. PSDrives zijn gegevenslocaties die je kunt openen als een drive op de computer (bijv. C:), maar zijn alleen toegankelijk binnen PowerShell.
PowerShell maakt automatisch het Env:
-station aan zodra je een PowerShell-sessie opent. En omdat Env:
een station is, kun je de inhoud ervan ophalen door het Get-ChildItem
-cmdlet aan te roepen, vergelijkbaar met hoe je de inhoud van een bestandssysteemstation of map zou weergeven.
Gebruik van het Env:-station in PowerShell, haal de huidige gebruiker op door het onderstaande commando uit te voeren.
De onderstaande schermafbeelding toont het verwachte resultaat. Zoals je kunt zien, retourneert het commando het item USERNAME
en de bijbehorende waarde, die de momenteel aangemelde gebruiker is.

Om alleen de gebruikersnaamwaarde terug te geven, wijzig je het commando zoals hieronder weergegeven en voer je het opnieuw uit in PowerShell.
En zoals je hieronder kunt zien, retourneert het commando alleen de gebruikersnaamwaarde als een string.

De $env-variabele
Naast het benaderen van de omgevingsvariabelen als een PSDrive door ze te behandelen als bestanden op een station, is een andere manier het benaderen van het Env-station als een variabele. Dit betekent dat je de omgevingsvariabelen kunt refereren met de onderstaande syntaxis.
Op basis van de genoemde syntaxis, voer de onderstaande opdracht uit in PowerShell om de huidige gebruiker te krijgen.
Zoals te zien is in de onderstaande schermafbeelding, geeft de opdracht de gebruikersnaam terug.

De .NET Environment Class
PowerShell is een objectgeoriënteerde taal en shell. In feite is alles waaraan je werkt binnen PowerShell een object. Wanneer je een opdracht uitvoert, is de uitvoer een object. Als je een variabele declareert, is die variabele zelf een object. Je begrijpt het idee.
Deze objecten hebben een structuur die het gegevenstype dat ze vertegenwoordigen definieert, vergelijkbaar met blauwdrukken. En deze blauwdrukken worden .NET-klassen of simpelweg klassen genoemd.
Als het gaat om omgevingsvariabelen, is de bijbehorende klasse de Environment-klasse. Hoe gebruik je de Environment-klasse in PowerShell om de huidige gebruiker te krijgen?
Net als de $env
-variabele heeft de Environment-klasse een Username
-eigenschap, waarvan de waarde de gebruikersnaam van de huidige gebruiker is. Voer het onderstaande commando uit in PowerShell om de waarde van de gebruikersnaam op te halen.

Naast de Username
-eigenschap heeft de Environment-klasse ook een methode om de waarde van een omgevingsvariabele op te halen. De naam van de methode is GetEnvironmentVariable
.
Om de huidige gebruiker met deze methode te krijgen, voer het onderstaande commando uit.

Gebruik van de .NET WindowsIdentity-klasse
De klasse WindowsIdentity is nog een andere .NET-klasse die je kunt oproepen in PowerShell om de huidige gebruiker te krijgen. Deze klasse heeft een methode genaamd GetCurrentName
, die een object retourneert dat de huidige Windows-gebruiker voorstelt.
Om de details van de huidige gebruiker te krijgen, voer je onderstaand commando uit.
Zoals je hieronder kunt zien, retourneert het commando de eigenschappen van het huidige gebruikersobject, inclusief de eigenschap Name
. De waarde van de eigenschap Name
volgt het formaat domein\gebruiker
.

Om alleen het gebruikersnaamgedeelte terug te krijgen, pas je het vorige commando aan om alleen de eigenschap Name
te selecteren en de techniek van het splitsen van strings toe te passen. Kopieer hiervoor het onderstaande commando en voer het uit in PowerShell.

Gebruik van het whoami
-commando
Nog een handig commando waarmee je snel de huidige gebruiker kunt krijgen, is het whoami
-commando. Dit commando is een uitvoerbaar bestand dat je kunt vinden in de %WINDIR%\System32-map met de bestandsnaam whoami.exe
.
Om de gebruikersnaam van de huidige gebruiker te krijgen, voer je onderstaand commando uit.
Het commando retourneert vervolgens het resultaat in het formaat domein gebruikersnaam
, zoals te zien is in de onderstaande screenshot.

Om de gebruikersnaam zonder het domein te verkrijgen, pas de eerder geleerde techniek voor string splitsen toe door de onderstaande opdracht uit te voeren.

De opdracht whoami
kan ook de volledige gekwalificeerde onderscheidende naam (FQDN) van de huidige gebruiker en de gebruikersprincipe-naam (UPN) retourneren. en . Deze uitvoer van de opdracht kan handig zijn als je van plan bent een script uit te voeren dat de identiteit van de huidige gebruiker ophaalt, verder dan de gebruikersnaam.
Voer de onderstaande opdracht uit in PowerShell om de FQDN en UPN van de huidige gebruiker te verkrijgen.

Opmerking: De waarden van FQDN en UPN zijn alleen beschikbaar als de momenteel aangemelde gebruiker een domeingebruiker is. Als je deze waarden probeert te verkrijgen voor een lokale gebruiker, zal de opdracht een foutmelding retourneren, zoals hieronder getoond.

Het gebruik van de query
Opdracht
Als je een systeembeheerder of een domeingebruiker bent, is de kans groot dat je minstens één keer via het Remote Desktop Protocol (RDP) op een externe machine bent ingelogd, misschien om resources te beheren of applicaties te gebruiken. Wat de reden ook is, je zou willen weten wie er momenteel is ingelogd en systeembronnen gebruikt.
Gelukkig heeft Windows een ingebouwd command-line hulpprogramma genaamd query
dat alle momenteel aangemelde gebruikers op een computer kan weergeven. Het commando laat ook zien of de gebruiker is aangemeld via een externe desktopsessie of lokaal op de computer.
Het query
-commando heeft twee relevante parameters voor het ophalen van de aangemelde gebruikers; session
en user
. De session
-parameter geeft de computersessies weer, terwijl de user
-parameter de gebruikers en hun sessies weergeeft.
Het
query session
-commando heeft een alias genaamdqwinsta
, terwijl de commando-alias voorquery user
quser
is.
Bijvoorbeeld, voer het onderstaande commando uit om de sessies op DC1 weer te geven.
De onderstaande schermafbeelding toont de uitvoer van de opdracht. In dit voorbeeld hebben twee gebruikers zich aangemeld bij de computer DC1 – één in de console-sessie en een andere via RDP. Zoals je kunt zien, geeft qwinsta
alle sessies terug, zelfs de niet-gebruikerssessies.

Als je
qwinsta
ofquser
alleen uitvoert zonder het argument/server:<computer>
, zal elk van beide commando’s standaard de lokale computer bevragen.
Vervolgens, om alle gebruikers met bestaande aanmeldingssessies op te lijsten, voer je het onderstaande user
-commando uit.
Na het uitvoeren van het commando, zul je meteen merken dat quser
de sessies en gebruikers teruggeeft, net als het qwinsta
-commando. Maar deze keer zijn er geen lege sessies.
Er zijn ook twee extra kolommen: IDLE TIME
, die de inactieve tijd van de gebruikers weergeeft, en LOGON TIME
die de inlogtijd van de gebruikers toont.

Uiteindelijk, bij het vergelijken van de resultaten van qwinsta
en quser
, is quser
het meest geschikte commando in PowerShell om huidige gebruikers op te halen.
Heb je gecompromitteerde wachtwoorden in je Active Directory? Ontdek het met Specops Password Auditor Free.
Conclusie
Terwijl er in PowerShell veel manieren zijn om de huidige ingelogde gebruikers op te halen, hangt de beste methode af van het resultaat dat je wilt verkrijgen en hoe je het zult gebruiken.
De ingebouwde WMI-gerelateerde cmdlets en het query
-commando stellen je in staat om de ingelogde gebruikers op een lokaal of extern computersysteem te verkrijgen. Het gebruik van .NET-klassen en omgevingsvariabelen biedt snelle manieren om dezelfde resultaten op te halen, maar alleen op de lokale computer.
Of je nu van plan bent om een script uit te voeren of de resultaten handmatig op het scherm weer te geven, er is een methode die aan je eisen voldoet om PowerShell te gebruiken om de huidige gebruiker op te halen. Wat is de volgende stap? Misschien leren hoe je de resultaten van het query-commando kunt ontleden en ze kunt omzetten naar PowerShell-objecten door functies te schrijven met behulp van RegEx?
Source:
https://adamtheautomator.com/powershell-get-current-user/