• ベストアンサー

WSHでテキストファイルの値を代入

WSHについての質問です。 環境はwindows2003サーバです。 初歩的な質問かと思いますが・・・ マイクロソフトのサイトで、 WSHでユーザアカウントを作成するサンプルが ありまして、 http://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/manage/usmgvb05.mspx (以下スクリプト) Set objOU = GetObject("LDAP://OU=management,dc=fabrikam,dc=com") Set objUser = objOU.Create("User", "cn=MyerKen") objUser.Put "sAMAccountName", "myerken" objUser.SetInfo これで1人分のアカウントを作成できるわけですが、 他のテキストファイルに複数のユーザの情報を記入し、 それを自動的に連続して読み込んで、 複数ユーザを一気に作成するには、 どのようなコードを書けばよいでしょうか。 用意するテキストファイルは下記のようなものです。 OU名,ユーザ名 newou,user1 newou,user2 newou1,user101 ・   ・ ・   ・ ・   ・ (任意の値が入ります) スクリプトの、ユーザ情報の部分をカスタマイズして テキストの1行目から代入して、 それを繰り返すコードにすればよいのでしょうが、 わかりません・・・ ヒントだけでも助かります。どうかよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

お疲れさまです。 ・LDAPオブジェクトを取得する(GetObject) ・ファイルを開く ・ファイルの終端になるまで繰り返す  ・1行を読み込み、OU名とユーザー名を変数に入れる  ・先頭で取得したLDAPオブジェクトと上記の変数を使い、ユーザーを登録する ・繰り返し ・ファイルを閉じる ・LDAPオブジェクトを解放する ここらへんが参考になりそうですね。 http://www.whitire.com/vbs/tips0072.html あとは、カンマの位置を取得して、OU名とユーザー名をどう切り分けるかというところでしょうか。 がんばってください。

goomod2
質問者

お礼

お礼の掲載にあたり、ソース中盤の自サーバのdc名を修正する際、 上書きしてしまいOUへの代入がありませんでした。 正しくは、下記の通りでした。 ありがとうございました。 Set objOU = GetObject("LDAP://OU=" & strValue(0) & ",dc=fabrikam,dc=com") Set objUser = objOU.Create("User", "cn=" & strValue(1)) 'AD上の表記名 objUser.Put "sAMAccountName", strValue(1) 'ログインユーザネーム objUser.SetInfo lastmsg = lastmsg & "," & strValue(1)

goomod2
質問者

補足

