Obtenez de l'affichage du nom de l'actuel utilisateur de domaine Windows à partir d'une invite de commandes
À partir de l'invite de commande, comment puis-je obtenir le nom d'affichage convivial (qui est, "John Doe" au lieu de "jean.doe") du domaine de l'utilisateur qui est actuellement connecté?
Ici est une façon délicate que j'ai fait à l'aide de la commande net et la commande rechercher dans un fichier de commandes:
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 magasins de la commande que nous voulons exécuter dans une variable. Il tire le nom d'utilisateur dans les variables d'environnement et le passe dans le net user de commande ainsi que le /domain paramètre pour lui dire de tirer à partir du domaine actuel. Puis il les tuyaux le résultat, qui est un tas de données sur l'utilisateur actuel, à trouver la méthode qui permettra de sortir que le bien que nous voulons. Le résultat de la recherche est dans le format "Nom Complet John Doe". La deuxième ligne sera exécuter la commande et mettre le résultat dans la variable fullNameText. La troisième ligne sera de supprimer le "Nom Complet" une partie de la suite et jusqu'à la fin avec "John Doe". La quatrième ligne avec la boucle for va supprimer tous les espaces de la suite et vous vous retrouvez avec "John Doe" dans le fullName variable.
On peut trouver le nom de domaine d'un ordinateur en exécutant la commande suivante commnad en ligne de commande. systeminfo | findstr /B /C:”Domaine”, Nous pouvons trouver la consignées dans le domaine de l'utilisateur à l'aide de la variable d'environnement ‘Userdomain’. Commande est donnée ci-dessous. echo %userdomain% Super! Travaille en PowerShell ainsi: ((net de l'utilisateur $env:nom d'utilisateur /domaine | Select-String "Nom Complet") -remplacer "Nom Complet","").Trim() J'ai été nécessaire d'entourer %commande% avec des guillemets dans la deuxième ligne de la faire fonctionner: ('"%commande%"') cette commande ne fonctionne pas lorsque vous êtes connecté à un domaine différent compte de ce que votre machine est connectée à, dans une forêt active
Voici un dérivé de skeletank de l' réponse qui est légèrement plus propre qui a fonctionné pour moi... (j'ai essayé skeletank de l' de réponse et il ne fonctionne pas pour moi la façon dont c'était écrit, donc ma réponse ci-dessous.)
SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name""
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A
Ensuite, vous pouvez utiliser 'NOM' n'importe où vous avez besoin, comme à la sortie avec un écho ou de valider avec une condition if. Vous pouvez retourner le "%%B " et "%%A " jetons autour pour revenir au prénom de mise en page. Cela permet d'économiser l'effort supplémentaire utilisé dans skeletank de l' réponse originale.
Cela devrait être un moyen propre à l'aide de dsquery et dsget sans compter sur la sortie de "Nom Complet", qui est dépendant d'une langue, alors que le "fn" semble fonctionner avec les 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
La dsget commutateur-L donne la liste de sortie "fn: l'UTILISATEUR" donc, la seule chose qui reste, c'est de prendre la deuxième colonne de la sortie.
trouver "fn:" est utilisée pour se débarrasser de la "dsget réussi" sortie.
win10 exécution dans cmd résultats: nom d'utilisateur"') DO @echo j'ai été inattendue à cette époque. semble que c'est de dsquery n'existant pas sur la machine C'est formaté pour une utilisation en ligne de commande. Matt, veuillez vous référer à ma réponse pour la différence entre la ligne de commande et script de mise en forme. Cette commande nécessite RSAT installé sur l'ordinateur que vous exécutez à partir de.
La accepté de répondre (au moment de la publication) dispose de 4 lignes de code, quand vous avez seulement besoin de quelqu'un pour faire la même chose:
for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"
Ça va marcher, même si le Nom Complet dispose de plus de 2 pièces. Fonctionne sur les postes de travail Windows "out of the box" et ne nécessite pas de droits d'administrateur.
REMARQUE: n'oubliez pas de changer %n et %o à %%n et %%o,respectivement, lors de l'utilisation dans un fichier de commandes.
Explication de la commande:
"tokens=2* précise que le seul jetons, il va prêter attention à la 2nde partie (attribué à %n), et tout ce qui suit (attribué à la lettre suivante:%o)
La valeur par défaut delims est de l'espace, donc nous n'avons pas besoin de le définir, mais si nous avons besoin de définir ce que ce serait comme suit: "tokens=2* delims= ". Parce que l'espace est un séparateur, il ignore tous les espaces de tête.
La pipe (|) est échappé par une carotte (^), racontant le processeur de commande de l'ignorer au départ.
Je préfère aussi utiliser FINDSTR au lieu de FIND parce que (dans mes tests) je l'ai trouvé pour être le plus rapide de la commande, qui peut faire une différence si vous utilisez fréquemment. FINDSTR /C:"Full Name" pourrait facilement être remplacés par FIND "Full Name" si vous avez préféré.
win10 cmd exécution dans un .bat résultats: nom d'utilisateur"Nom Complet"') était inattendu à cette époque. ne fonctionne pas si l'utilisateur est sur un domaine différent de ce qu'ils sont actuellement connecté (mais toujours dans la forêt active directory w/ confiance), La demande sera traitée à un contrôleur de domaine pour le domaine XXX.XXX.XXX. Le nom d'utilisateur n'a pas pu être trouvé. Plus d'aide est disponible en tapant NET HELPMSG 2221. OP question posée pour la commande "à Partir de l'invite de commande". Ma réponse est formaté en tant que tel. Cependant, j'ai précisément la façon dont le format pour .chauve-souris de script si vous voulez l'utiliser pour cela. Veuillez voir la "NOTE".
Lectrode la réponse dans une chaîne de caractères sera comme ceci:
for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b
Veuillez noter que ceci est formaté pour bat ou cmd script. Cela ne fonctionnera pas "à Partir de l'invite de commande" en tant que OP a demandé ci-dessus for /f "usebackq tokens=2,* delims= " %a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%b /// Il suffit de changer le double %% à % et il fonctionne à partir de CMD///
J'ai construit un fichier de commandes pour faire quelques choses rapidement par la sélection d'une action à l'aide de p et goto. Je suis en laissant 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 cela aide.
seulement les résultats dans une boucle infinie des invites avec l'erreur: Invalid Interrupteur Mondiale.
Si vous le souhaitez pour usage humain - ce qui signifie que vous n'avez pas besoin d'analyser automatiquement de sorte que vous obtenez juste le nom complet, vous pouvez simplement le type de net user <username> /domain à l'invite de commande, et de lire le "Plein champ" Nom d'.
lien cassé et cette commande ne fonctionne pas lorsque vous êtes connecté à un domaine différent compte de ce que votre machine est connectée à, dans une forêt active J'ai corrigé le lien, merci.
Ici est une façon délicate que j'ai fait à l'aide de la commande net et la commande rechercher dans un fichier de commandes:
La première ligne magasins de la commande que nous voulons exécuter dans une variable. Il tire le nom d'utilisateur dans les variables d'environnement et le passe dans le
net user
de commande ainsi que le/domain
paramètre pour lui dire de tirer à partir du domaine actuel. Puis il les tuyaux le résultat, qui est un tas de données sur l'utilisateur actuel, à trouver la méthode qui permettra de sortir que le bien que nous voulons. Le résultat de la recherche est dans le format "Nom Complet John Doe". La deuxième ligne sera exécuter la commande et mettre le résultat dans la variablefullNameText
. La troisième ligne sera de supprimer le "Nom Complet" une partie de la suite et jusqu'à la fin avec "John Doe". La quatrième ligne avec la boucle for va supprimer tous les espaces de la suite et vous vous retrouvez avec "John Doe" dans lefullName
variable.Super! Travaille en PowerShell ainsi: ((net de l'utilisateur $env:nom d'utilisateur /domaine | Select-String "Nom Complet") -remplacer "Nom Complet","").Trim()
J'ai été nécessaire d'entourer %commande% avec des guillemets dans la deuxième ligne de la faire fonctionner: ('"%commande%"')
cette commande ne fonctionne pas lorsque vous êtes connecté à un domaine différent compte de ce que votre machine est connectée à, dans une forêt active
OriginalL'auteur skeletank
Voici un dérivé de skeletank de l' réponse qui est légèrement plus propre qui a fonctionné pour moi... (j'ai essayé skeletank de l' de réponse et il ne fonctionne pas pour moi la façon dont c'était écrit, donc ma réponse ci-dessous.)
Ensuite, vous pouvez utiliser 'NOM' n'importe où vous avez besoin, comme à la sortie avec un écho ou de valider avec une condition if. Vous pouvez retourner le "%%B " et "%%A " jetons autour pour revenir au prénom de mise en page. Cela permet d'économiser l'effort supplémentaire utilisé dans skeletank de l' réponse originale.
Variables:
-TNAME = Nom Temporaire
-DNAME = Nom d'Affichage
-Grâce skeletank.
OriginalL'auteur enigmafyv
Cela devrait être un moyen propre à l'aide de dsquery et dsget sans compter sur la sortie de "Nom Complet", qui est dépendant d'une langue, alors que le "fn" semble fonctionner avec les différentes versions linguistiques de windows.
La dsget commutateur-L donne la liste de sortie "fn: l'UTILISATEUR" donc, la seule chose qui reste, c'est de prendre la deuxième colonne de la sortie.
trouver "fn:" est utilisée pour se débarrasser de la "dsget réussi" sortie.
C'est formaté pour une utilisation en ligne de commande. Matt, veuillez vous référer à ma réponse pour la différence entre la ligne de commande et script de mise en forme. Cette commande nécessite RSAT installé sur l'ordinateur que vous exécutez à partir de.
OriginalL'auteur done
La accepté de répondre (au moment de la publication) dispose de 4 lignes de code, quand vous avez seulement besoin de quelqu'un pour faire la même chose:
Ça va marcher, même si le Nom Complet dispose de plus de 2 pièces. Fonctionne sur les postes de travail Windows "out of the box" et ne nécessite pas de droits d'administrateur.
REMARQUE: n'oubliez pas de changer
%n
et%o
à%%n
et%%o
,respectivement, lors de l'utilisation dans un fichier de commandes.Explication de la commande:
"tokens=2*
précise que le seul jetons, il va prêter attention à la 2nde partie (attribué à%n
), et tout ce qui suit (attribué à la lettre suivante:%o
)La valeur par défaut
delims
est de l'espace, donc nous n'avons pas besoin de le définir, mais si nous avons besoin de définir ce que ce serait comme suit:"tokens=2* delims= "
. Parce que l'espace est un séparateur, il ignore tous les espaces de tête.La pipe (
|
) est échappé par une carotte (^
), racontant le processeur de commande de l'ignorer au départ.Je préfère aussi utiliser
FINDSTR
au lieu deFIND
parce que (dans mes tests) je l'ai trouvé pour être le plus rapide de la commande, qui peut faire une différence si vous utilisez fréquemment.FINDSTR /C:"Full Name"
pourrait facilement être remplacés parFIND "Full Name"
si vous avez préféré.ne fonctionne pas si l'utilisateur est sur un domaine différent de ce qu'ils sont actuellement connecté (mais toujours dans la forêt active directory w/ confiance), La demande sera traitée à un contrôleur de domaine pour le domaine XXX.XXX.XXX. Le nom d'utilisateur n'a pas pu être trouvé. Plus d'aide est disponible en tapant NET HELPMSG 2221.
OP question posée pour la commande "à Partir de l'invite de commande". Ma réponse est formaté en tant que tel. Cependant, j'ai précisément la façon dont le format pour .chauve-souris de script si vous voulez l'utiliser pour cela. Veuillez voir la "NOTE".
OriginalL'auteur Lectrode
for /f "usebackq tokens=2,* delims= " %a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%b
/// Il suffit de changer le double %% à % et il fonctionne à partir de CMD///OriginalL'auteur kgimpel
J'ai construit un fichier de commandes pour faire quelques choses rapidement par la sélection d'une action à l'aide de p et goto. Je suis en laissant les parties inutiles.
J'espère que cela aide.
OriginalL'auteur Errant
Si vous le souhaitez pour usage humain - ce qui signifie que vous n'avez pas besoin d'analyser automatiquement de sorte que vous obtenez juste le nom complet, vous pouvez simplement le type de
net user <username> /domain
à l'invite de commande, et de lire le "Plein champ" Nom d'.Référence: Détaillées de domaine de l'utilisateur des informations à partir de la ligne de commande.
J'ai corrigé le lien, merci.
OriginalL'auteur cp.engr
De commande à distance commandes (j'ai l'habitude d'établir cela en utilisant PSexec.exe), puis il suffit de taper la requête "utilisateur"
OriginalL'auteur Tony D.