Quando lavori con Windows, a un certo punto, probabilmente dovrai scoprire quali account utente sono attualmente collegati a un computer. Fortunatamente, puoi utilizzare PowerShell per ottenere gli utenti attuali su computer locali o remoti.
Hai password compromesse nel tuo Active Directory? Scoprilo con Specops Password Auditor Free.
In questo tutorial, imparerai diversi modi per utilizzare PowerShell per ottenere gli utenti attuali su un computer. I metodi che imparerai includeranno comandi nativi, classi .NET e cmdlet specifici di Gestione Windows (WMI).
Sei pronto a scoprire chi si nasconde sul tuo computer? Iniziamo!
Prerequisiti
In questo tutorial, imparerai meglio seguendo gli esempi. E per farlo, avrai bisogno di un computer che esegua una qualsiasi versione moderna di Windows, come Windows 10, Windows Server 2012 o successivi.
Questo tutorial utilizzerà un computer che esegue Windows Server 2019 chiamato DC1.
Perché usare PowerShell per ottenere gli utenti attualmente collegati a un computer?
Ammettiamolo, ci sono modi per accedere agli utenti attualmente connessi a un computer senza PowerShell. Dopotutto, gli amministratori di sistema dovevano averne uno anche prima di PowerShell, giusto? Se così fosse, perché usare PowerShell?
Eseguire lo stesso compito in PowerShell offre vantaggi nel trattare i risultati come oggetti che è possibile manipolare. Ad esempio, se si esegue uno script che richiede le credenziali dell’utente, PowerShell può popolare in modo programmato il nome utente, e sarà necessario digitare manualmente solo la password.
Un altro esempio del mondo reale è l’esportazione dell’elenco degli utenti attualmente connessi a un server in un file. Si tratta di utilizzare PowerShell per ottenere gli utenti attuali e quindi esportare il risultato in file CSV, HTML o XML. Successivamente, vari flussi di lavoro di automazione possono utilizzare questo output.
Potrebbero esserci migliaia di motivi per utilizzare PowerShell per ottenere gli utenti attuali, ma alla fine tutto si riduce ai tuoi requisiti. E questo tutorial ti insegnerà i diversi modi per raggiungere tale obiettivo.
Interrogare la classe Win32_ComputerSystem
Iniziamo con i cmdlet nativi di PowerShell chiamati Get-WMIObject
e Get-CimInstance
. Questi cmdlet ti consentono di interrogare le informazioni, inclusi gli utenti attualmente connessi, utilizzando le classi Windows Management Instrumentation (WMI) su un computer locale o remoto.
Get-WMIObject
è il cmdlet più vecchio (deprecato) e è disponibile solo fino a Windows PowerShell 5.1. Al contrario,Get-CIMInstance
è il cmdlet più recente e sicuro ed è disponibile fino alle ultime versioni di PowerShell.
Per saperne di più, visita Get-CIMInstance Vs. Get-WMIObject: Qual è la differenza?
Per utilizzare PowerShell per ottenere l’utente corrente, esegui uno dei cmdlet mirati alla classe Win32_ComputerSystem. La classe Win32_ComputerSystem include varie proprietà, tra cui la proprietà Username
. Per farlo, apri una finestra di PowerShell e esegui i comandi qui sotto.
Nota: Interrogare la classe Win32_ComputerSystem restituirà solo il nome utente di chi è collegato direttamente al computer (sessione console). Se l’utente ha effettuato l’accesso in remoto (ad esempio, Desktop remoto), il nome utente sarà vuoto.
Entrambi i comandi restituiscono lo stesso risultato, come mostrato di seguito. Se l’utente corrente è un account utente di dominio, il comando restituirà il dominio e il nome utente (dominio\nomeutente
). Ma per un account utente locale, l’output sarebbe computer\nomeutente
.

Get-WMIObject
eGet-CimInstance
hanno un parametro chiamato-computerName
, che accetta il nome del computer da interrogare. Utilizzare questo parametro significa che è possibile interrogare le stesse informazioni da una macchina remota nella rete.
Ma se hai bisogno di ottenere solo il nome utente senza il dominio, una soluzione è suddividere l’output utilizzando il split()
metodo. Per farlo, esegui il comando seguente in PowerShell.
Come risultato, PowerShell restituisce solo la parte utente, come nella schermata sottostante.

