簡単にユーザアカウントを作るバッチファイルのメモ


簡単にユーザアカウントを作るバッチファイルのメモ

かもなす<@kamonasu21c>
2021-04-21

概要

Windows10のローカルユーザは、作るのに意外と手間がかかります。共用PCなんかで複数のアカウントを作っていくとなると結構面倒です。そこで、コマンドプロンプトでユーザーアカウントを作る応用としてバッチファイルを作ってみました。

目的

私の所属するゼミには学生(10名未満)が共用で利用するPCが3台あり、これは大学のActive Directoryとは切り離されて運用されています。

これまではこのPCに一つだけローカルアカウントを作り、全員がそのアカウントを利用するという形態をとってきました。

ですが、新型コロナウイルスの流行などでGoogle ClassroomなどのLMSを利用するようになると、この運用では少々不都合が生じてきました。そこで、学生一人一人に個人アカウントを割り当てることとしました。

しかし、個人アカウントの割り当てを3台×人数分行うことは、非常に手間がかかります。そこで、その手間を省くために、今回バッチファイルを作成することとしました。

要件

  • 文系の学生でも簡単に操作できること。
  • 迅速にローカルアカウントを作成できること。

操作面

私の所属する研究室は文系研究室ですから学生の平均的なPCスキルは非常に低いです。そこで、そのような学生でも簡単に操作できるよう、疑似的なGUIとなるようにコメント機能を利用することにしました。

迅速さ

手間を省くことが目的ですから、ユーザ名とアカウントを入力するだけでローカルアカウントが作成できるように設計しました。

できたもの

次のバッチファイルを作成しました。

これを管理者権限で実行することにより、簡単にローカルアカウントを作ることに成功しました。

accountadd.bat
        @rem システム関係をイジるので、このパスに動かします。
cd C:\Windows\system32
    rem 名前を入れてください。
        @rem ユーザ名を入力させ、変数"Username"に格納する。
set /p Username="INPUT:"
    rem パスワードを入れてください。
        @rem パスワードを入力させ、変数"Password"に格納する。
set /p Password="INPUT:"
        @rem ユーザ名とパスワードが格納された変数をそれぞれ呼び出し、ローカルアカウントを作成する。
net user "%Username%" %Password% /add
        @rem 管理者権限で実行しないと動きません。
        @rem 変数名="INPUT:"で変数をユーザに入力させることができる。

解説

ここでは、記述した内容について解説することで、自分が次バッチファイルを書く時の忘備録としています。基本事項なので「知っとるわい!」という感じでしょうが許してください。私は勉強しながら書いたので。

@rem

@remは実行画面に表示されない、本当の意味でのコメントです。

一応これを読めばどこがどのように動いているかわかると思います。

rem

こちらもバッチファイルのコメントですが、こちらはecho offを記述しないかぎり、実行画面に表示されます。

実行画面に表示されることを逆手に取り、「名前を入れてください」などの文字列を表示させて疑似的なGUIにしています。

cd C:\Windows\system32

普通にコマンドプロンプトを管理者権限で起動すると勝手にこのパスから始まります。ですが、バッチファイル経由だと管理者権限で実行してもどうやらそのようにならないので、cd C:\Windows\system32を最初に記述して移動させています。

set /p 変数名="INPUT:"

バッチファイルでは`set /p 変数名="文字列"で変数に文字列を代入できるようです。

また、文字列の代わりに"INPUT:"とすると、ユーザがその場で入力した文字列を代入できます。

これによって疑似的な入力フォームを実現しています。

net user

net userはコマンドプロンプトでユーザアカウントを扱う基本的なコマンドです。

通常、

$ net user ユーザ名 パスワード /add

と入力するところに、

net user "%Username%" %Password% /add

という形で、先ほど定義した変数Usernameと変数Passwordを自動入力させるようにし、すぐにローカルユーザが作成されるようにしています。

"%Username%"

このように変数名をダブルクォーテーションでくくることにより、変数名の中にスペースが含まれていても正しく動作します。逆にくくらないと、Username="Kotori Otonashi"などとなったときに正しく動作しません。(Username="GoldShip"なら動きますが。)

おわりに

バッチファイルは簡単にかけ、予備知識ゼロで勉強しながらでしたが、すぐに書けてしまいました。これで作業効率はグンとあがりましたし、作業のやり方も簡単になったので、次年度以降後輩に運用を託すことができると思います。

あえて一か所苦しんだところといえば、ユーザ名で苗字と名前の間にスペースを入れると動作しなかったところでした。その旨Twitterに書き込んだところ、すぐに「ダブルクォーテーションでくくる!」と教えてくださったeXpresserさま(@eXpresser )に心より感謝いたします。

そういうわけで備忘録は以上になります。