Comment puis-je obtenir le nom d'utilisateur dans Windows PowerShell?
Comment puis-je obtenir le nom d'utilisateur dans Windows PowerShell?
Vous devez vous connecter pour publier un commentaire.
Comment puis-je obtenir le nom d'utilisateur dans Windows PowerShell?
Vous devez vous connecter pour publier un commentaire.
Je l'ai trouvé:
Il y a aussi:
$env:username
récupérer le nom d'utilisateur à partir de la variable d'environnement.$env:USERNAME
peuvent être modifiés par l'utilisateur, mais ce ne sera pas dupe de le faire.$env:username
est le moyen le plus facileJ'ai pensé qu'il serait utile de résumer et de comparer les réponses données.
Si vous souhaitez accéder à la la variable d'environnement:
(plus facile/plus courte/mémorable option)
[Environment]::UserName
-- @ThomasBratt$env:username
-- @Eoinwhoami
-- @galaktorSi vous souhaitez accéder à la Jeton d'accès Windows:
(plus fiable option)
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-- @MarkSeemannSi vous souhaitez que le nom de l'utilisateur connecté
(plutôt que le nom de l'utilisateur qui exécute le PowerShell exemple)
$(Get-WMIObject -class Win32_ComputerSystem | select username).username
-- @TwonOfAn sur cet autre forumComparaison
@Kevin Panko commentaire de @Mark Seemann la réponse de la traite, sélectionnez l'une des catégories sur l'autre:
En bref, la variable d'environnement option est plus succinct, et le jeton d'accès Windows option est plus fiable.
J'ai eu à utiliser @Mark Seemann Windows jeton d'accès de l'approche dans un script PowerShell qui j'ai été en cours d'exécution d'une application en C# avec l'emprunt d'identité.
L'application en C# est exécuté avec mon compte d'utilisateur, et il exécute le script PowerShell en tant que compte de service. En raison d'une limitation de la façon dont je suis l'exécution du script PowerShell à partir de C#, PowerShell utilise mon compte d'utilisateur de variables d'environnement, même s'il est exécuté en tant que compte de service de l'utilisateur.
Dans cette configuration, la variable d'environnement options de retour de mon nom de compte, et le jeton d'accès Windows option renvoie le nom du compte de service (qui est ce que je voulais), et l'utilisateur connecté option renvoie le nom de mon compte.
Tests
Aussi, si vous voulez comparer les options vous-même, voici un script que vous pouvez utiliser pour exécuter un script à un autre utilisateur. Vous devez utiliser la cmdlet Get-Credential pour obtenir des informations d'identification de l'objet, puis exécuter ce script avec le script à exécuter en tant qu'un autre utilisateur que l'argument 1, et les informations d'identification de l'objet comme argument 2.
Utilisation:
Contenu de AsUser.ps1 script:
[Environment]::UserName
est la meilleure option, car il fonctionne de la croix-plate-forme.whoami
semble également fonctionner, mais dépend de lawhoami
outil mis à disposition sur la plate-forme.$env:USERNAME
produitSYSTEM
à moins que je exécuter en tant que administrateur, tandis que[Environment]::UserName]
rendements mon nom d'utilisateur à l'autre.Get-WmiObject
méthode ne fonctionne plus dans pwsh. Même essayé d'importer la compatibilité du module et de laMicrosoft.PowerShell.Management
qui a l'applet de commande. Toute idée de ce qui se passe?Je voudrais jeter dans la whoami de commande, qui, fondamentalement, est une belle alias pour faire
%USERDOMAIN%\%USERNAME%
comme proposé dans d'autres réponses.$env:USERNAME
peuvent être modifiés par l'utilisateur, mais ce ne sera pas dupe de le faire.[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
)whoami
est un exécutable. Il ne peut pas être supprimé à partir de PowerShell. Il pourrait être supprimés à partir de Windows, mais il est toujours là comme des non-Nano Windows Server 2012.[Environment]::UserName
retourne juste le nom de l'utilisateur. E. g. bob[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
renvoie le nom d'utilisateur, précédé de son domaine, le cas échéant. E. g. SOMEWHERENICE\bobJ'ai utilisé
$env:username
dans le passé, mais un collègue l'a souligné, c'est un environnement variable et peut être modifié par l'utilisateur et par conséquent, si vous voulez vraiment obtenir le courant de l'utilisateur nom d'utilisateur, vous ne devriez pas faire confiance.J'avais upvote Marque Seemann de réponse:
[Système.De sécurité.Principal.WindowsIdentity]::GetCurrent().Nom
Mais je ne suis pas autorisé à le faire. Avec Marc réponse, si vous avez besoin simplement le nom d'utilisateur, vous pouvez avoir à analyser car sur mon système, il retourne
hostname\username
et sur le domaine des ordinateurs joints avec les comptes de domaine, il sera de retourdomain\username
.Je ne voudrais pas utiliser
whoami.exe
car il n'est pas présent sur toutes les versions de Windows, et c'est un appel à l'autre binaire et peut donner des équipes de sécurité s'adapte.[Environment]::UserName
moins de frappe, indépendant de$env:username
et de la croix-plate-forme: Voir pastebin.com/GsfR6HrpJuste en appuyant sur le travail des autres ici:
Maintenant que PowerShell De Base (aka v6) a été publié, et les gens peuvent vouloir écrire des scripts, beaucoup de réponses ici ne fonctionne pas sur autre chose que Windows.
[Environment]::UserName
semble être le meilleur moyen d'obtenir le nom d'utilisateur en cours sur toutes les plates-formes prises en charge par PowerShell de Base si vous ne voulez pas ajouter de plate-forme de détection et de revêtement spécial pour votre code.$username
La deuxième nom d'utilisateur est uniquement pour l'affichage seulement si vous copiez et coller.
Si vous avez l'habitude de lot, vous pouvez appeler
Fondamentalement vole la sortie de ce que vous pourriez obtenir si vous aviez un fichier de commandes avec juste de "l'echo %username%".
$(...)
est superflu:$a = cmd.exe /c echo %username%
œuvres, b) il n'est pas portable, c) qu'il n'a pas réellement répondre à la question de comment le faire en powershell, il répond à la façon de le faire dans le dos, et il est préférable de donner à un homme un pôle de pêche que lui donner un poisson, par exemplepowershell puts environment variables into $env, so %username% = $env:username
.Je ne vois pas Ajoutez-Type exemples. Voici une aide de la GetUserName directement à partir de advapi32.dll.
UNLEN+1
, etUNLEN
est de 256), il omet toute erreur qui pourrait être retourné à partir de GetUserName (à travers elle préserve GetLastError, un bon point), il ne nettoie pas le tampon de chaîne; et sans doute quelques autres. Et comme les autres ont dit, les commentaires sont manquaient cruellement, trop.get-content "cm.txt"
write-host "entr file name"
$file = read-host
get-content $file
$content = get-content "cm.txt"
$content = get-content "cn.txt"
for each ($line in $count)
{write-host $line}
Je trouve plus facile à utiliser: cd $home\Desktop\
va vous prendre de l'utilisateur courant, bureau
Dans mon cas, j'avais besoin de récupérer le nom d'utilisateur pour activer le script pour modifier le chemin d'accès, c'est à dire. c:\users\%username%. J'avais besoin de lancer le script en modifiant le chemin d'accès pour les utilisateurs de bureau. J'ai été capable de faire cela, avec l'aide d'en-haut et d'ailleurs, en utilisant l'emplacement de l'applet.
Vous pouvez en avoir une autre, ou même la meilleure façon de le faire, mais cela a fonctionné pour moi:
$Path = Get-Emplacement
Set-Location $Path\Desktop
Dans mon cas, j'avais besoin de récupérer le nom d'utilisateur pour activer le script pour modifier le chemin d'accès, c'est à dire.
c:\users\%username%\
. J'avais besoin de lancer le script en modifiant le chemin d'accès pour les utilisateurs de bureau. J'ai été capable de faire cela, avec l'aide d'en-haut et d'ailleurs, à l'aide de la get-emplacement applet.Vous pouvez en avoir une autre, ou même la meilleure façon de le faire, mais cela a fonctionné pour moi:
Set-Location Desktop
. (Get-Location
contente de l'emplacement actuel, ce qui est implicite pour unSet-Location
avec un chemin relatif.)