VBSでDNSサフィックスの変更をする方法

このQ&Aのポイント
  • WMIのメソッドを使用してDNSサフィックスを変更するVBSを作成していますが、エラーが発生しています。
  • VBSは運用環境で使用できるため、IP変更やコンピュータ名変更はできましたが、DNSサフィックスの変更がうまくいきません。
  • wbemtest.exeでメソッドを調べた結果、必要なメソッドは存在すると思いますが、エラーが解消されていません。
回答を見る
  • ベストアンサー

vbsでDNSサフィックスの変更をするには

今、WMIのメソッドを使用して DNSサフィックスを変更するVBSを作成しているのですが なぜか「行10、文字3が無効なメソッドです」って エラーになってしまいます。 運用の環境なので変にランタイムなども入れられないため VBSを選択し、IP変更やコンピュータ名変更なんかは できたのですが、DNSサフィックスがどうしてもうまくいきません。 メソッドもwbemtest.exeにて調べたので無いことも無いと 思うのですが。。。 どなたかわかる方いらっしゃいましたら 教えていただけないでしょうか。お願いします。 **ここからがソースです**** strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNIC = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled=true") arrDNSSuffixes = Array("domain1.local", "domain2.local") For each objNIC in colNIC objNIC.SetDNSSuffixSearchOrder(arrDNSSuffixes) NEXT **ここまでがソースです****

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

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

よくわからんけど、for each しないでコレクションにドンてサンプルもありますね。 それでもダメでしょうか? http://www.microsoft.com/japan/technet/scriptcenter/scripts/network/client/modify/nwmovb21.mspx http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/networking/client/

sera-37564
質問者

お礼

補足にNICを指定してって書いてしまいましたけど よくよく調べてみるとDNSSuffixってのは NICごとの設定では無くて端末1台ごとにできる 設定だったようです。(お恥ずかしい限りです><) temtecomai2さん、あらためてご回答ありがとうございました。

sera-37564
質問者

補足

ご回答ありがとうございます。 microsoftの方のソースを使うと設定はできました。 ただ、今回作っているVBSは最終的に 複数枚のNICが存在する端末に対して 必要なNICを判別して設定できるようにする というのが目的なので、select*fromとかfor eachをいれてあります。 for eachにこだわりは無く、条件判断をして 目的の物に設定ができるようになればいいと思っています。 引き続き、条件判断も含み正常に動作できるように するにはどうすれば良いかを募集いたします。 (ちなみに、  Microsoftサイトの方法だとsuffixが追加できるNICの中で  1番はじめに見つかった物だけに設定する。  もう一つのURLの方法だと見つかったNIC全てに  設定してしまう。ですかね?)

