web-dev-qa-db-ja.com

コマンドプロンプトから現在のWindowsドメインユーザーの表示名を取得する

コマンドプロンプトから、現在ログインしているドメインユーザーのわかりやすい表示名( "john.doe"ではなく "John Doe")を取得するにはどうすればよいですか?

9
skeletank

次に、バッチファイルでnetコマンドとfindコマンドを使用して行ったトリッキーな方法を示します。

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

1行目には、実行するコマンドを変数に格納します。ユーザー名を環境変数から取得し、Net Userコマンドと/domainパラメータに渡して、現在のドメインから取得するように指示します。次に、現在のユーザーに関する一連のデータであるその結果を、必要なプロパティのみを取得するfindメソッドにパイプ処理します。検索結果は、「フルネームJohn Doe」の形式です。 2行目はコマンドを実行し、結果を変数fullNameTextに入れます。 3行目は、結果の「フルネーム」部分を削除し、「John Doe」で終わります。 forループを含む4行目では、結果からすべての先行スペースが削除され、fullName変数に「John Doe」が含まれます。

11
skeletank

1つの文字列でのLectrodeの回答は次のようになります。

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

これは、言語に依存する「フルネーム」の出力に依存せずにdsqueryとdsgetを使用するクリーンな方法である必要があります。「fn」は、異なる言語バージョンのウィンドウで動作するようです。

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

Dsget -Lスイッチは、リストされた出力 "fn:USER"を提供するため、残っているのは、出力の2番目の列を取得することだけです。 find "fn:"は、 "dsget successful"の出力を取り除くために使用されます。

2
done

受け入れられた回答(投稿時)には4行のコードがありますが、同じことを行うのに必要なコードは1行だけです。

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

これは、フルネームに2つ以上の部分がある場合でも機能します。 「そのまま」Windowsワークステーションで動作し、管理者権限を必要としません。

注:バッチファイルで使用する場合は、%nおよび%oをそれぞれ%%nおよび%%oに変更することを忘れないでください。

コマンドの説明:

"tokens=2*は、注目する唯一のトークンが2番目のトークン(%nに割り当てられている)とそれ以降のすべて(次の文字に割り当てられている:%o)であることを指定します。

デフォルトのdelimsはスペースなので、定義する必要はありませんが、手動で定義する必要がある場合は、次のようになります:"tokens=2* delims= "。スペースは区切り文字であるため、先頭のスペースはすべて無視されます。

パイプ(|)はニンジン(^)によってエスケープされ、コマンドプロセッサに最初は無視するように指示します。

(テストでは)より高速なコマンドであることがわかったため、FINDSTRではなくFINDを使用することも好みます。これは、頻繁に使用すると違いが出る可能性があるためです。必要に応じて、FINDSTR /C:"Full Name"FIND "Full Name"に簡単に置き換えることができます。

2
Lectrode

人間が使用したい場合-自動的に解析する必要がないため、フルネームだけを取得-Net User <username> /domainコマンドプロンプトで、「氏名」フィールドを読みます。

参照: コマンドラインから詳細なドメインユーザー情報を取得する

0
cp.engr

Set pとgotoを使用してアクションを選択することにより、いくつかのことをすばやく実行するバッチファイルを作成しました。不要な部分は省いております。

@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

お役に立てば幸いです。

0
Errant

リモートコマンドプロンプト(通常はPSexec.exeを使用してこれを確立します)から、「query user」と入力します。

enter image description here

0
Tony D.