- PR -

非AD環境の Windows Server 2003 にユーザーアカウントを一括登録する方法

投稿者投稿内容
チャブーン
大ベテラン
会議室デビュー日: 2006/11/25
投稿数: 149
投稿日時: 2006-11-26 18:06
チャブーンです。はじめまして。

さて、もう答えはでているようですが、参考として旧来の net user を使ったコマンドを掲載しておきましょう。どこかの掲示板に私が投稿した過去ログですので、見たことがある方もいるかもしれません。

----
' For /F 文で CSV ファイルから該当文字列を変数代入し、
' net user コマンドで利用する
' CSV ファイルには 1列ごとに アカウント名,パスワード,フルネーム
' とすること

For /F "tokens=* delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k /domain
)
----

これをバッチとして保存し、同じディレクトリ UserData.csv を所定の方法で書いておくことで、うまくいくと思います。詳細が知りたい場合、For /? から文法を押さえておくと、応用がききますね。
Yuki
会議室デビュー日: 2005/09/01
投稿数: 15
お住まい・勤務地: Tokyo <-> Tokyo
投稿日時: 2006-11-27 11:30
チャブーン様、ご助言ありがとうございます。

引用:

チャブーンさんの書き込み (2006-11-26 18:06) より:

さて、もう答えはでているようですが、参考として旧来の net user を使ったコマンドを掲載しておきましょう。どこかの掲示板に私が投稿した過去ログですので、見たことがある方もいるかもしれません。

----
' For /F 文で CSV ファイルから該当文字列を変数代入し、
' net user コマンドで利用する
' CSV ファイルには 1列ごとに アカウント名,パスワード,フルネーム
' とすること

For /F "tokens=* delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k /domain
)
----

これをバッチとして保存し、同じディレクトリ UserData.csv を所定の方法で書いておくことで、うまくいくと思います。詳細が知りたい場合、For /? から文法を押さえておくと、応用がききますね。



UserData.csvを用意して試してみたのですが、うまく登録されませんでした。
再度コマンドプロンプトから実行してみたところ「%%i」の使い方が誤っているという
メッセージが出たので「%%i」から「%i」に変更して実行してみましたところ
次のメッセージになりました。

'CSVファイル
 Username,Password,フルネーム

コード:
 C:\test>For /F "tokens=* delims=," %i in (UserData.csv) Do ( net user %i %j /add /Fullname:%k /domain )

'結果
 C:\test>(net user Username,Password,フルネーム %j /add /Fullname:%k /domain )
 このコマンドの構文は次のとおりです:

 NET USER
 [ユーザー名 [パスワード | *] [オプション]] [/DOMAIN]
          ユーザー名 {パスワード | *} /ADD [オプション] [/DOMAIN]
          ユーザー名 [/DELETE] [/DOMAIN]


表題の件は解決しておりますが、後学の為にご助言いただけると助かります。
チャブーン
大ベテラン
会議室デビュー日: 2006/11/25
投稿数: 149
投稿日時: 2006-11-27 14:47
チャブーンです。

> 再度コマンドプロンプトから実行してみたところ「%%i」の使い方が誤っているという
> メッセージが出たので「%%i」から「%i」に変更して実行してみましたところ
> 次のメッセージになりました。

まず、"%" の使い方ですが、単にコマンドプロンプトで実行する場合は % ですが、バッチファイルに記載する場合は、そのままでは特別な文字として (意図されたように) 認識されません。この場合 %% とすることで、コマンドプロンプトで % とするのと同じようになります。このコードはバッチファイル (.bat) に記載する前提で書いてあります。

> '結果
>  C:\test>(net user Username,Password,フルネーム %j /add /Fullname:%k /domain )
>  このコマンドの構文は次のとおりです:

これは、私の間違いです。スクリプトがドメインコントローラに適用させる前提で書いてあったことを忘れていました。以下の内容で大丈夫だと思いますよ。

----
' For /F 文で CSV ファイルから該当文字列を変数代入し、
' net user コマンドで利用する (ワークグループ)
' CSV ファイルには 1列ごとに アカウント名,パスワード,フルネーム
' とすること

For /F "tokens=* delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k
)
----
Yuki
会議室デビュー日: 2005/09/01
投稿数: 15
お住まい・勤務地: Tokyo <-> Tokyo
投稿日時: 2006-11-27 15:35
チャブーン様、引き続きのご助言ありがとうございます。
引用:

まず、"%" の使い方ですが、単にコマンドプロンプトで実行する場合は % ですが、バッチファイルに記載する場合は、そのままでは特別な文字として (意図されたように) 認識されません。この場合 %% とすることで、コマンドプロンプトで % とするのと同じようになります。このコードはバッチファイル (.bat) に記載する前提で書いてあります。


