web-dev-qa-db-fra.com

Obtenir le nom complet de l'utilisateur actuel du domaine Windows à partir d'une invite de commande

À partir de l'invite de commande, comment puis-je obtenir le nom d'affichage convivial (c'est-à-dire "John Doe" au lieu de "john.doe") de l'utilisateur du domaine actuellement connecté?

9
skeletank

Voici une façon délicate de le faire en utilisant la commande net et la commande find dans un fichier batch:

set command=Net User "%USERNAME%" /domain | FIND /I "Full Name"

FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A
set fullName=%fullNameText:Full Name=%
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a

La première ligne stocke la commande que nous voulons exécuter dans une variable. Il extrait le nom d'utilisateur des variables d'environnement et le transmet à la commande Net User, ainsi qu'au paramètre /domain, pour lui indiquer qu'il faut extraire le domaine actuel. Ensuite, il achemine le résultat, qui consiste en un tas de données sur l'utilisateur actuel, dans une méthode de recherche qui extrait uniquement la propriété souhaitée. Le résultat de la recherche est au format "Nom complet John Doe". La deuxième ligne exécute la commande et place le résultat dans la variable fullNameText. La troisième ligne supprimera la partie "Nom complet" du résultat et aboutira à "John Doe". La quatrième ligne avec la boucle for supprimera tous les espaces en tête du résultat et vous obtiendrez "John Doe" dans la variable fullName.

10
skeletank

La réponse de Lectrode dans une chaîne sera comme ceci:

for /f "usebackq tokens=2,* delims= " %%a in (`Net User "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b
3
kgimpel

Cela devrait être une manière propre d’utiliser dsquery et dsget sans s’appuyer sur la sortie de "Nom complet", qui dépend de la langue, alors que "fn" semble fonctionner avec différentes versions linguistiques de Windows.

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i

Le commutateur dsget -L donne à la sortie listée "fn: USER", il ne reste donc plus qu'à saisir la deuxième colonne dans la sortie . Find "fn:" permet de supprimer la sortie "dsget successed".

2
done

La réponse acceptée (au moment de la publication) comporte 4 lignes de code, lorsque vous n’avez besoin que d’une seule pour faire la même chose:

for /f "tokens=2*" %n in ('Net User "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"

Cela fonctionnera même si le nom complet comporte plus de 2 parties. Fonctionne sur les postes de travail Windows "prêts à l'emploi" et ne nécessite pas de droits d'administrateur.

REMARQUE: N'oubliez pas de changer %n et %o en %%n et %%o, respectivement, lors de l'utilisation dans un fichier de traitement par lots.

Explication de la commande:

"tokens=2* spécifie que les seuls jetons auxquels il fera attention sont le 2e jeton (attribué à %n) et tout ce qui suit (affecté à la lettre suivante: %o)

La valeur par défaut delims étant l’espace, nous n’avons pas besoin de la définir, mais si nous devons la définir manuellement, ce serait comme suit: "tokens=2* delims= ". Parce que l'espace est un délimiteur, il ignorera tous les espaces en tête.

Le tube (|) est échappé par une carotte (^), indiquant au processeur de commande de l'ignorer initialement.

Je préfère également utiliser FINDSTR au lieu de FIND car (lors de mes tests), la commande est plus rapide, ce qui peut faire la différence si vous l'utilisez fréquemment. FINDSTR /C:"Full Name" pourrait être facilement remplacé par FIND "Full Name" si vous préférez.

2
Lectrode

Si vous le souhaitez pour une utilisation humaine (ce qui signifie que vous n'avez pas besoin de l'analyser automatiquement pour que vous obteniez seulement le nom complet), vous pouvez simplement taper Net User <username> /domain à l'invite de commande et lire le champ "Nom complet".

Référence: Obtention d'informations détaillées sur l'utilisateur du domaine à partir de la ligne de commande .

0
cp.engr

J'ai construit un fichier de commandes pour effectuer rapidement certaines tâches en sélectionnant une action à l'aide de set p et de goto. Je laisse de côté les parties inutiles. 

@echo off

:begin

echo 5. Find who is on remote PC right now

echo.

set /p a=

IF %a%==5 (goto whoson)

REM Whos on
:whoson
set /p remotecomputername=Enter computer name to see the current user: 
wmic /node:%remotecomputername% computersystem get username
pause
goto begin

J'espère que ça aide.

0
Errant

À partir de l'invite de commande à distance (je l'installe généralement à l'aide de PSexec.exe), tapez simplement "utilisateur de requête" 

enter image description here

0
Tony D.