Windows(Vista、7など)システムのすべてのユーザーアカウントを一覧表示して、後続のコマンドでユーザーアカウントを反復処理できるようにしたいと考えています。
Net User
は検索対象のデータを提供しますが、ユーザーの解析を困難にする他のジャンクを追加します。
理想的には、次のような出力を受け取ります。
> usercommand
user1
user2
user3
Windowsコマンドラインで厳密にユーザーを反復処理する場合、最も簡単な方法は、wmic
とfor
ループの組み合わせです。
for /f "tokens=* skip=1" %%a in ('wmic UserAccount get Name') do (
if not "%%a"=="" (
:: %%a is a variable containing an account name
)
)
コマンドの中心はwmic UserAccount get Name
、アカウントのリストを出力する必要があります。 KaranがVBScriptの回答で行ったように、wmic UserAccount where "LocalAccount=True" get Name
。どのフィールドもフィルター可能です。それらすべてを表示するには、wmic UserAccount get
(Name
を省略)。
for
ループは、単にコマンド出力を解析するために使用されます。最初の行はスキップされ(列見出しが出力されます)、最後の行は空なので、if
コマンドでスキップされます。見る for /?
詳細については。
コマンドラインでマシン上のすべてのユーザーを一覧表示する方法を探しているだけで、ループを必要としない人のために。次のコマンドを実行するだけです:
Net User
そして、それはあなたがこのフォーマットで必要なものを出力します
-------------------------------------
User1 User2 User3 User4
The command completed successfully.
これは文字通りあなたが求めているものを出力します:
dir/b C:\ Users
このWindows PowerShellスクリプトは、ユーザーのリストを表形式で提供します。これは、探しているものではありませんが、出力をフィードに使用できる形式に再フォーマットすることはそれほど難しくありません。別のコマンドに。
$computerName = "$env:computername"
$computer = [ADSI]"WinNT://$computerName,computer"
$computer.psbase.Children | Where-Object { $_.psbase.schemaclassname -eq 'user' } | Format-Table Name, Description -autoSize
以下をGetLocalUsers.vbsのような名前で保存します。
Set colItems = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_UserAccount Where LocalAccount=True")
For Each objItem in colItems
Wscript.Echo objItem.Name
Next
コマンドラインから次のように実行します。
cscript //NoLogo GetLocalUsers.vbs