Personal tools
You are here: Home コンピュータ Windows Tips Windows Scripting Hosts ActiveXのインストール
Document Actions

ActiveXのインストール

by すぎお last modified 2008-07-22 03:40

ActiveXオブジェクトを一般ユーザーでダウンロード/セットアップする。 RUNASコマンドの代替を行う。

SysinternalsのPsExecを使用する。

以下のコードを拡張子wsfで保存し、ログオンスクリプトに追加する。

<package>
<job id="IncludeExample">
<?job error="true" debug="true" ?>
<!--
SysinternalsのPsExecを利用して、
別ユーザーで任意のマシンでスクリプト実行する。
http://technet.microsoft.com/ja-jp/sysinternals/bb897553(en-us).aspx
-->
<runtime>
<description>Anyone can run anywhere script</description>
<named
name = "server"
helpstring = "Run the machine name"
type = "string"
required = "true"
/>
<example>Example: anyonerun.wsf /server:SERVERNAME</example>
<named
name = "command"
helpstring = "Run executable file name"
type = "string"
required = "true"
/>
<example>Example: anyonerun.wsf /server:SERVERNAME /command:COMMAND_PATH</example>
</runtime>
<script language="VBScript">
Dim objShell,objExec
Dim strCmd
Dim objFS, objTS
Dim strServer, strStatus, strReturn
Dim strUSER,strPASSWD

'引数が2以外は説明を表示し、終了する。
If WScript.Arguments.Count <> 2 Then
WScript.Arguments.ShowUsage
WScript.Quit
End If

If Left(WScript.Arguments.Named.Item("server"), 2) <> "\\" Then
strServer = "\\" & WScript.Arguments.Named.Item("server")
End If

'実行するユーザー・パスワードに変更する。
strUSER = "guest"
strPASSWD = """"""

strStatus = "C:\Temp\Status.txt"
strCmd = "psexec " & _
Trim(strServer) & _
" -i " & _
" -u " & strUSER & _
" -p " & strPASSWD & _
" " & _
Trim(WScript.Arguments.Named.Item("command"))

Set objFS = CreateObject("Scripting.FileSystemObject")

'処理済みの確認
If objFS.FileExists(strStatus) Then
Set objTS = objFS.OpenTextFile(strStatus, 1)
If Trim(objTS.ReadAll) = "1" Then
objTS.Close
WSCript.Quit
End If
objTS.Close
End If

'レジストリの変更
Set objShell = CreateObject("WScript.Shell")
'SysInternal PSExec用の使用許諾レジストリを作成・チェック
objShell.RegWrite "HKCU\Software\Sysinternals\", ""
objShell.RegWrite "HKCU\Software\Sysinternals\PsExec\", ""
objShell.RegWrite "HKCU\Software\Sysinternals\PsExec\EulaAccepted", 1, "REG_DWORD"

'SysInternal PSExecを使用する。
strReturn = objShell.Run(strCmd, 0, true)

'処理済みのフラグを書き込む
Set objTS = objFS.CreateTextFile(strStatus, true)
objTS.Write (strReturn)
objTS.Close
WScript.Quit
</Script>
</job>
</package>

実行方法は、

C:\> anyonerun.wsf /server:マシン名 /command:notepad

ログオンスクリプトへの登録は、

anyonerun.wsf /server:%COMPUTERNAME% /command:実行ファイル
同様のことはWIN32APIのCreateProcessWithLogonW関数でも可能であるが、こちらのほうがはるかに簡単。

スクリプト内にID/Passwordを記述するためにMicrosoft Script Encoderを使用してコードを暗号化する。

上のコードをanyoneruns.wsfとして保存する。

C:\> c:\Program Files\Windows Script Encoder\screnc.exe /e sct anyoneruns.wsf.wsf c:\anyonerun.wsf

拡張子wsfのファイルは、Script Encoderでは認識できない。「/e」オプションを利用して、「.sct」ファイルに関連付ける必要がある。

PsExecをそのままログオンスクリプトへの登録しても良いが、SysInternalsの使用許諾が表示される。

IEを開くスクリプト例。別ユーザー権限のため、アドレスバー/メニューバー/ツールバーは非表示としている。以下の実行例では、「activex.vbs」として保存する。

Option Explicit
On Error Resume Next
Dim strUrl ' 表示するページ
Dim objIE ' IE オブジェクト

strUrl = "http://www.yahoo.co.jp/"
Set objIE = CreateObject("InternetExplorer.Application")
If Err.Number = 0 Then
objIE.Navigate strUrl
objIE.FullScreen = False
objIE.AddressBar = False ' アドレスバー
objIE.MenuBar = False ' メニューバー
objIE.StatusBar = True ' ステータスバー
objIE.ToolBar = False ' ツールバー
objIE.Visible = True
Else
WScript.Echo "エラー:" & Err.Description
End If

'読み込みが終わるまで待つ。
Do While objIE.busy
WScript.Sleep 100
Loop
Do While UCase(objIE.Document.readyState) <> UCase("complete")
WScript.Sleep 100
Loop

'ActiveXダウンロードまで待つ。
WScript.Sleep 1000
objIE.Quit
Set objIE = Nothing
Return 0

WScript.Quit

このスクリプトを上のスクリプトで開く

C:\> anyonerun.wsf /server:マシン名 /command:activex.vbs

%SYSTEMROOT%\Downloaded Program Files以下のファイル等で、コマンドプロンプトから DIRでしか見えないものを判断条件とする場合には、以下のようなバッチファイルを作成する。

if exist ファイルのパス for %%F in (ファイルのパス) do if %%~zF==ファイルサイズ 実行プログラムのパス
« November 2008 »
Su Mo Tu We Th Fr Sa
1
2345678
9101112131415
16171819202122
23242526272829
30
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: