回答:
ユーザー名:
echo %USERNAME%
ドメイン名:
echo %USERDOMAIN%
set
コマンドプロンプトからコマンドを実行すると、環境変数の完全なリストを取得できます。
コマンドプロンプトでこのコマンドを使用するだけです
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)が必要とするもの、つまりドメイン部分が重要かどうかに依存します。
にあるはず%USERNAME%
です。明らかにこれは簡単に偽装される可能性があるため、セキュリティのためにこれに依存しないでください。
役立つヒント:set
コマンドプロンプトに入力すると、すべての環境変数が一覧表示されます。
答えは、使用している「コマンドラインスクリプト」言語によって異なります。
古いcmd.exe
コマンドプロンプトまたは.bat
または.cmd
スクリプトでは、以下を使用できます。
%USERNAME%
-ユーザー名のみを取得します。
%USERDOMAIN%
-ユーザーのドメインを取得します。
PowerShellコマンドプロンプトまたは.ps1
または.psm1
スクリプトで、次を使用できます。
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-完全修飾ユーザー名(例:Domain \ Username)を提供します。これは、$Env
以下の他の変数のようにユーザーがオーバーライドできないため、最も安全な方法でもあります。
$Env:Username
-ユーザー名のみを取得します。
$Env:UserDomain
-ユーザーのドメインを取得します。
$Env:ComputerName
-コンピュータの名前を取得します。
%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
テスト用のバッチファイルを作成する際に、この方法を使用します。
echo %userdomain%\%username%
認証が必要な場合は、プレーンテキストでパスワードを含める必要があるため、他のユーザーがパスワードを表示できない、またはパスワードを見てもユーザーが影響を受けない完全にプライベートな環境でのみ使用します。
これが誰かを助けることを願っています。
Windowsには、who / whoami、sed、AWKなど、Unixの便利な小さなスクリプトユーティリティがいくつかないので、いつも困っています。とにかく、間違いのないものが必要な場合は、Visual Studio Expressを入手して以下をコンパイルします。
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
printf("%s", GetUserName());
}
そして、それをバッチファイルで使用してください。
net config Workstation | find "User name"
whoami
Windows Vista以降で利用できます。
ほとんどの場合、%USERNAME%変数で十分です。
echo %USERNAME%
ただし、管理者特権のコマンドシェルを実行している場合、%USERNAME%は自分のユーザー名ではなく管理者名を報告します。後者を知りたい場合は、次を実行:
for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
これは、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)
標準的なコンテキストでは、接続された各ユーザーはexplorer.exeプロセスを保持します。コマンド[tasklist / V | find "explorer"]は、explorer.exeプロセスの所有者を含む行を返します。値。これはWindows 7でも完全に動作します。
まれに、explorer.exeが別のプログラムに置き換えられた場合、このケースに一致するように検索フィルターを調整できます。コマンドが空の行を返す場合は、ユーザーがログオンしていない可能性があります。Windows 7では、[query session | find ">"]を実行することもできます。
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