Windowsマシンのローカルユーザー(ローカルアカウント)をバッチで作成したい場合。

投稿者: | 2019年11月3日

自分備忘録

自分用備忘録。Windows のローカルマシンにバッチでユーザーを作る方法です。
マイクロソフトアカウンではないです。Active Directoryのユーザーでもなくて、単に、シルベスタ・スタンドアローン状態で使うとか、セットアップ時にローカルユーザーが要るような場面でユーザーを作りたいときのバッチです。
想定しているのは、「複数のマシンで同じユーザーを同じパスワードで使いたいから、バッチをUSBメモリとかに入れておいて片っ端から実行する」ような場面です。何らかの事情でドメインに入れないけれど同じユーザーを複数のPCやサーバーに作っておきたいということはあるでしょう。クローズドネットワークとか別の理由でドメインに入れられないとか、小規模な会社でドメイン立ててないとか。

結論のバッチ

Administrators と Remote Desktop Users に入れたユーザーと、一般ユーザーで Remote Desktop Users に入れたユーザーを、『パスワードを設定し、無期限にして作成する』場合。


set user1=ladmin
set user1_admin=1
set user1_remote=1
set pw1=”!QAZ2wsx”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

set user1=luser
set user1_admin=0
set user1_remote=1
set pw1=”!QAZ2wsx”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

特段の事情がない限り、Administratorsに入れておけば、Remote Desktop Usersに入れる必要はありません。
上記では、意図的にやっています。

Administrators のユーザーを作成する例でパスワードは毎回手入力する場合。


set user1=ladmin2
set user1_admin=1
set user1_remote=0
set /P pw1=”input admin passowrd”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

一般ユーザーをまとめて作る場合。


set userlist=luser11 luser12 luser13 luser14 luser15
set user1_admin=0
set user1_remote=1
set pw1=”!QAZ2wsx”
for %%u in (%userlist%) do (
net user %%u %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%%u'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %%u /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %%u /add )
)
pause

なお、どのスクリプトでも共通ですが、パスワードを次回入力時に変更させたい場合は以下のように変えてください。/logonpasswordchg:yes を追加、PasswordExpiresのある行は REM 文にして実行しないようにしています。


net user %user1% %pw1% /add /active:yes /expires:never /workstations:* /logonpasswordchg:yes
REM wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE

簡単なコマンドの解説

set文はパラメータのセットをします。
これらでは、user1 はユーザー名をセットします。日本語名など2バイトは考慮していません。つい最近、メモ帳の既定の文字コードがUTF-8になっているため、日本語を使う場合は気をつけてください。それ以前に、バグも出たようですし、ユーザー名に日本語使うのはやめときましょう。

user1_adminは =1 なら管理者(Administratorsグループ)に加えるIF文で判断する際に使います。同じく、user1_remoteも =1 ならばRemote Desktop Usersに入れます。
どちらもいらないなら = のあとを 0 でも 9 でも 1ではない数字にしておいてください。

パスワードを毎回入力して設定する(パスワードを入れてばらまきたくない)場合は、 set /P とすると入力を促します。記号の場合、特に試したのはダブルクォーテーションだけですが、入力したらバッチが正常に動かないものもあります。


net user %user1% %pw1% /add /active:yes /expires:never /workstations:*

これでユーザーを、指定のパスワードで作成。有効化してアカウントの有効期限も設定しないというところで、これでやっといてください。


wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE

パスワードを無期限にしています。

net localgroup /add コマンドで、ローカルマシンのグループに入れているのも、ここに来た人なら見ればわかるでしょう。

Administrators と Remote Desktop Users に入れたユーザーと、一般ユーザーで Remote Desktop Users に入れたユーザーを、『パスワードを設定し、無期限にして作成する』場合

バッチを再掲します。


set user1=ladmin
set user1_admin=1
set user1_remote=1
set pw1=”!QAZ2wsx”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

set user1=luser
set user1_admin=0
set user1_remote=1
set pw1=”!QAZ2wsx”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

pauseで止めるのは確認のため。(好みの問題です)
フラグの説明は上記のとおりです。user1 のところにはユーザー名を入れてください。安直に、 ladim と luser としています。
パスワードは、ダブルクォーテーションで囲っています。!QAZ2wsx を推奨しているわけではありません。ブルートフォースアタックを試すソフトでは最初の方に試されるので、あっさり陥落します。

