【bat】バッチファイルでWindowsユーザーを作成・設定する方法完全ガイド|net user・グループ追加・一括作成・パスワードポリシーまで

「新入社員のPCセットアップのたびにユーザー作成を手作業で行っている」「複数台に同じアカウントを追加するのが面倒」――こうした作業はバッチファイルで完全に自動化できます。

本記事では net user コマンドの基本から、グループ追加・一括作成・パスワードポリシー対応の実践パターンまで体系的に解説します。

スポンサーリンク

目次

  1. net user コマンドの基本
  2. ユーザーを作成する(基本形)
  3. グループに追加する(net localgroup)
  4. ユーザー情報を確認・変更する
  5. 実践例A:対話式ユーザー作成スクリプト
  6. 実践例B:CSVから一括ユーザー作成
  7. 実践例C:管理者ユーザーの作成と完全設定
  8. 落とし穴5選
  9. FAQ
  10. まとめ

net user コマンドの基本

net user はWindowsに標準搭載されているユーザー管理コマンドです。ローカルユーザーの作成・変更・削除・一覧表示をコマンドラインで行えます。

重要: net user はすべての操作に管理者権限が必要です。バッチファイルを右クリック→「管理者として実行」するか、タスクスケジューラで「最上位の特権で実行する」を有効にしてください。管理者権限がない場合のエラーについてはバッチファイルで「アクセスが拒否されました」が出る場合の対処法を参照してください。

主なオプション一覧

コマンド 用途
net user ローカルユーザー一覧を表示
net user ユーザー名 指定ユーザーの詳細情報を表示
net user ユーザー名 パスワード /add ユーザーを作成
net user ユーザー名 新パスワード パスワードを変更
net user ユーザー名 /delete ユーザーを削除
net user ユーザー名 /active:no アカウントを無効化
net user ユーザー名 /active:yes アカウントを有効化
net user ユーザー名 /expires:never アカウントの有効期限を無制限に設定
net user ユーザー名 /passwordchg:no パスワード変更を禁止

ユーザーを作成する(基本形)

最もシンプルなユーザー作成コマンドです。

@echo off
:: 管理者権限で実行してください

net user "TaroYamada" "P@ssw0rd123!" /add

if %ERRORLEVEL%==0 (
    echo ユーザー TaroYamada を作成しました。
) else (
    echo エラー: ユーザーの作成に失敗しました。管理者権限で実行しているか確認してください。
)

パスワードにスペースや特殊文字(! @ # など)を含む場合はダブルクォートで囲んでください。クォートなしで特殊文字を使うと意図しない解釈をされる場合があります。

よく使う作成オプションをまとめて指定する

@echo off
:: フルネーム・コメント・パスワード無期限を一括設定
net user "TaroYamada" "P@ssw0rd123!" /add /fullname:"山田 太郎" /comment:"営業部" /passwordreq:yes /expires:never

if %ERRORLEVEL%==0 (
    echo ユーザーを作成しました。
) else (
    echo 作成に失敗しました。ERRORLEVEL: %ERRORLEVEL%
)

グループに追加する(net localgroup)

作成したユーザーを特定のグループに追加するには net localgroup を使います。

@echo off
set USERNAME=TaroYamada

:: Usersグループ(標準ユーザー)に追加
net localgroup "Users" "%USERNAME%" /add

:: 管理者グループに追加したい場合
:: net localgroup "Administrators" "%USERNAME%" /add

if %ERRORLEVEL%==0 (
    echo %USERNAME% を Users グループに追加しました。
) else (
    echo グループ追加に失敗しました。ERRORLEVEL: %ERRORLEVEL%
)

主なローカルグループと権限

グループ名 権限レベル 用途
Administrators 最高権限 システム管理者・全操作可能
Users 標準 一般ユーザー(デフォルト)
Guests 制限あり 一時的なゲストアクセス
Remote Desktop Users リモート接続 RDP接続を許可するユーザー
Power Users 中間権限 旧バージョン互換用(現在は非推奨)

ユーザー情報を確認・変更する

作成したユーザーの情報確認や変更もコマンドで行えます。

@echo off
:: ユーザー一覧を表示
echo === ローカルユーザー一覧 ===
net user
echo.

:: 特定ユーザーの詳細を表示
echo === TaroYamada の詳細 ===
net user "TaroYamada"

作成後の変更例:

@echo off
set USERNAME=TaroYamada

:: パスワードを変更
net user "%USERNAME%" "NewP@ss456!"

:: アカウントを無効化
net user "%USERNAME%" /active:no

:: フルネームを変更
net user "%USERNAME%" /fullname:"山田 太郎(異動)"

実践例A:対話式ユーザー作成スクリプト

ユーザー名とパスワードを対話入力して作成するスクリプトです。作成前に確認を挟み、誤操作を防ぎます。

@echo off
setlocal

:: 管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [エラー] 管理者権限が必要です。右クリック→「管理者として実行」で起動してください。
    pause
    exit /b 1
)

echo ========================================
echo  Windowsローカルユーザー作成ツール
echo ========================================
echo.

