À 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?
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Retour:
John Doe
D'autres propriétés (généralement) obscures sont également disponibles. Quelques exemples utiles:
Essayer:
[adsi]"WinNT://$dom/$usr,user" | select *
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
retour:
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
Un liner utilisant Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
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 le GAL 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 comptes de service gérés ) sont généralement des utilisateurs AD standard et non privilégiés.
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 offre 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 une autre fois avec LDAP) ou utiliser [ADSISearcher]
pour effectuer une recherche LDAP si vous voulez des propriétés étendues que WinNT n'implémente pas.
L'utilisation de -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 à gauche comme alternative à "select fullname | ft -HideTableHeaders" qui imprime une nouvelle ligne à la fin et à la fin.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Si vous ne souhaitez pas utiliser le module Active Directory, vous ne pouvez pas; sauf si vous voulez 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.
([adsi]"LDAP://$(whoami /fqdn)").displayName
Vous pouvez récupérer un camion d'informations en utilisant cet outil très simple. Check-out
([adsi]"LDAP://$(whoami /fqdn)") | fl *