Leggere le variabili d’ambiente di Windows
Un altro modo per utilizzare PowerShell per ottenere l’utente attuale su un computer è recuperando i valori dalle variabili d’ambiente. Le variabili d’ambiente rappresentano i dati del sistema operativo, inclusi l’username dell’utente attuale, tra gli altri.
Ci sono tre modi per interagire con le variabili d’ambiente. Qualunque metodo si scelga restituirà lo stesso risultato.
Il Drive Env di PowerShell
PowerShell memorizza in cache le variabili d’ambiente e le rende disponibili attraverso un Drive PowerShell (PSDrive) chiamato drive Env:
. I PSDrives sono luoghi di dati a cui è possibile accedere come un drive sul computer (ad es. C:), ma sono accessibili solo all’interno di PowerShell.
PowerShell crea automaticamente il drive Env:
non appena si apre una sessione PowerShell. E poiché Env:
è un drive, è possibile ottenere i suoi contenuti invocando il cmdlet Get-ChildItem
, simile a come si elencano i contenuti di un drive o di una cartella del file system.
Utilizzando il drive Env: In PowerShell, ottenere l’utente corrente eseguendo il comando seguente.
Lo screenshot qui sotto mostra il risultato atteso. Come si può vedere, il comando restituisce l’elemento USERNAME
e il relativo valore, che è l’utente attualmente connesso.

Per restituire solo il valore dell’username, modificare il comando come mostrato di seguito e eseguirlo nuovamente in PowerShell.
E come si può vedere di seguito, il comando restituisce solo il valore dell’username come stringa.

La variabile $env
Oltre ad accedere alle variabili di ambiente come un PSDrive trattandole come file in un drive, un altro modo è accedere al drive Env
come variabile. Significa che è possibile fare riferimento alle variabili di ambiente utilizzando la sintassi seguente.
Basandosi sulla sintassi indicata, eseguire il comando seguente in PowerShell per ottenere l’utente corrente.
Come mostra lo screenshot qui sotto, il comando restituisce il valore del nome utente.

La Classe di Ambiente .NET
PowerShell è un linguaggio e shell orientato agli oggetti. Fondamentalmente, tutto ciò su cui lavori all’interno di PowerShell è un oggetto. Quando esegui un comando, l’output è un oggetto. Se hai dichiarato una variabile, quella variabile è un oggetto stesso. Hai capito l’idea.
Questi oggetti hanno una struttura che definisce il tipo di dati che rappresentano, simile a dei progetti. E questi progetti sono chiamati classi .NET o semplicemente classi.
Per quanto riguarda le variabili d’ambiente, la classe associata ad esse è la classe Environment. Quindi, come si utilizza la classe Environment in PowerShell per ottenere l’utente corrente?
Come la variabile $env
, la classe Environment ha una proprietà Username
, il cui valore è il nome utente corrente. Per ottenere il valore della proprietà del nome utente, esegui il comando seguente in PowerShell.

Oltre alla proprietà Username
, la classe Environment ha anche un metodo per ottenere il valore di una variabile d’ambiente. Il nome del metodo è GetEnvironmentVariable
.
Per ottenere l’utente corrente utilizzando questo metodo, esegui il comando seguente.

Utilizzando la classe .NET WindowsIdentity
La classe WindowsIdentity è un’altra classe .NET che puoi invocare in PowerShell per ottenere l’utente corrente. Questa classe ha un metodo chiamato GetCurrentName
, che restituisce un oggetto che rappresenta l’utente corrente di Windows.
Per ottenere i dettagli dell’utente corrente, esegui il comando seguente.
Come puoi vedere di seguito, il comando restituisce le proprietà dell’oggetto utente corrente, inclusa la proprietà Name
. Il formato del valore della proprietà Name
segue la convenzione dominio\utente
.

Per restituire solo la parte del nome utente, modifica il comando precedente per selezionare solo la proprietà Name
e applicare la tecnica di divisione delle stringhe. Per farlo, copia il comando seguente ed eseguilo in PowerShell.

