• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBSを利用して、Windows7でDHCPとDGWの設定を行う方法に)

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

このQ&Aのポイント
  • Windows7でDHCPとDGWの設定を行うためのVBSスクリプトの変更方法や別の設定方法を教えてください。
  • WindowsXPでは問題なく動作するスクリプトも、Windows7ではうまく動作しないため、指示やアドバイスが必要です。
  • 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% (4900/10358)
回答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