VBSを利用して、Windows7でDHCPとDGWの設定を行う方法

このQ&Aのポイント
  • Windows7でDHCPとDGWの設定を行うためのVBSスクリプトの変更方法や別の設定方法を教えてください。
  • WindowsXPでは問題なく動作するスクリプトも、Windows7ではうまく動作しないため、指示やアドバイスが必要です。
  • VBS初心者ですので、具体的な手順やサンプルコードを提供していただけると助かります。
回答を見る
  • ベストアンサー

VBSを利用して、Windows7でDHCPとDGWの設定を行う方法に

VBSを利用して、Windows7でDHCPとDGWの設定を行う方法について VBSを利用して、Windows7にてDHCPとDGWの設定を行おうと思っております。 WindowsXPであれば、下記のページのスクリプトにて成功しているのですが、 Windows7だとうまくいきません。 参照先のスクリプトをWindows7仕様に変更する方法または、Windows7にて DHCP/DGWを設定するスクリプトを教えていただけないでしょうか。 [WindowsXP対応のスクリプト] http://gallery.technet.microsoft.com/ScriptCenter/ja-jp/5884b62f-0a69-48e2-af16-3c4fcc060161 VBSは初心者です。お手数ですが、ご教授願います。 以上 よろしくお願い致します。

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

  • ベストアンサー
  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

>Windows7だとうまくいきません。 どのようにうまくいかないのか、肝心なところが説明ないので、的確なアドバイスは期待しないでください。 WMIに関してはスクリプト作成ツールが提供されているので、それで基本的なことをテストするといいです WMICodeCreator.exe http://www.atmarkit.co.jp/fwin2k/win2ktips/756wmicreator/wmicreator.html http://www.microsoft.com/downloads/details.aspx?familyid=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en これ以外にもありますが、私はこれで十分重宝しています。 メソッドは、「Exucute a methed」タブでテストできます。ローカルの情報を拾ってきているので、現在使えるオブジェクトとメソッドです。リストされていないものは指定しても無駄です。 この辺はMSDNのリファレンスサイトに載っています。

tenshin4815
質問者

お礼

ご回答ありがとうございます。 このようなツールがあるのですね!さっそく使わせて頂きました。 ツールの利用方法のサイトを参照したのですが、利用方法がいまいちな状態です。 >メソッドは、「Exucute a methed」タブでテストできます。ローカルの情報を拾ってきているので、 >現在使えるオブジェクトとメソッドです。 とあるのですが、WindowsXP対応のスクリプトに記載がある"objWMIService.ExecQuery" という構文を利用する場合、「Query for data from a WMI class」タブを利用するので しょうか。それともローカルの情報を拾う構文全般、「Exucute a methed」タブでテスト できるのでしょうか。 Windows7端末を利用して、WMIスクリプト作成ツールを実行してみました。 WindowsXP対応用のスクリプトを当てはめて実行したところ、実行結果は"b"となりました。 下記の実行結果を"a"(IPアドレスの設定がされているネットワークアダプタをDHCPに変更) にするには、どうしたら良いでしょう。分かればで良いのでお願い致します。 Namespace: root\CIMV2 Classes(dynamic or static): Win32_NetworkAdapterConfiguration Results: 61 properties found. Select the properties you want values for. --------------------------------------------------------------------------------- strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colNetAdapters = objWMIService.ExecQuery( _ "SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") strDNSServers = Array() For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableDHCP() errDNSServer = objNetAdapter.SetDNSServerSearchOrder(strDNSServer) If errEnable = 0 Then Wscript.Echo "a" Else Wscript.Echo "b" End If Next --------------------------------------------------------------------------------- 以上 宜しくお願い致します。

その他の回答 (4)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.5

すみませんNo4です。肝心なことを書かなかったです。 まず、実行者は管理者で実行していますか? 管理者じゃないとだめです。 次に、「IPEnabled=TRUE」での検索は、実際に変えられるアダプターを検索しているわけでない。と言う事です。No4で言いたかったのは、的を絞って検索して対象だけ、操作対象にしましょう。と言う事です。実際にケーブルが指されていて、使用されているものですね。 対象のものはwinmsd, msinfo32でみられるネットワークアダプターの項目で、ここに載っていないものは、別のWin32クラスを使う必要があります。そこで見て、実際にIndexを指定して対象のものが変えられるかどうか調査してください。何が変えることができて、何が変えられないのか、切り分けが必要ですね。 PPPだとそこにリストされていないです。 前にも書きましたが、対象になっているオブジェクトが何者なのか調査する必要があるわけです。ちなみに、こちらでは "a"になりましたが、対象のアダプターではありませんでした。 あなたがどういうアダプター(NIC)を対象としているのか調査する必要があります。 それと On error ruse next (正確なスペル忘れた)   などのエラートラップをかけましょう。