:: ユーザー名入力
set "USERNAME="
set /p "USERNAME=ユーザー名を入力してください: "
if "%USERNAME%"=="" (
    echo [エラー] ユーザー名を入力してください。
    exit /b 1
)

:: 既存ユーザーチェック
net user "%USERNAME%" >nul 2>&1
if %ERRORLEVEL%==0 (
    echo [エラー] ユーザー %USERNAME% はすでに存在します。
    exit /b 1
)

:: パスワード入力
set "PASSWORD="
set /p "PASSWORD=パスワードを入力してください: "
if "%PASSWORD%"=="" (
    echo [エラー] パスワードを入力してください。
    exit /b 1
)

:: フルネーム入力
set "FULLNAME="
set /p "FULLNAME=フルネーム(例: 山田 太郎)を入力してください: "

:: 管理者権限付与の確認
choice /c YN /m "Administrators グループに追加しますか"
set ADMIN_FLAG=%ERRORLEVEL%

:: 確認
echo.
echo === 作成内容 ===
echo   ユーザー名: %USERNAME%
echo   フルネーム: %FULLNAME%
if %ADMIN_FLAG%==1 (
    echo   グループ:   Administrators(管理者)
) else (
    echo   グループ:   Users(標準ユーザー)
)
echo.

choice /c YN /m "この内容でユーザーを作成しますか"
if ERRORLEVEL 2 (
    echo キャンセルしました。
    exit /b 0
)

:: ユーザー作成
net user "%USERNAME%" "%PASSWORD%" /add /fullname:"%FULLNAME%" /expires:never
if %ERRORLEVEL% neq 0 (
    echo [エラー] ユーザーの作成に失敗しました。
    exit /b 1
)

:: グループ追加
if %ADMIN_FLAG%==1 (
    net localgroup "Administrators" "%USERNAME%" /add
) else (
    net localgroup "Users" "%USERNAME%" /add
)

echo.
echo [完了] ユーザー %USERNAME% を作成しました。
echo [%date% %time%] ユーザー作成: %USERNAME% >> C:\Logs\user-manage.log
endlocal

y/n確認の実装についてはバッチファイルでy/n確認による処理分岐を実現する方法も参照してください。

実践例B:CSVから一括ユーザー作成

大量ユーザーを一括作成する場合はCSVファイルから読み込む方法が効率的です。CSVの形式は ユーザー名,パスワード,フルネーム,グループ とします。

:: users.csv の内容例:
:: TaroYamada,P@ss001!,山田太郎,Users
:: HanakoSuzuki,P@ss002!,鈴木花子,Administrators
:: JiroTanaka,P@ss003!,田中次郎,Users
@echo off
setlocal enabledelayedexpansion

:: 管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [エラー] 管理者権限が必要です。
    exit /b 1
)

set CSVFILE=users.csv
set LOGFILE=C:\Logs\user-create-%date:~0,4%%date:~5,2%%date:~8,2%.log
set SUCCESS=0
set FAIL=0

if not exist "%CSVFILE%" (
    echo [エラー] CSVファイルが見つかりません: %CSVFILE%
    exit /b 1
)

echo [%date% %time%] 一括ユーザー作成開始 >> %LOGFILE%

for /f "usebackq skip=0 tokens=1,2,3,4 delims=," %%A in ("%CSVFILE%") do (
    set UN=%%A
    set PW=%%B
    set FN=%%C
    set GR=%%D

    :: 空行スキップ
    if "!UN!"=="" goto :continue

    :: 既存チェック
    net user "!UN!" >nul 2>&1
    if !ERRORLEVEL!==0 (
        echo [SKIP] !UN! はすでに存在します。 >> %LOGFILE%
        echo [SKIP] !UN!
        goto :continue
    )

    :: ユーザー作成
    net user "!UN!" "!PW!" /add /fullname:"!FN!" /expires:never >nul 2>&1
    if !ERRORLEVEL!==0 (
        net localgroup "!GR!" "!UN!" /add >nul 2>&1
        echo [OK] !UN! 作成完了 >> %LOGFILE%
        echo [OK] !UN!
        set /a SUCCESS+=1
    ) else (
        echo [FAIL] !UN! 作成失敗 >> %LOGFILE%
        echo [FAIL] !UN!
        set /a FAIL+=1
    )
    :continue
)

echo.
echo 完了: 成功 %SUCCESS% 件 / 失敗 %FAIL% 件
echo [%date% %time%] 完了: 成功 %SUCCESS% 件 / 失敗 %FAIL% 件 >> %LOGFILE%
endlocal

実践例C:管理者ユーザーの作成と完全設定

新しい管理者アカウントを作成し、セキュリティ面も考慮した完全設定を行うスクリプトです。セットアップ用スクリプトとして活用できます。

@echo off
setlocal

:: 管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [エラー] 管理者権限が必要です。
    pause
    exit /b 1
)

:: ===== 設定 =====
set USERNAME=AdminUser
set PASSWORD=Adm!nP@ss2024
set FULLNAME=管理者アカウント
set COMMENT=システム管理用アカウント
:: =================