関連する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で動作させるためにんはどこを修正すればいいでしょうか?

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

    WSHについて教えてください。 コレクションの最初の要素(オブジェクト)のプロパティを参照したいのですが、やり方がわかりません。 例えば以下のようなWMIのクエリの結果のコレクションの要素(オブジェクト)は1つだけしかありません。 ※ネットワークドライブ V: の情報を得る strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection where LocalName=""V:""",,48) なのにわざわざ For Each objItem in colItems Wscript.Echo "LocalName: " & objItem.LocalName Next のような表現をするのは、いかにも大変です。 For Eachを使わずに、上記の例での colItems の最初の要素(オブジェクト)の LocalName プロパティを取り出すには どのようにコーディングすればいいのでしょうか?

  • DNSサフィックスを追加するVBS

    DNSサフィックスを追加するVBS Serverを移行し、ClientPC(XPが対象で設定)に名前解決がうまくいっていないPCがあります。 LoginScriptにDNSサフィックスを追加するVBSを仕込み 追加したいのですが、どのようにすれば追加出来るでしょうか? なお、追加したサフィックスは2個あり、2個ともに、優先度1・2・既存を考えてます -----以下、MSのサンプルを見ました。 SET WSHShell = CreateObject("WScript.Shell") WSHShell.RegWrite "HKLM\System\CurrentControlSet\Services\TCPIP\Parameters\SearchList", "testadatum.com,test2adatum.net,test3adatum.gov", "REG_SZ" PC毎に既存の設定をクリアするのは気が引けますし 上記だと、既存の設定が消えてしまいます。 追加するには、http://support.microsoft.com/kb/275553/ja のように する以外ないでしょうか <参考> ClientPCのネットワーク設定>DNSは「以下のDNSサフィックスを順に追加する」に ほとんどが設定されており、スクリプトでなんとかならないか調べてます。 どなたかご教授下さい。

  • 下記内容のスクリプトを実行すると、ポップアップが

    下記内容のスクリプトを実行すると、ポップアップが 5回表示されるのですが、どこから取ってきた値なのか知りたいです。 ※必要なのは4回目に表示されるデスクトッププロパティから  参照できる”スクリーンセーバーの待ち時間”だけです。  出来れば、それのみ表示させたいです。 ****************** On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") For Each objItem in colItems Wscript.Echo "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout Next ****************** 以上

  • WMIによるネットワーク接続の有効無効化方法

    WMIによるネットワーク接続の有効無効化方法がわからないため 下記VBScriptの「Array("192.168.9.999")」の部分のIPアドレスを 有効化のVBScriptには割り当てているアドレスを 無効化のVBScriptにはでたらめなアドレスを設定し 有効無効化らしきことを実現させています。 実際にはネットワーク接続は有効のままでネットワークアドレスが ちがうために接続できないだけです。 どなたか有効無効化(IPEnabledをTRUEorFALSEにするMethod)方法を 教えていただけないでしょうか? strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") strIPAddress = Array("192.168.9.999") strSubnetMask = Array("255.255.255.0") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask) If errEnable = 0 Then WScript.Echo "The IP address has been changed." Else WScript.Echo "The IP address could not be changed." End If Next

  • DNSサフィックスの設定を変更するプログラムについて

    DNSサフィックスの設定を変更するプログラムについて Windowsのローカルエリアネットワークで設定されている「このDNSのサフィックス(※)」のテキストボックス内に記載されている内容をプログラム(VC++)で変更しようと調査しているのですが、分からず困っています。 ※ 設定を変更したい場所の詳細は添付画像をご確認下さい。 ご存知の方がいましたら、ご教授下さい。 宜しくお願い致します。

  • DNSサフィックスが有効になっていない?

    ActiveDirectory環境のdomain Aというドメインの中にDCが1台、クライアントが4台あります。 DCは2003SP2でクライアントはXPです。クライアントは全台ドメイン参加しており、ドメイン上にあるファイルサーバ等にアクセスしています。 4台とも問題なかったのですが、うち、1台だけ何かの設定がおかしくなり、共有リソースにアクセスする際に、\\servername.A.local\xxx\yyy\....という感じで、DNSサフィックスを補わない状態でバッチファイルやexeを実行しようとすると、「指定されたデバイス、パス、またはファイルにアクセスできません。アクセス許可が無い可能性があります」と表示されます。 アクセス権については、別のPCから問題のPCと同じアカウントでログインして同ファイルサーバ上のリソースには問題なくアクセスできるのを確認しています。 (テストでevryoneをフルコンにしても同様のエラーが出ます) ただし、ディレクトリへファイルをコピーしたり、リネームは可能です。batやexeだけがエラーが出ます。エクセルやワード、メモ帳は開く事が出来ます。 DNSサフィックス設定箇所にはa.localと入力されています。 何が原因なのかわかるようでしたら教えて下さい。

  • ユーザのプロセスを終了する方法

    Windows Server 2008 R2で仮想デスクトップを使用しています。(XenApp 6.5を使用) サーバには80名程度のユーザがログオンして、それぞれアプリケーションを起動しているため、 プロセスの数が非常に多くなります。(同じプロセス名でもユーザ数分起動しているため) 上記の環境であるアプリを終了する際に、サブ画面のプロセスが起動している場合は 一緒に終了するような作りにしたいと考えており、現在のところ以下のWMIのスクリプトを 使用してプロセスの一覧を取得し、for文で一覧から該当するプロセスIDを特定してkillする というような仕組みを検討しております。 Strcomputer = "." Set objWMIService = GetObject("winmgmts:\\" & Strcomputer & "\root\cimv2") Set colitems = objWMIService.ExecQuery("Select * from Win32_Process", , 48) ただ、上記のようにWin32_Processを使用すると、サーバ上で起動している全ユーザの プロセスが検索対象となってしまうため、処理に時間がかかることを懸念しております。 可能であれば、そのユーザだけのプロセスを検索対象としたいのですが、 そのような方法はありますでしょうか? WMI以外の方法でも構いませんので、アドバイスを頂けると助かります。

  • プリンタ一覧の取得

    お世話になります。 ネットワーク上の他クライアントのプリンタ一覧を取得する方法を探しています。 環境はWin2000です。 クライアントAから、クライアントBにログオンしているユーザー2のプリンタ一覧を取得する方法はあるのでしょうか。 strComputer ="クライアントB" Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2" ) Set PrtSet = objWMIService.ExecQuery("Select * From Win32_Printer") For Each Prt In PrtSet MsgBox Prt.Caption Next 上記、クライアントAにログオンしているユーザー1で実行したところクライアントBのユーザー1プロファイルのプリンタ一覧を取得してしまい、ユーザー2のプリンタ一覧を取得してくれません。 なにか情報、方法ありましたらご教授ください。 よろしくお願いします。

  • VBScript(WHS)でWMIを使ってリモートでvbsファイルを実行したい

    サーバAから、サーバBに置いてあるvbsファイル(Apache停止が書かれている)を実行して、サーバBのApacheを停止したいのですが、うまくいきません。 サーバBで単体でそのvbsファイルを実行すると、Apacheは正常に停止します。  戻り値は、0(プロセス完了)が帰ってきていて、接続はうまくいっているようなのですが、vbsファイルが実行されていないようです。  非常に困っておりまして、どなたか教えていただけないでしょうか? vbsファイルの実行のところが間違っているのかなと思うのですが・・・(今まだ会社にいないので、会社でのソースそのままではないですが、同じような感じです) -------------------------------------------- Option Explicit Dim strComputer Dim strUser Dim strPassword Dim strBAT ' ----------------------------------- ' 環境設定 ' ----------------------------------- strComputer = "サーバーB" strUser = "username" strPassword = "password" strBAT = "c:\hoge.bat" ' ----------------------------------- ' コマンド実行 ' ----------------------------------- Dim objWbemLocator Dim objWMIService Dim objWin32_Process Dim errReturn Dim intProcessID Const WbemAuthenticationLevelPktPrivacy = 6 ' リモートに接続 Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer _ (strComputer, "root\cimv2", strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy ' Win32_Process クラスを生成 Set objWin32_Process = objWMIService.Get("Win32_Process") errReturn = objWin32_Process.Create _ ("cmd.exe /cscript C:\tmp\ApacheStop.vbs", Null, Null, intProcessID) WScript.Quit(errReturn ) もともとの要件は、機能ごとに分けたvbsファイル(Apache停止、Windows再起動、ファイルバックアップなど)を、各サーバで実行するというものです。その制御は、ひとつのバックアップサーバーで行います。

専門家に質問してみよう