tenshin4815
質問者

お礼

補足ありがとうございます。 管理者権限で実行するようにしています。 私が対象としているアダプターは、TCP/IPです。 ご回答ありがとうございました。いろいろ試してみます。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.4

本来ここでは、詳細に答えないようにしています。業務で作成されている方はプロですし、そのような方に無料で教えたくありません(同僚には当然ただで指導していますが、いや会社から金もらっているか)。 もっとも本当のコーダーならここで問い合わせるような暇はないし、プライドもあるでしょう。聞く時はトラブル関係ですね。私個人としては1年以上も同じトラブルで奔走したこともありますね(OSのバグとして収束)。そこで、まだWMIについて、理解していないかと思うので、ヒントだけ提示します。やる気があるようなので。 本題です。 >構文を利用する場合、「Query for data from a WMI class」タブを そこで見れるのは ”プロパティ”です。最終的に使いたいのはメソッドですよね。「IPEnabled」は見れますが、下記のメソッドは見れませんね。 .EnableDHCP()   (VB関係だと最後に括弧が必要ありませんが             この括弧はメソッドを表しています。) これは「Exucute a methed」タブですね。 次の問題は、.EnableDHCP()が効果あるように設定する事ですが、これには対象のオブジェクトの構造を知る事が大事です。「.ExecQuery」はとても面白い物で、効果としては「new」演算子と同じです。Queryの結果は、新しくインスタンスを作成したのと同じことになります。つまり「Win32_NetworkAdapterConfiguration 」オブジェクトですね。新しく階層を持ったクラスオブジェクトになります。 これにもメソッドとプロパティがありますが、階層構造にもなっています。そこで「Exucute a methed」でやってみると、2段目の「Methoods」EnableDHCPを選択すると、下部の[Select the・・・」のBOXに「Index='0'」から始まって私の所だと32まであります。 これで「Index='0'」を選択すると、GeneratedCodeのBOSにサンプルコードがでます。 「Set objShare = objWMIService.Get("Win32_NetworkAdapterConfiguration.Index='0'") ・・・」 それで、よく考えてみると、この「Index='0'」は当然と言えば当然なんですよね。複数のNICが搭載されているマシンは沢山あるし、仮想デバイス(論理デバイス)もあります。通常5個ぐらいは論理デバイスがNICとして存在しているはずです。これを当然IDを付けて管理しているわけで、このIDが「Index='0'」です。 私が使っているUSB接続の無線WANデバイスでは23でした。詳細は winmsd, msinfo32を起動し「ネットワークのアダプター」をみると名前の所にそのIDがありますね。[000001]とかがそのナンバーです。 最初からこのIndexナンバーがわかっていれば、サンプルコードのように指定すれば、目的は達成できます。 そこで「.ExecQuery」のクエリーが役に立つわけです、アダプター名を検索すれば対象のデバイスがセットされるし、デバイスIDで検索してもいい。 つまり、最初のクエリー結果のオブジェクトにはさらにもう一つ下の階層があり、デバイスを指定してDHCPの設定をする必要が有ることが、この「Exucute a methed」でわかりますね。 やり方は、いくつもあるので、サンプルコードはあくまでもサンプルです。違うやり方もあるので最初に見たサンプルサイトも必要ですし Win32_NetworkAdapterConfiguration でネット検索すると結構ヒットしますよ。

tenshin4815
質問者

お礼

返信が遅くなり、申し訳ありません。 現在、いろいろ検証中です。 お忙しい中、丁寧にご説明していただき、本当にありがとうございます。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

目的が、設定をすることなのか、VBSの勉強なのかわかりませんが、前者なら、VBSでなく netsh コマンドを使うと簡単に設定できます。 使用方法は検索してください。

tenshin4815
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ありません。 netshのコマンドで設定は可能なのですが、ログオンスクリプトに組み込みたい という前提がありまして、コマンド実行がうまくいきません。 BATファイルを作成し、実行させればうまくいくのですが、処理に時間がかかって しまうというのが難点です。。 もう少し、考えてみます。ご教授ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Windows7に対応するWHSは見当たらない のですが、以下の情報があります。 http://support.microsoft.com/kb/928233/ja また、BROADCASTフラグについても調べてみてください。

tenshin4815
質問者

お礼

ご回答ありがとうございます。 検証用端末では、IPアドレスが設定されている状態でスクリプトを実行した場合に DHCPに変更できない状態なのですが、手動でDHCPを設定した場合は、正常に値が 取れている状態です。 スクリプトを実行した時のレジストリの状態が上記の障害に該当するのか、 確認してみようと思います。

関連するQ&A

  • VBSについて教えてください。

    VBSについて教えてください。 イベントビューワのプロパティの変更(最大ログサイズとログサイズが最大値に達した時の操作)を以下のスクリプトにて変更したいと思っています。(スクリプトはhttp://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb16.mspxで公開されているのを利用しています。) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate,(Security)}!\\" & _ strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For each objLogfile in colLogFiles strLogFileName = objLogfile.Name Set wmiSWbemObject = GetObject _ ("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2:" _ & "Win32_NTEventlogFile.Name='" & strLogFileName & "'") wmiSWbemObject.MaxFileSize = 1024000 wmiSWbemObject.OverwriteOutdated = 0 wmiSWbemObject.Put_ Next WindowsXPSP2では動作したのですが、Windows2000SP4では以下のエラーが発生します。 Windows Script Host スクリプト:スクリプトの場所 行:14 文字:5 エラー:WBEM_FLAG_USE_AMENDED_QUALIFIERSが指定されていない場合は修正オブジェクトを置くことはできません コード:80041066 ソース:SWbemObject VBSについては全く理解できておりません。 Windows2000で動作させるためにんはどこを修正すればいいでしょうか?

  • VBSでネットワークインターフェース名を取得したい。

    VBSでネットワークインターフェース名を取得したい。 こんにちわ!いつもお世話になっております。 さっそく質問なのですが、VBSを利用してネットワークインターフェース名を 取得する方法を教えてください。環境は、Windows7です。 Netshのコマンドを利用して、動的にDHCPまたはDGWの設定を変更したいと考えて おります。そのため、Netshのコマンドに必要なネットワークインターフェース名を 取得できないかと考えております。 下記のようなスクリプトを作成したのですが、下記のスクリプトでは文字数の変化に 対応ができないのと、余計な文字(:)を取得してしまいます。 検証用のWindows7で下記を実行すると、「ローカル エリア接続:」となりました。 ---------------------------------------------------------------------- If Err.Number = 0 Then Do Until objExec.StdOut.AtEndOfStream strLine = objExec.StdOut.ReadLine If InStr(strLine, "イーサネット アダプター") <> 0 Then iColon = Instr(strLine, ":") objEthernet = Mid(strLine, iColon - 11) End If Loop End If ---------------------------------------------------------------------- どんなネットワークインターフェース名でも、取得できるようにするにはどうしたら 良いでしょうか。 ご教授いただけると、大変助かります。よろしくお願い致します。

  • Windows2003でのDHCPの設定で

    Windows2003サーバ上のDHCPの設定で、リース期間をデフォルトの8日から1時間にしたのですが、リースが切れた後、そのリース切れのIPアドレスが他のコンピュータから利用できません。マイクロソフトのサイトではリース切れの後、4時間データベース上に保持しておくとあるのですが、これだとリース期間を設定する意味がなくなっているような気がします。ノートPCで利用する場所なので短い時間でのリース期間にしたいのですが、この猶予時間の変更をご存知の方、お願いします。

  • DHCPサーバーの設定

    同一LAN上に、2台のDHCPサーバーがあります。 この2台のDHCPサーバーを、A、Bとします。 クライアントがDHCPによるIPを取得する際、 必ずAのDHCPサーバーからIPを取得するように設定する ことは可能でしょうか? また、可能であればその方法もご教授下さい。 クライアントのOSは、WindowsXPです。

  • Windows Server の DHCPについて

    みなさま、こんにちは。 当方、Windows 2008 R2 ServerでDHCPを構築しており、その際のIP重複時の挙動について不明点があるため、有識者の方に教えて頂きたいです。 DHCPサーバにて払い出しIPに重複があった場合、通常であればDHCPサーバ上の[検出の試行回数]を0以上に設定することで、回避できることはわかっており、その設定が有効であることまで確認できております。 上記状態でTFTP(PXE)にもDHCPを利用した場合、何故か上記の設定が有効にならず、重複中のIPを何度も払い出そうとしてしまいます。 つきましては、以下の3点を教えてください。 1. DHCPサーバの挙動は、OSの払い出し時とTFTP(PXE)の払い出し時では異なるものなのでしょうか? 2. DHCPサーバ側の設定の抜けもれがあるのでしょうか? 3. そもそもTFTP(PXE)には、上記の設定が効かないのでしょうか? もし、「3.」がyesの場合、TFTPの場合でもIP重複時に別IPを払い出す方法(または何かしらの回避方法)を教えて頂きたいです。 よろしくお願い致します。

  • IEのプロキシ設定を書き換える VBS

    IEのプロキシ設定を書き換える VBS こんばんは。VBSの初心者です。 IEのインターネットオプションにある、プロキシ設定を「変更」するスクリプトを 作成したいと思っております。 [設定環境] Windows 2000、Windows XP --[設定場所]----------------------------------------------------------------- ― プロキシサーバー ― ローカルエリアネットワーク(LAN)の設定   LANにはプロキシサーバを設定する  ←ここのオンオフ設定        アドレス:*****   ポート:**** ←ここの入力    ローカルアドレスにはプロキシサーバを適応しない ← ここのオンオフ設定 -----・-----・-----・-----・-----・-----・-----・-----・-----・-----・-----・-- ― サーバ ―   HTTP(H)  :***** ポート:****   Secure(S) :***** ポート:****   FTP(F)   :***** ポート:****    すべてのプロトコルに同じプロキシサーバーを使用する ← ここのオンオフ設定 -----・-----・-----・-----・-----・-----・-----・-----・-----・-----・-----・-- ― 例外 ―   次で始まるアドレスにはプロキシを使用しない   ****  ← ここの入力 ---------------------------------------------------------------------------- 下記 URLで同じような質問を行っておりますが、ログオンスクリプトに入れ形式を そろえるなどの関係で、JavaScriptであると都合が悪いという状況です。 http://questionbox.jp.msn.com/qa822693.html 下記 URLでVBSで作成されたものがありますが、実行を行っても何もおきません。 また、ここで設定していない項目の変更が必要です。 http://d.hatena.ne.jp/tanamon/20090417/1239935940 下記 URLでVBSでプロキシの設定を参照するものがありますが、これだと書き込みを 行う方法が分かりません。 http://ameblo.jp/pochitora/entry-10174474191.html 初心者で、どこから手を付けたらよいのか分かりません。 どのように行なえば良いか、ご教授いただけますでしょうか。 よろしくお願い致します。

  • vbsなどを利用して、Administratorのパスワードを変更させ

    vbsなどを利用して、Administratorのパスワードを変更させる方法はありますでしょうか? 100台ほどのPCのAdministratorのパスワードを一斉に書き換えたいと考えております。 AdministratorsにAdministratorとユーザAが存在しており、 ユーザーはUserAでログインしている状況です。 Administratorは管理者しか利用しないのですが、その管理用PWを一斉に書き換えられないかと考えております。 パスワードを変更させるvbsスクリプトを作成し、ユーザーに配布してクリックだけ教えてもらうか、 ログインスクリプトで流そうと考えています。 こういた、ローカルユーザーの書き換えは可能でしょうか? また、vbsを作成した場合、中身を見られないような制限もかける必要があるとおもいます。 この点も含め教えて頂けますでしょうか。

  • VBSを利用して、IEのタブを自動的に切り替え

    VBSを利用して、IEのタブを自動的に切り替え続けるスクリプトを作成しています。 以下現状 手動でやる事 ・作成したVBSファイルをダブルクリックして起動 ・IEは常に画面の全面(アクティブウィンドウ)にしておく VBSファイルの中身 set W = WScript.CreateObject("WScript.Shell") do WScript.sleep 30000 W.Sendkeys "^{TAB}" loop これでも正常に動くのですが、 ここにESCキーを押す事でプロセスを終了させるスクリプトを追記したいのですが、どのようにしたらよいでしょうか。 ご教授お願いします。

  • スクリプトの拡張子を教えてください

    http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb08/hey0201.mspx 「サウンドをサウンド イベントにランダムに割り当てる方法はありますか」MSN SCriputing Guy!より 上のスクリプトを作成したいのですが、メモ帳で作成していいのでしょうか? その場合は保存の拡張子は何になりますか? あるいは、サイトにあるソフトでダウンロードしてスクリプトを作成するべきでしょうか? http://www.microsoft.com/japan/technet/scriptcenter/tools/default.mspx このサイトにはいくつかソフトがありますが、どれでもいいのでしょうか? スクリプトは初心者なので、見当がつきません。 教えてください。

  • DHCPのスコープ設定

    Windows Server2003 R2のDHCPを利用しています。 IPアドレスを増やす目的で、サブネットマスクを変更しました。 変更前:255.255.255.0 変更後:255.255.252.0 DHCPの既存スコープを削除し、新たにスコープを作成し、範囲を192.168.1.20~192.168.4.200にしたところ192.168.4.の範囲はスーパースコープとなってしまいました。 スコープの範囲設定が192.168.1.20~ではなく192.168.0.20~が正しいのでしょうか? よろしくお願いします。