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.
環境

作業環境一覧 - 銀色の玉虫のメイン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にアクセスするためのVBScriptを自動生成できる。
WMI CIM Stuidoを利用すれば、リモートのWMIへアクセスし、情報取得や制御ができる。

リモートアクセスするためには

WshControllerを利用するためには、 接続先のレジストリを予め編集剃る必要がある。
これは、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings」キーの中に「Remote」という名前付きの文字列(REG_SZ)値を作成し、その値を“1”とする必要がある。
ただ、リモート・コンピュータに対する管理者権限があるなら、WMI(Windows Management Instrumentation。Windowsの管理用インターフェイス)を用いることで、この操作をリモートから行うこともできる

上記の設定が完了していれば、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
作業

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を使用していた。
しかし、 下記にあるように使用はできない模様。

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 サーバーを利用できません。
  • 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