Récupérer le nom complet de l'utilisateur de domaine actuel

23

À l'aide de PowerShell, comment puis-je obtenir le nom complet de l'utilisateur de domaine actuellement connecté (pas seulement son nom d'utilisateur) sans avoir besoin du module ActiveDirectory?

Jonathan Rioux
la source

Réponses:

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

Résultats:

John Doe

D'autres propriétés (généralement) obscures sont également disponibles. Quelques exemples utiles:

  • Homedrive UNC
  • Lettre Homedrive
  • La description
  • Script de connexion

Essayer:

[adsi]"WinNT://$dom/$usr,user" | select *
Clayton
la source
3
Bonne réponse. Bien sûr, cela est interroge AD ... :)
Massimo
1
Ai-je besoin des droits d'administrateur de domaine pour exécuter cette commande? Ou l'utilisateur du domaine lui-même peut-il exécuter cette commande?
Jonathan Rioux
1
Tout utilisateur de domaine peut interroger AD pour ce type d'informations.
Massimo
1
@Massimo Aucun utilisateur de domaine ne peut interroger AD pour ce type d'informations. Les utilisateurs ne peuvent pas se voir accorder (ou refuser) l'autorisation "Lire les restrictions de compte" et ne peuvent pas interroger les données d'Active Directory
Ian Boyd
15

J'aime la réponse acceptée, mais juste parce que je voulais l'essayer moi-même:

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

résultats:

FullName
--------
TheCleaner

ou si vous ne souhaitez pas avoir les informations d'en-tête et juste le résultat:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Le nettoyeur
la source
Je lis cela aussi rapidement, il ne demande AD. Je retire verbalement mon vote.
MDMoore313
2
Mais ne nécessite pas les modules AD PS
squillman
3
@squillman ce n'est pas le cas, ce qui donne du fil à retordre à Cleaner.
MDMoore313
Je t'ai eu. Désolé, doit avoir été décaféiné ...
squillman
7

Un liner utilisant Powershell 3.0:

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
MDMoore313
la source
3

Sur la base de votre commentaire sur la réponse acceptée de Craig620,

Ai-je besoin des droits d'administrateur de domaine pour exécuter cette commande? Ou l'utilisateur du domaine lui-même peut-il exécuter cette commande?

On dirait que vous essayez d'éviter d'installer des modules PowerShell sur les postes de travail des utilisateurs, oui, mais aussi, non, vous n'avez pas besoin d'être un administrateur de domaine pour rechercher votre propre nom dans AD. Vous pouvez rechercher à peu près toutes les informations qui apparaissent dans la liste d'adresses globale dans Outlook, y compris le nom complet, en tant qu'utilisateur standard.

Vous pouvez également rechercher les noms complets d'autres personnes en tant qu'utilisateur standard dans AD (en utilisant Get-WmiObject Win32_userAccount, si vous voulez éviter les modules AD). Les comptes de service qui interrogent AD (enfin, avant les comptes de service gérés ) sont généralement des utilisateurs AD standard et non privilégiés.

Katherine Villyard
la source
1

Utiliser -match n'est pas un bon choix car un $ env: USERNAME de "ed" correspondra à "fred" et "edith". Utilisez plutôt -eq pour une correspondance exacte et ajoutez le domaine si nécessaire. J'utilise une boucle foreach à la fin pour supprimer tous les espaces de début et de fin comme alternative à "select fullname | ft -HideTableHeaders" qui imprime une nouvelle ligne de début et de fin.

gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Michael Zakes
la source
1

Si vous avez toujours .Net 3.5 ou supérieur (ce que vous devriez avec PowerShell v4.0 et supérieur):

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

Cette classe fournit un accès très facile à toutes les propriétés LDAP courantes, vous n'avez donc pas besoin de rechercher deux fois (une fois avec WinNT et de nouveau avec LDAP) ou d'utiliser [ADSISearcher]pour effectuer une recherche LDAP si vous voulez des propriétés étendues que WinNT n'implémente pas .

Lardons
la source
0

Si vous ne souhaitez pas utiliser le module Active Directory, vous ne pouvez pas; sauf si vous souhaitez aller plus loin et effectuer une requête LDAP réelle sur un contrôleur de domaine.

Toutes les informations utilisateur autres que le nom d'utilisateur sont stockées dans Active Directory et doivent y être récupérées.

Massimo
la source
Mais lorsque j'ouvre le menu Démarrer, le nom complet de l'utilisateur s'affiche ici! Je veux dire, il doit être stocké quelque part?
Jonathan Rioux
4
Oui, il est stocké quelque part. Il est stocké dans Active Directory.
Katherine Villyard
Il est probablement également stocké / mis en cache dans le registre, mais je ne l'ai pas trouvé facilement et j'ai abandonné.
mfinni
1
Il est vrai qu'il est stocké dans AD, mais l' [ADSI]interface existe depuis bien plus longtemps que les modules AD, et ce n'est vraiment pas si compliqué, comme le montre la réponse acceptée.
Hunter Eidson