À 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?
À 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?
Réponses:
$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:
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
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
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 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.
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}
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 .
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.
[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.