Windows環境で現在のユーザーをどのように見つけますか?


159

コマンドラインスクリプトを実行しているときに、現在のユーザーの名前を取得することはできますか?



@PeterMortensen、私はスレッドがこれに非常に関連しているとは思いません。1つは.NETの使用に関するもので、もう1つはcmd APIの使用に関するものです。どちらも同じ情報が欲しいという事実以外にも、同様のことを行う他のAPIのトン確かにある
KyleMit

回答:


202

ユーザー名変数を使用できます。 %USERNAME%


90

ユーザー名:

echo %USERNAME%

ドメイン名:

echo %USERDOMAIN%

setコマンドプロンプトからコマンドを実行すると、環境変数の完全なリストを取得できます。


すべての環境変数を含む追加情報により、これはすばらしい拡張回答になります。
bballdave025

63

コマンドプロンプトでこのコマンドを使用するだけです

C:\> whoami

これは良い答えですが、いくつかの注意点があります。入るwhoamiと出ますdesktop-machine\bballdave025。次の2つの部分があります。1)echo %USERNAME%、結果bballdave025; 2)echo %USERDOMAIN%、結果DESKTOP-MACHINE。「完全なユーザー名」は、echo %USERDOMAIN%\%USERNAME%(この結果DESKTOP-MACHINE\bballdave025、、と一致するwhoami、大文字と小文字を区別せず)、またはecho %USERNAME%@%USERDOMAIN%、resultを介して利用できると言うことができると思いますbballdave025@DESKTOP-MACHINEそれはすべて、ユーザー(私たちにとってはOP)が必要とするもの、つまりドメイン部分が重要かどうかに依存します。
bballdave025

46

にあるはず%USERNAME%です。明らかにこれは簡単に偽装される可能性があるため、セキュリティのためにこれに依存しないでください。

役立つヒント:setコマンドプロンプトに入力すると、すべての環境変数が一覧表示されます。


2
'net config Workstation | 「ユーザー名」を見つける 'コメントは非常に便利です。それは単なるコメントではなく答えであるはず
Alpay

17

%USERNAME% バッチおよびその他のWindows環境での正解です。

別のオプションは%USERPROFILE%、のようにユーザーのパスを取得するために使用することC:\Users\usernameです。


6

答えは、使用している「コマンドラインスクリプト」言語によって異なります。

Cmd

古いcmd.exeコマンドプロンプトまたは.batまたは.cmdスクリプトでは、以下を使用できます。

%USERNAME% -ユーザー名のみを取得します。

%USERDOMAIN% -ユーザーのドメインを取得します。

パワーシェル

PowerShellコマンドプロンプトまたは.ps1または.psm1スクリプトで、次を使用できます。

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name-完全修飾ユーザー名(例:Domain \ Username)を提供します。これは、$Env以下の他の変数のようにユーザーがオーバーライドできないため、最も安全な方法でもあります。

$Env:Username -ユーザー名のみを取得します。

$Env:UserDomain -ユーザーのドメインを取得します。

$Env:ComputerName -コンピュータの名前を取得します。


この質問は「シェル」に依存するため、これは素晴らしい答えです。Windowsで使用できるシェルはたくさんあります。CMDだけではありません。最近では、ほとんどの人がpowershellに移行しており、他の人もいます。 stackoverflow.com/questions/17349022/...
G_Style

5

%USERNAME%は、現在実行中のプロセスのユーザー名を取得します。バッチファイルの実行方法によっては、現在のユーザーの名前と同じであるとは限りません。たとえば、スケジュールされたタスク、サービスなどからバッチファイルを実行している場合があります。

以下は、explorer.exeタスクを開始したユーザーの名前を取得して、現在ログオンしているユーザーのユーザー名を取得するより確実な方法です。

for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b

4

テスト用のバッチファイルを作成する際に、この方法を使用します。

echo %userdomain%\%username%

認証が必要な場合は、プレーンテキストでパスワードを含める必要があるため、他のユーザーがパスワードを表示できない、またはパスワードを見てもユーザーが影響を受けない完全にプライベートな環境でのみ使用します。

これが誰かを助けることを願っています。


4

Windowsには、who / whoamisedAWKなど、Unixの便利な小さなスクリプトユーティリティがいくつかないので、いつも困っています。とにかく、間違いのないものが必要な場合は、Visual Studio Expressを入手して以下をコンパイルします。

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv) {
    printf("%s", GetUserName());
}

そして、それをバッチファイルで使用してください。


ええ、組み込みがあれば良かったでしょう。
ジオ

8
私は、sedの&awkは有用であろうことに同意しますが、これはあなたが道の50%を取得します net config Workstation | find "User name"
the_mandrill

9
whoamiWindows Vista以降で利用できます。
ジョーイ

2
確かに、Vistaにはwhoamiユーティリティが含まれています。XPの場合はSP2サポートツールにあり、W2Kの場合はリソースツールキットにあります。
RealHowTo 2009年

4

ほとんどの場合、%USERNAME%変数で十分です。

echo %USERNAME%

ただし、管理者特権のコマンドシェルを実行している場合、%USERNAME%は自分のユーザー名ではなく管理者名を報告します。後者を知りたい場合は、次を実行:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u

1

これは、username変数とwhoamiコマンドの主な違いです。

C:\Users\user.name>echo %username%
user.name

C:\Users\user.name>whoami
domain\user.name

DOMAIN = bios name of the domain (not fqdn)

0

標準的なコンテキストでは、接続された各ユーザーはexplorer.exeプロセスを保持します。コマンド[tasklist / V | find "explorer"]は、explorer.exeプロセスの所有者を含む行を返します。値。これはWindows 7でも完全に動作します。

まれに、explorer.exeが別のプログラムに置き換えられた場合、このケースに一致するように検索フィルターを調整できます。コマンドが空の行を返す場合は、ユーザーがログオンしていない可能性があります。Windows 7では、[query session | find ">"]を実行することもできます。


0

BlueBearrの応答が最高である限り(システム権限などでバッチスクリプトを実行している間)、何かを追加する必要があります。私のWindows言語バージョン(ポーランド語)では、「%% a %% b」== "ユーザー名:"によってキャッチされる行が非常に複雑になるため(最初の7行をスキップして、 8日に動作します。

@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.