Utilizzando il comando whoami
Un altro comando utile che consente di ottenere rapidamente l’utente corrente è il comando whoami
. Questo comando è un file eseguibile che puoi trovare nella cartella %WINDIR%\System32 con il nome file whoami.exe
.
Per ottenere il nome utente dell’utente corrente, esegui il comando seguente.
Il comando restituisce quindi il risultato nel formato dominio nomeutente
, come mostrato nello screenshot qui sotto.

Per ottenere il nome utente senza il dominio, applica la tecnica di divisione delle stringhe che hai imparato in precedenza in questo tutorial eseguendo il comando seguente.

Il comando whoami
può anche restituire il nome distintivo qualificato completamente (FQDN) dell’utente corrente e il nome principale utente (UPN). Questo output del comando potrebbe essere utile se hai intenzione di eseguire uno script che recupera l’identità dell’utente corrente oltre al nome utente.
Esegui il comando seguente in PowerShell per ottenere il FQDN e l’UPN dell’utente corrente.

Nota: I valori FQDN e UPN sono disponibili solo se l’utente attualmente connesso è un utente di dominio. Se provi a ottenere questi valori per un utente locale, il comando restituirà un errore, come mostrato di seguito.

Utilizzando il comando query
Se sei un amministratore di sistema o un utente di dominio, è probabile che tu abbia effettuato l’accesso a una macchina remota tramite il Protocollo Desktop Remoto (RDP) almeno una volta, forse per gestire risorse o utilizzare applicazioni. Qualunque sia il motivo, vorresti sapere chi è attualmente connesso e sta utilizzando le risorse di sistema.
Per fortuna, Windows dispone di uno strumento da riga di comando integrato chiamato query
, che può elencare tutti gli utenti attualmente connessi a un computer. Il comando mostra anche se l’utente si è connesso tramite una sessione desktop remota o localmente al computer.
Il comando query
ha due parametri pertinenti per ottenere gli utenti connessi; session
e user
. Il parametro session
elenca le sessioni del computer, mentre il parametro user
elenca gli utenti e le loro sessioni.
Il comando
query session
ha un alias chiamatoqwinsta
, mentre l’alias del comandoquery user
èquser
.
Ad esempio, esegui il comando seguente per elencare le sessioni su DC1.
La schermata sotto mostra l’output del comando. In questo esempio, due utenti hanno effettuato l’accesso al computer DC1 – uno nella sessione console e un altro tramite RDP. Come puoi vedere, qwinsta
restituisce tutte le sessioni, anche quelle non utente.

Se esegui
qwinsta
oquser
da solo senza l’argomento/server:<computer>
, entrambi i comandi interrogheranno il computer locale per impostazione predefinita.
Successivamente, per elencare tutti gli utenti con sessioni di accesso esistenti, esegui il comando user
qui sotto.
Dopo aver eseguito il comando, noterai subito che quser
restituisce le sessioni e gli utenti come il comando qwinsta
. Ma questa volta non ci sono sessioni vuote.
Ci sono anche due colonne aggiuntive: TEMPO DI INATTIVITÀ
, che mostra il tempo di inattività degli utenti, e TEMPO DI ACCESSO
che mostra il timestamp di accesso degli utenti.

Alla fine, confrontando i risultati di qwinsta
e quser
, quser
è il comando più appropriato in PowerShell per ottenere gli utenti attuali.
Hai password compromesse nel tuo Active Directory? Scoprilo con Specops Password Auditor Free.
Conclusioni
Mentre ci sono molte modalità in PowerShell per ottenere gli utenti attualmente loggati, il metodo migliore dipende dal risultato che intendi ottenere e da come lo utilizzerai.
I cmdlet nativi correlati a WMI e il comando query
ti consentono di ottenere gli utenti loggati su un computer locale o remoto. Utilizzare le classi .NET e le variabili di ambiente offre modi rapidi per recuperare gli stessi risultati, ma solo sul computer locale.
Che tu preveda di eseguire uno script o di visualizzare manualmente i risultati sullo schermo, c’è un metodo che soddisferà i tuoi requisiti per utilizzare PowerShell per ottenere l’utente corrente. Cosa fare dopo? Forse imparare come analizzare i risultati del comando di query e convertirli in oggetti PowerShell scrivendo funzioni con RegEx?
Source:
https://adamtheautomator.com/powershell-get-current-user/