2ユーザーくらいならそのままコピーして2つ書いたほうが簡単なのと、管理者と一般ユーザーを作る場合はフラグを切り分けなければならないので、このように書いています。

最初はユーザーがいません。

バッチを作ります。

管理者権限で実行します。

Pauseの2行では止まります。確認してEnterを押してください。

できあがり。

できたユーザーを確認します。

(ladminのパスワードは無期限)

(ladminはAdministratorsに入っています)

(luserもパスワードは無期限)

(luserはAdministratorsには入っていません)

Administrators のユーザーを作成する例でパスワードは毎回手入力する場合


このポイントは、 set pw1 のところが set /P pw1 となっている点です。
毎回、パスワード入力です。入力値を隠すわけではないので肩越しに見られてしまう可能性はあります。バッチファイルをまんまメールしなきゃいけないようなケースでは、流石にパスワードは埋め込みたくないもの。マシンによってパスワードは変えたいというケースでも使えるでしょう。

(バッチを再掲します。)


set user1=ladmin2
set user1_admin=1
set user1_remote=0
set /P pw1=”input admin passowrd”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

今回は、こんなバッチです。

これも管理者で実行します。

実行すると、プロンプトが入力を促してきます。
set /P pw1=”input admin passowrd”としたのでinput admin passowrdが出ています。

パスワードを入力し、Enterを押します。

バッチが進んでユーザーが作成されます。

ladmin2ができています。

一般ユーザーをまとめて作る場合

ユーザー名(アカウント名)を変えていくつもつくる場合です。
全部が一般ユーザーで(全部をAdministratorsに入れることもできますが、選択して入れることはできません)、パスワードも同一、全部 Remote Desktop Usersに入れます。

この場合だと、パスワードを初回入力時に変更させたいというケースもあるかもしれません。
その場合は、該当する2行を書き換えてください。(再掲)
/logonpasswordchg:yes を追加、PasswordExpiresのある行は REM 文にして実行しないようにしています。


net user %user1% %pw1% /add /active:yes /expires:never /workstations:* /logonpasswordchg:yes
REM wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE

書き換えの内容は口述します。ここでは、ユーザーを一度に作るバッチとして以下のものを書きました。


set userlist=luser11 luser12 luser13 luser14 luser15
set user1_admin=0
set user1_remote=1
set pw1=”!QAZ2wsx”
for %%u in (%userlist%) do (
net user %%u %pw1% /add /active:yes /expires:never /workstations:*
wmic useraccount where “name=’%%u'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %%u /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %%u /add )
)
pause

ここでは、作るユーザーを set userlist= として、スペースを間に入れて作るだけ並べています。

バッチを作りました。

これも管理者で実行します。

結果がでます。大量のユーザーを作るとスクロールが足りなくなるかもしれません。

複数のユーザーができています。

プロパティを見ると、こんな感じです。

この処理で、作るユーザーをテキストファイルに羅列した場合、
for 文を for /F %%u in ( 入力ファイル ) do ( とすれば、ファイルから入力もできるはずです。変更したい人は調べてみてください。

また、フラグと合わせて二次配列とする方法もあるようですが、この程度のバッチでそこまで凝る必要はないと思うので、一度きりなら面倒くさいこと考えないで済むようにしました。

パスワードを初回変更させるようにする

何度か書いているとおり、少し書き換えて、以下のようにしました。


set user1=luser21
set user1_admin=0
set user1_remote=1
set pw1=”!QAZ2wsx”
net user %user1% %pw1% /add /active:yes /expires:never /workstations:* /logonpasswordchg:yes
REM wmic useraccount where “name=’%user1%'” set PasswordExpires=FALSE
IF %user1_admin% == 1 ( net localgroup Administrators %user1% /add )
IF %user1_remote% == 1 ( net localgroup “Remote Desktop Users” %user1% /add )
pause

結果は、「ユーザーは次回ログオン時にパスワードの変更が必要」にチェックが入り、「パスワードを無期限にする」はグレーアウトしています。