これは大変失礼しました。
コマンドで確認するなら %% を % に変更して良かったのですね。

引用:

これは、私の間違いです。スクリプトがドメインコントローラに適用させる前提で書いてあったことを忘れていました。以下の内容で大丈夫だと思いますよ。

----
' For /F 文で CSV ファイルから該当文字列を変数代入し、
' net user コマンドで利用する (ワークグループ)
' CSV ファイルには 1列ごとに アカウント名,パスワード,フルネーム
' とすること

For /F "tokens=* delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k
)
----


ご提示いただいたコマンドをそのままbatファイルにして、CSVと同じディレクトリから
実行したところ(c:\test\)やはりうまく登録ができませんでした。
一瞬表示されるコマンドプロンプトの画面をスクリーンショットに取ってみたところ
以下のようなメッセージが表示されておりました。
コード:
 C:\test>(net user Username,Password,フルネーム %j /add /Fullname:%k  )
 このコマンドの構文は次のとおりです:

 NET USER
 [ユーザー名 [パスワード | *] [オプション]] [/DOMAIN]
          ユーザー名 {パスワード | *} /ADD [オプション] [/DOMAIN]
          ユーザー名 [/DELETE] [/DOMAIN]


テストに Windows XP SP2 を使用しているのが問題だったりするのでしょうか。
チャブーン
大ベテラン
会議室デビュー日: 2006/11/25
投稿数: 149
投稿日時: 2006-11-27 16:14
チャブーンです。

> ご提示いただいたコマンドをそのままbatファイルにして、CSVと同じディレクトリから
> 実行したところ(c:\test\)やはりうまく登録ができませんでした。
> 一瞬表示されるコマンドプロンプトの画面をスクリーンショットに取ってみたところ
> 以下のようなメッセージが表示されておりました。

ふむ。内容から、本来 "," を区切りに変数をそれぞれ読み込まなければいけないところ、"Username,Password,フルネーム" がひとつの値として読み込まれてしまってますね。

私のコードに問題があります。手直ししますので、しばしお待ちください。。。
チャブーン
大ベテラン
会議室デビュー日: 2006/11/25
投稿数: 149
投稿日時: 2006-11-27 16:38
チャブーンです。

まったくしょぼいデバッグで申し訳ない。いかでよいはずです。

----
For /F "tokens=1-3 delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k
)
----

ただし、CSV ファイルでフルネームで設定するとき、姓と名の間にスペースがあるなら、"(ダブルクォーテーション) でくくらないと失敗します。設定項目が増やしたいなら、%%変数と tokens= 設定を変更すればいいでしょう。
Yuki
会議室デビュー日: 2005/09/01
投稿数: 15
お住まい・勤務地: Tokyo <-> Tokyo
投稿日時: 2006-11-27 17:04
チャブーン様、お付き合いくださってありがとうございます。
引用:

チャブーンさんの書き込み (2006-11-27 16:38) より:
----
For /F "tokens=1-3 delims=," %%i in (UserData.csv) Do (
net user %%i %%j /add /Fullname:%%k
)
----

ただし、CSV ファイルでフルネームで設定するとき、姓と名の間にスペースがあるなら、"(ダブルクォーテーション) でくくらないと失敗します。設定項目が増やしたいなら、%%変数と tokens= 設定を変更すればいいでしょう。


ご提示いただいたコマンドで正常に登録できました。
後は、「ユーザーはパスワードを変更できない」「パスワードを無期限にする」等の
オプションを有効にする方法を少し模索してみたいと思います。

最後までお付き合いくださってありがとうございました。
チャブーン
大ベテラン
会議室デビュー日: 2006/11/25
投稿数: 149
投稿日時: 2006-12-05 03:57
チャブーンです。

最後までしょぼい回答で、申し訳ないですが。

> 後は、「ユーザーはパスワードを変更できない」「パスワードを無期限にする」等の
> オプションを有効にする方法を少し模索してみたいと思います。

残念ながら、「パスワードを無期限にする」オプションについては設定できません。これは単に net user コマンドで設定項目がないためです。これ以外にもいくつかの項目は net user コマンドでは設定できないので、ユーザアカウントとパスワードのすべての項目を設定したいときには、ADSI スクリプト (WinNTプロバイダ) で対応することになりますね。

ADSI が敷居が高いと感じる人も中にはいるので、要件があえばいかが?程度のご紹介でした。

スキルアップ/キャリアアップ(JOB@IT)