早速ご回答いただき、 ありがとうございました。 大変参考になりました。 いただいたURLのサンプルを元に下記のソースを書いてみました。 とりあえず、やりたいことは実現できました。 プログラムに慣れていないため、 ソースは美しくないように思います。 ou名とユーザ名の切り分けはspiltを使いましたが、 こうすればもっといい、というヒントがもしあれば ご指摘いただくと助かります。 本当に、本当にありがとうございました。 ************************ Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim strValue ' 各レコードのユーザ名 Dim objUser ' OU.Create Dim objOU ' GetObject Dim lastmsg ' 処理終了後の確認メッセージ Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("usrlist.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True strValue = objFile.ReadLine strValue = Split(strValue, ",", -1, vbTextCompare) 'spiltでデリミタを","で配列に格納 Set objOU = GetObject("LDAP://OU=management,dc=fabrikam,dc=com") Set objUser = objOU.Create("User", "cn=" & strValue(0)) 'AD上の表記名 objUser.Put "sAMAccountName", strValue(0) 'ログインユーザネーム objUser.SetInfo lastmsg = lastmsg & "," & strValue(0) '追加したユーザの一覧 Loop WScript.Echo lastmsg & "のユーザを処理しました" 'メッセージ表示 objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objOU = nothing objUser = Nothing

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ファイルI/OについてはFileSystemObjectでアクセスしてください、 あとは配列に落として、FOR~NEXTステートメントで処理すると よいでしょう。 MSDNで調べてもいいですし、ググればかなりヒットすると思います

goomod2
質問者

お礼

さっそくご回答いただき、 ありがとうございました。 大変参考になりました。

関連するQ&A

  • ActiveDirectoryにおけるパスワード一括登録

    Windows2003Serverで構築したActiveDirectoryにおいて、1000以上のアカウントに対してパスワードを一括登録したいと思っています。 色々検索した結果、マイクロソフトのスクリプトセンターで見つけたWSHで実施するのが簡単そうです。 http://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/pwds/uspwvb01.mspx そこにあったサンプルは以下で、3行になっています。 Set objUser = GetObject _ ("LDAP://cn=MyerKen,ou=management,dc=fabrikam,dc=com") objUser.SetPassword "i5A2sj*!" WSHのことは初心者のため、初歩的な質問で恐縮ですが、 上記スクリプトを1行で記述したいのですが、「_」のところでエラーになってしまいます。 どのように変更したらいいのでしょうか? 1000以上のデータをEXCLEで作成しBATで実行したいので 複数行になるのはまずいのです。ご教授よろしくお願いします。

  • このサイトのコードを利用したいです。

    http://gallery.technet.microsoft.com/scriptcenter/d73b2ae1-2997-4952-8946-18dea79ba827 「Set objUser = GetObject("LDAP://cn=ken myer, ou=Finance, dc=fabrikam, dc=com") Wscript.Echo objUser.WhenCreated」 知らないユーザーアカウントがあったため、作成日を知りたいと思ったところ上記のサイトの上記のコードにたどり着きました。しかし私にはこのコードの使い方が分かりません。どなたか使い方を教えてください。

  • お世話になります。

    お世話になります。 ActiveDirectoryについての質問です。 Server:WindowsServer2003 R2 全ユーザーアカウントの作成日付を取得し、指定場所へ出力したい。 (1)以下のプログラムでは全ユーザーアカウントを対象にすることができません。 全ユーザーアカウントを対象とするにはどのように記述すればよいでしょうか。 ▼プログラム Set objUser = GetObject("LDAP://cn=userName,ou=Kanri,ou=jsystem,dc=domain,dc=co,dc=jp") Wscript.Echo objUser.WhenCreated (2)保存場所の指定方法及び、ファイル形式を指定して、保存するにはどのように記述すればよいで  しょうか。 以上、2点よろしくお願い致します。

  • WSHにて戻りオブジェクトのプロパティ全取得方法

    http://gallery.technet.microsoft.com/scriptcenter/07a8a60d-fef5-4729-87fe-3c7cee10267e を参考に、ローカルのユーザー情報を抜こうと思っております。 <内容> strComputer = "atl-fs-01" Set colAccounts = GetObject("WinNT://" & strComputer & "") colAccounts.Filter = Array("user") For Each objUser In colAccounts Wscript.Echo objUser.Name Wscript.Echo objUser.FullName Wscript.Echo Description Wscript 実行すると正しく動きました。 1. GetObjectで対象のコンピューターからのオブジェクトを生成 2.フィルターにより、ユーザー情報のみ抽出? 3. objUser.Name、 objUser.FullName objUser.Description を表示という内容までは理解できるのですが、 このobjUserに「FullName」と「Description」以外のプロパティを知りたいのです。 どうにかして、「objUser」が所持する「FullName」と「Description」以外のプロパティ一覧を全表示させることは出来ないでしょうか? ご教授お願いします。

  • ActiveDirectoryで高い層のOUを指定する

    以下のように多階層でOrganizational Unitが作成されています。 ou1 - ou1-1    - ou1-2    - ou1-3 - ou1-3-1 ou2 - ou2-1    - ou2-2 ou3 - ou3-1 - ou3-1-1 この状態で、ou1-1 に所属するユーザー情報を取得したいのですが、その方法がわかりません。 LDAP://xxxxx.xxx/OU=ou1-1,dc=xxxxx,dc=xxx と指定すると、以下のエラーが出てしまいます。 System.DirectoryServices.DirectoryServicesCOMException: サーバーにそのようなオブジェクトはありません。 LDAP://xxxxx.xxx/OU=ou1,dc=xxxxx,dc=xxx と指定すればユーザー情報は取得できますが、1-1だけでなく、1-2,1-3のユーザー情報も一緒に取れてしまいます。 1-1のユーザーだけを指定するにはどうすればいいのでしょうか?

  • LDAPの区切り文字。

    WSHでLDAPを使用したいのですが、うまくいきません。 CN名(姓,名)にカンマが含まれているのでオブジェクトの取得に失敗します。どのように記述したらいいのでしょうか? LDAPの区切り文字をカンマ以外の区切り文字に変えたりできるのでしょうか? Set objUser = GetObject("LDAP://cn=LASTNAME, FirstName" & ", ou=Test, dc=Test")

  • WMIを利用。

    はじめましてこんにちわ。 現在、WindowsのWSHのWMIを利用して、 パスワードが無期限ではないユーザーを無期限にしようと思っています。 以下、プログラムを利用して↑を実行しようと思っているのですが、 エラー:テーブルが存在しません。 と出てしまいます。どうすればよいでしょうか? 以下サンプルプログラムを見つけてVBSファイルにして実行しました。 [sample]パスワードが無期限じゃないユーザーを一括で無期限に szDomain = "dc=annou,dc=com" szOU = "OU=Students" Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 20000 objCommand.CommandText = _ "<LDAP://" & szOU & "," & szDomain & ">;" & _ "(&(objectCategory=person)(objectClass=user)" & _ "(!userAccountControl:1.2.840.113556.1.4.803:=65536));" & _ "userAccountControl,sAMAccountName,distinguishedName;" & _ "subtree" Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF szDN = objRecordset.Fields("distinguishedName") intUAC = objRecordset.Fields("userAccountControl") Set objUser = GetObject("LDAP://" & szDN ) objUser.Put "userAccountControl", intUAC XOR ADS_UF_DONT_EXPIRE_PASSWD objUser.SetInfo WScript.Echo szDN objRecordset.MoveNext Loop objConnection.Close Set objCommand = Nothing

  • 【WSH】スクリプトを作るスクリプト

    初めて質問させていただきます。 規定によりフリーソフトがインストールできない為 社内で使用するスクリプトをWSH(vbs)で作成しました。 次の段階として、そのスクリプトをユーザーの入力に合わせて作成するスクリプトを 作成しようとしているのですが、一つ問題があり先に進めなくなってしましました。 目的としては InputBox関数でユーザーが入力したパスをWriteLineでスクリプト内に 入れ込みたいんですが、 例えば下記のようなスクリプトを組み、走らせて作成される 「スクリプトA.vbs」を走らせても、もちろん p としか表示されません。 p = InputBox("フォルダのパスを入力してください。") Set objFS = CreateObject("Scripting.FileSystemObject") Set objTS = objFS.CreateTextFile("スクリプトA.vbs") objTS.WriteLine "MsgBox ""p""" objTS.Close WriteLineの中に変数を代入することは不可能なんでしょうか? それ以外でもいい方法があればご教授いただきたいです。 よろしくお願いします。

  • VBA・WSHでのspecialfolders

    WSHでの知識をご教授ください。 ・実行場所を選ばずデスクトップにテキストを作成したいと思い SET objpath =SpecialFolders("Desktop")でobjpathに現行ユーザの デスクトップの場所を取得して Set objFS = CreateObject("Scripting.FileSystemObject") objFS.CreateFolder objpath\newfolderでフォルダを作成して set fo = objFS.CreateTextFile("newfolder\sample.txt",true) テキストを作成 という動きをさせたいのですが objpathをechoすると場所が表示されるので 何が足りないのかわからなくて煮詰まってしまいました。

  • LDAP-OS認証 グループによる制限

    LDAP認証の設定がされているLinuxサーバ(CentOS 5.1)へログインする 際に、特定のグループに所属しているユーザのみ許可するにはどうすれ ばよいのでしょうか? ・grp1のldif dn: cn=grp1,ou=Group,ou=People,dc=abc,dc=jp objectClass: posixGroup cn: grp1 gidNumber: 603 memberUid: user1 memberUid: user3 ユーザはuser1、user2、user3の3人がLDAPへ登録されています。 現在は3人ともログインできてしまう。 user1、user3のみログインできるようにしたい。 /etc/ldap.conf のpam_groupdnおよびpam_member_attributeを修正して みましたが挙動は変わりません。 pam_groupdn cn=grp1,ou=Group,ou=People,dc=abc,dc=jp pam_member_attribute memberUid どなたかお知恵をお貸しください。