Windows リモートマシンに対して負荷を与える
問題
リモートマシンに対して負荷を与えたい。
解決
WMIを利用する。
先に言うと、自分の作業環境ではリモートアクセスができない模様。
Failure to Connect The following connections between operating system versions are not supported: * You cannot connect to a computer that is running Windows XP Home Edition.
- 引用元
- Connecting Between Different Operating Systems (Windows)
- http://msdn.microsoft.com/en-us/library/aa389284.aspx
環境
作業環境一覧 - 銀色の玉虫のメインPC環境
■接続元
OS : Windows 7 Home Premium WSH : ver 5.8 WMI : 7601.17514 [wmiのバージョン確認は、wmimgmt.mscを実行しプロパティの全般で見れる]
■接続先
OS : Windows 7 Home Edition WSH : ver 5.7 WMI : 2600.0000
ツール
- WMI Code Creator
- WMI CIM Studio
WMI Code Creatorを利用すれば、WMIにアクセスするためのVBScriptを自動生成できる。
WMI CIM Stuidoを利用すれば、リモートのWMIへアクセスし、情報取得や制御ができる。
リモートアクセスするためには
WshControllerを利用するためには、 接続先のレジストリを予め編集剃る必要がある。
これは、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings」キーの中に「Remote」という名前付きの文字列(REG_SZ)値を作成し、その値を“1”とする必要がある。
ただ、リモート・コンピュータに対する管理者権限があるなら、WMI(Windows Management Instrumentation。Windowsの管理用インターフェイス)を用いることで、この操作をリモートから行うこともできる
- 引用元
- @IT:運用 Windows管理者のためのWindows Script Host入門 第9回 WshControllerオブジェクトの詳細
- http://www.atmarkit.co.jp/fwin2k/operation/wsh09/wsh09_02.html
上記の設定が完了していれば、WshControllerを利用したリモート制御が可能となる。
他に、下記に記載するリモートアクセス不可の場合のトラブルシュートを満たす必要もある。
リモートアクセスの確認
- WMICからリモートマシンにアクセスする
C:\>wmic /node:"server1" process where "(workingsetsize > 10000000)" get name,workingsetsize …server1における、サイズが10Mbytes以上のプロセスの一覧 Name WorkingSetSize WINLOGON.EXE 11776000 SERVICES.EXE 16519168 sqlservr.exe 394969088 nod32krn.exe 23371776 omaws32.exe 16826368 svchost.exe 14438400
- 引用元
- WMIとwmicコマンドを使ってシステムを管理する(基本編) − @IT
- http://www.atmarkit.co.jp/fwin2k/win2ktips/1011wmicbasic/wmicbasic.html
作業
1. WMI Code Creatorでリモートアクセスを許可するようにレジストリに追加するスクリプト生成
strComputer = "192.168.0.3" strDomain = "WORKGROUP" strUser="username" strPassword="password" Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _ "root\DEFAULT", _ strUser, _ strPassword, _ "MS_409", _ "ntlmdomain:" + strDomain) ' Obtain an instance of the the class ' using a key property value. Set objShare = objWMIService.Get("StdRegProv") ' Obtain an InParameters object specific ' to the method. Set objInParam = objShare.Methods_("SetStringValue"). _ inParameters.SpawnInstance_() ' Add the input parameters. objInParam.Properties_.Item("sSubKeyName") = "SOFTWARE\Microsoft\Windows Script Host\Settings" objInParam.Properties_.Item("sValue") = "Remote" objInParam.Properties_.Item("sValueName") = "1" ' Execute the method and obtain the return status. ' The OutParameters object in objOutParams ' is created by the provider. Set objOutParams = objWMIService.ExecMethod("StdRegProv", "SetStringValue", objInParam) ' List OutParams Wscript.Echo "Out Parameters: " Wscript.echo "ReturnValue: " & objOutParams.ReturnValue
ただ、自動生成したときには
パスワード管理をScriptPW.Passwordを使用していた。
しかし、 下記にあるように使用はできない模様。
- VBS password fields in win7
- http://social.technet.microsoft.com/Forums/nl/ITCG/thread/ce54428c-0099-4f53-bfae-516a44a32638
Unfortunately, Vista and later no longer include the scriptpw.dll file. I have heard that copying over the scriptpw.dll file to Vista and later machines and register it works, but I haven't tried it, so YMMV. I don't know what you mean by reading a password from an HTA 'no longer works either' -- yes it does (?). If you can use a third-party solution, I wrote a freeware DLL called PassDlg.dll that might work for you. You can get it here: http://www.westmesatech.com/passdlg/
2. 実行
しかし、下記のようなエラーが出た。
- SWbemLocator: RPC サーバーを利用できません。
- → firewallを無効化する
- SWbemLocator: アクセスが拒否されました。
- → ユーザ名、パスワードが違うとドキュメントにあり。
- → しかし、うまく行かず
これは、下記を実行しても同じ
Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "192.168.50.1" Set objRegProv = GetObject("winmgmts:{impersonationLevel=Impersonate}" & _ "!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows Script Host\Settings" objRegProv.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,"Remote","1"
結局XP Home Editonがサポートされていないことが原因の模様。
リモートアクセス不可の場合のトラブルシュート
- リモートコンピュータがオンラインになっていない
- リモートコンピュータにローカル管理者権限がない。
- ファイアウォールでリモートコンピュータへのアクセスがブロックされている。
- ローカルコンピュータの WMI のバージョンとリモートコンピュータの WMI のバージョンに互換性がない
リモート コンピュータへの接続に関する問題が発生した場合、最初にすべきことは、問題がスクリプトと接続のどちらにあるかを判断することです。これを行うには、リモート コンピュータの場所まで行き、スクリプトをローカルに実行します (つまり、そのリモート コンピュータから直接スクリプトを起動します)。スクリプトが動作すれば、問題は接続にある可能性が高いので、おそらくファイアウォールか DCOM の設定に原因があります。スクリプトが動作しなければ、リモート コンピュータの WMI サービスに問題があります。この場合、別のリモート接続を試す前に、スクリプトをローカルに実行してみてください。
ローカルで実施するパッチ
@echo off echo リモート管理を有効にするレジストリの追加 reg add "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Remote /t REG_SZ /d 1 echo XPの場合にリモートスクリプトのセットアップ wscript -regserver echo ファイヤウォールにポートの追加と例外プログラムの追加 netsh firewall add allowedprogram C:\WINDOWS\system32\wbem\unsecapp.exe unsecapp enable netsh firewall add portopening TCP 135 DCOM_TCP enable
参照
WMIを使うスクリプトを簡単に作成する − @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/756wmicreator/wmicreator.html
@IT:運用 Windows管理者のためのWindows Script Host入門 第1回 WSHの内部構造 1.Windows管理にWSHを活用しよう
http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html
WMI Reference
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394572(v=vs.85).aspx
ImpersonationLevel 列挙体 (System.Management)
http://msdn.microsoft.com/ja-jp/library/system.management.impersonationlevel(v=vs.80).aspx#Y0
How to troubleshoot WMI-related issues in Windows XP SP2
http://support.microsoft.com/kb/875605
Troubleshooting WMI - Spiceworks Community
http://community.spiceworks.com/help/Troubleshooting_WMI
Download: WMI Administrative Tools - Microsoft Download Center - Confirmation
http://www.microsoft.com/download/en/confirmation.aspx?id=24045