Utilizzando PowerShell, come posso ottenere il nome completo dell'utente di dominio attualmente connesso (non solo il suo nome utente) senza la necessità del modulo ActiveDirectory?
Utilizzando PowerShell, come posso ottenere il nome completo dell'utente di dominio attualmente connesso (non solo il suo nome utente) senza la necessità del modulo ActiveDirectory?
Risposte:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Ritorna:
John Doe
Sono disponibili anche altre proprietà (per lo più) oscure. Alcuni utili:
Provare:
[adsi]"WinNT://$dom/$usr,user" | select *
Mi piace la risposta accettata, ma solo perché volevo provare questo da solo:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
ritorna:
FullName
--------
TheCleaner
o se desideri non avere le informazioni dell'intestazione e solo il risultato:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Un liner che utilizza Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Sulla base del tuo commento sulla risposta accettata di Craig620,
Ho bisogno dei diritti di amministratore del dominio per eseguire questo comando? O l'utente stesso del dominio può eseguire questo comando?
Sembra che tu stia cercando di evitare l'installazione di moduli PowerShell sulle workstation degli utenti, sì, ma anche no, non è necessario essere un amministratore di dominio per cercare il tuo nome in AD. Puoi cercare praticamente tutte le informazioni che appaiono nella GAL in Outlook, incluso il nome completo, come utente standard.
Puoi anche cercare i nomi completi di altre persone come utenti standard in AD (utilizzando Get-WmiObject Win32_userAccount
, se vuoi evitare i moduli AD). Gli account di servizio che interrogano AD (bene, prima degli account di servizio gestiti ) sono generalmente utenti AD standard e senza privilegi.
Usare -match non è una buona scelta perché un $ env: USERNAME di "ed" corrisponderà a "fred" e "edith". Usa invece -eq per una corrispondenza esatta e aggiungi il dominio se necessario. Uso un ciclo foreach alla fine per eliminare tutti gli spazi bianchi iniziali come alternativa a "seleziona nome completo | ft -HideTableHeaders" che stampa una riga iniziale iniziale e finale.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Se hai sempre .Net 3.5 o versioni successive (che dovresti avere con PowerShell v4.0 e versioni successive):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
Quella classe fornisce un accesso molto semplice a tutte le proprietà LDAP comuni, quindi non è necessario [ADSISearcher]
cercare due volte (una volta con WinNT e di nuovo con LDAP) o utilizzare per fare una ricerca LDAP se si desidera alcune proprietà estese che WinNT non implementa .
Se non si desidera utilizzare il modulo di Active Directory, non è possibile; a meno che non si desideri approfondire ulteriormente ed eseguire una query LDAP effettiva su un controller di dominio.
Qualsiasi informazione utente diversa dal nome utente viene archiviata in Active Directory e deve essere recuperata lì.
[ADSI]
interfaccia è stata molto più lunga rispetto ai moduli AD e in realtà non è poi così complicata, come mostra la risposta accettata.