Pobierz pełną nazwę bieżącego użytkownika domeny

23

W programie PowerShell w jaki sposób mogę uzyskać pełną nazwę aktualnie zalogowanego użytkownika domeny (nie tylko jego nazwę użytkownika) bez potrzeby korzystania z modułu ActiveDirectory?

Jonathan Rioux
źródło

Odpowiedzi:

24
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname

Zwroty:

John Doe

Dostępne są także inne (głównie) niejasne właściwości. Kilka przydatnych:

  • Homedrive UNC
  • List Homedrive
  • Opis
  • Skrypt logowania

Próbować:

[adsi]"WinNT://$dom/$usr,user" | select *
Clayton
źródło
3
Dobra odpowiedź. Oczywiście, to jest zapytań ad ... :)
Massimo
1
Czy potrzebuję uprawnień administratora domeny, aby uruchomić to polecenie? Czy może sam użytkownik domeny może uruchomić to polecenie?
Jonathan Rioux
1
Każdy użytkownik domeny może zapytać AD o tego rodzaju informacje.
Massimo,
1
@Massimo Żaden użytkownik domeny nie może zapytać AD o tego rodzaju informacje. Użytkownikom nie można przyznać (lub odmówić) uprawnienia „Czytaj ograniczenia konta” i nie można wyszukiwać żadnych danych z Active Directory
Ian Boyd
15

Podoba mi się zaakceptowana odpowiedź, ale tylko dlatego, że sam chciałem to wypróbować:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName

zwraca:

FullName
--------
TheCleaner

lub jeśli nie chcesz mieć informacji o nagłówku i tylko wynik:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
TheCleaner
źródło
Przeczytałem to zbyt szybko, robi zapytanie AD. Ustnie wycofuję swój głos.
MDMoore313,
2
Ale nie wymaga modułów AD PS
squillman
3
@squillman tak nie jest, po prostu utrudniając Cleanerowi.
MDMoore313,
Gotcha Przepraszam, musiał być bezkofeinowy ...
squillman
7

Jedna linijka za pomocą Powershell 3.0:

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
MDMoore313
źródło
3

W oparciu o komentarz do zaakceptowanej odpowiedzi Craig620,

Czy potrzebuję uprawnień administratora domeny, aby uruchomić to polecenie? Czy może sam użytkownik domeny może uruchomić to polecenie?

Wygląda na to, że próbujesz uniknąć instalowania modułów PowerShell na stacjach roboczych użytkowników, tak, ale także nie, nie musisz być administratorem domeny, aby wyszukać swoją nazwę w AD. Możesz wyszukać praktycznie dowolne informacje wyświetlane w GAL w Outlooku, w tym pełną nazwę, jako standardowy użytkownik.

Możesz także wyszukać imiona i nazwiska innych osób jako standardowego użytkownika w AD (używając Get-WmiObject Win32_userAccount, jeśli chcesz uniknąć modułów AD). Konta usługowe, które odpytują AD (cóż, przed zarządzanymi kontami usługowymi ) są zwykle standardowymi, nieuprzywilejowanymi użytkownikami AD.

Katherine Villyard
źródło
1

Użycie -match nie jest dobrym wyborem, ponieważ $ env: USERNAME dla „ed” będzie pasować do „fred” i „edith”. Zamiast tego użyj -eq dla dokładnego dopasowania i dodaj w domenie, jeśli to konieczne. Używam pętli foreach na końcu, aby usunąć wszystkie wiodące końcowe białe znaki jako alternatywę dla „wybierz pełną nazwę | ft -HideTableHeaders”, która drukuje wiodącą i końcową nową linię.

gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Michael Zakes
źródło
1

Jeśli zawsze masz .Net 3.5 lub nowszą wersję (którą powinieneś mieć z PowerShell v4.0 i wyższą wersją):

Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;

Ta klasa zapewnia bardzo łatwy dostęp do wszystkich wspólnych właściwości LDAP, więc nie trzeba wyszukiwać dwa razy (raz w WinNT i ponownie w LDAP) lub użyć [ADSISearcher]wyszukiwania LDAP, jeśli chcesz mieć rozszerzone właściwości, których WinNT nie implementuje .

Kawałki bekonu
źródło
0

Jeśli nie chcesz korzystać z modułu Active Directory, nie możesz; chyba że chcesz zejść jeszcze głębiej i wykonać rzeczywiste zapytanie LDAP na kontrolerze domeny.

Wszelkie informacje o użytkownikach inne niż nazwa użytkownika są przechowywane w usłudze Active Directory i należy je tam pobrać.

Massimo
źródło
Ale kiedy otwieram menu startowe, wyświetlana jest tutaj pełna nazwa użytkownika! Mam na myśli, że to gdzieś musi być przechowywane?
Jonathan Rioux
4
Tak, jest gdzieś przechowywane. Jest przechowywany w Active Directory.
Katherine Villyard,
Prawdopodobnie jest również przechowywany / buforowany w rejestrze, ale nie znalazłem go łatwo i poddałem się.
mfinni
1
To prawda, że ​​jest przechowywany w AD, ale [ADSI]interfejs działał znacznie dłużej niż moduły AD i naprawdę nie jest wcale taki skomplikowany, jak pokazuje zaakceptowana odpowiedź.
Hunter Eidson,