echo [1/5] ユーザー作成中...
net user "%USERNAME%" "%PASSWORD%" /add /fullname:"%FULLNAME%" /comment:"%COMMENT%" /expires:never /passwordchg:no
if %ERRORLEVEL% neq 0 (
    echo [エラー] ユーザー作成に失敗しました。
    exit /b 1
)

echo [2/5] Administrators グループに追加中...
net localgroup "Administrators" "%USERNAME%" /add

echo [3/5] ゲストアカウントを無効化中...
net user "Guest" /active:no

echo [4/5] 設定を確認中...
net user "%USERNAME%"

echo [5/5] 完了。
echo.
echo ユーザー %USERNAME% を管理者権限で作成しました。
echo セキュリティのため、初回ログイン後にパスワードを変更してください。
endlocal

落とし穴5選

落とし穴1:管理者権限なしで実行するとエラーコード5(アクセス拒否)

net user を一般ユーザー権限で実行すると「システム エラー 5 が発生しました。アクセスが拒否されました。」と表示されます。スクリプト冒頭で net session >nul 2>&1 を実行してERRORLEVELをチェックし、権限不足の場合は早期終了するのがベストプラクティスです。詳しくはアクセスが拒否されたときの対処法を参照してください。

:: 管理者権限チェックの定番パターン
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo 管理者権限が必要です。
    exit /b 1
)

落とし穴2:パスワードがポリシーに違反するとエラーコード2245

Windowsのパスワードポリシーが有効な環境では、「パスワードがパスワード ポリシーの要件を満たしていません」(エラー2245)が発生します。パスワードポリシーは通常「8文字以上・英大文字・英小文字・数字・記号を組み合わせる」という要件です。スクリプトに埋め込むパスワードはこの要件を満たすものを使用するか、ポリシーを事前に確認してください。

落とし穴3:ユーザー名に使えない文字がある

ユーザー名に / \ [ ] : ; | = , + * ? < > @ などの記号は使用できません。また20文字を超えるユーザー名は作成できません。スペースも使用不可です。

落とし穴4:すでに存在するユーザーに /add すると上書きではなくエラー

net user 名前 パスワード /add は同名ユーザーが既存の場合エラー(コード2224)になります。既存チェックをせずに一括作成スクリプトを実行すると途中でエラーが出て後続処理が止まる場合があります。net user "名前" >nul 2>&1 で存在確認してから実行してください。

:: 既存チェックのパターン
net user "%USERNAME%" >nul 2>&1
if %ERRORLEVEL%==0 (
    echo %USERNAME% はすでに存在します。スキップします。
) else (
    net user "%USERNAME%" "%PASSWORD%" /add
)

落とし穴5:パスワードに ! や ^ を含む場合のエスケープ

setlocal enabledelayedexpansion が有効な環境では ! が遅延展開の特殊文字として解釈されます。パスワード変数に ! を含む場合、展開時に文字が消える問題が発生します。パスワードを直接コマンドに記述するか、遅延展開を使わないブロック内で処理してください。

FAQ

ドメインユーザーの作成はできますか?
net user はローカルユーザーの管理コマンドです。ドメインユーザーを作成するには net user /domain フラグを追加するか、Active Directoryに参加している環境では dsadd user コマンドを使用します。
パスワードの有効期限を設定したい
net user ユーザー名 /expires:MM/DD/YYYY でアカウントの有効期限を設定できます。パスワードの有効期限は net accounts /maxpwage:日数 でシステム全体のポリシーとして設定します(例:/maxpwage:90 で90日)。
作成したユーザーをすぐに削除するには?
net user ユーザー名 /delete で削除できます。削除の詳細はバッチファイルでユーザーを削除する方法を参照してください。
リモートコンピュータのユーザーを作成できますか?
net user /domain または PsExec(SysInternals)を使ってリモートで実行できます。ただしファイアウォールやUACの制約を受けることが多く、PowerShellのリモートセッション(Invoke-Command)の方が確実です。
作成ログを自動で残したい
net user 実行後に echo [%date% %time%] ユーザー作成: %USERNAME% >> log.txt でログに追記できます。成功・失敗をERRORLEVELで判定して記録するとより詳細なログになります。
バッチ完了後にWindowsサービスとして自動起動させたい
特定のサービスを特定ユーザーで実行させたい場合は、サービスのログオンアカウントを sc config サービス名 obj= ".\ユーザー名" password= "パスワード" で変更できます。サービス操作全般についてはバッチファイルでWindowsサービスを管理する方法を参照してください。

まとめ

やりたいこと コマンド・パターン
ユーザーを1件作成する net user 名前 パスワード /add
管理者グループに追加する net localgroup "Administrators" 名前 /add
対話式で確認しながら作成する 実践例A(set /p + CHOICE)
CSVから一括作成する 実践例B(for /f + CSV読み込み)
管理者アカウントを完全設定する 実践例C(net user + localgroup)

net user はWindowsのユーザー管理に欠かせないコマンドです。本記事のスクリプトをベースに、現場の要件に合わせてカスタマイズしてご利用ください。