[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

WSH を使った VBScript いろいろ

WSH を使った VBScript なものを、いくつか作ってみました。
VB 自体よくわかっていませんので、あ、なんか、こんなものができちゃった、 という程度のものです。


目次


IE を使って HTML をテキストに変換する

入力された URL にアクセスして、テキストをウィンドウで出力します。
コードは以下の通りです。

Dim strURL, objIE

strURL = InputBox("URL: ", "iewget")
if strURL = "" then
        MsgBox "Null string",,"Error!"
else
        set objIE = WScript.CreateObject("InternetExplorer.Application")
        objIE.Navigate(strURL)
        Do While objIE.busy
        Loop
        Do While objIE.Document.readyState <> "complete"
        Loop
        WScript.Echo(objIE.Document.body.innerText)
	Set objIE = Nothing
end if

最初に、InputBox を使って URL を聞きます。
戻り値に入力された文字列が入っているはずですが、空っぽだったらエラーです。
そうでなければ、IE にアクセスさせます。
最後に、テキストを出力しています。
busy とか readyState とか見ていますが、意味はよくわかっていません。 詳しくは
参考文献をご覧ください。


Outlook を使ってメールを送信する

コマンドラインで指定された引数をもとに、メールを送信します。

Dim objMail, objApp, objArgs

Set objArgs = WScript.Arguments
If objArgs.Count <> 3 Then
        MsgBox "Usage: mailtest.vbs to_address subject message",,"Bad args"
Else
        Set objApp = CreateObject("Outlook.Application")
        Set objMail = objApp.CreateItem(0)
        objMail.To = objArgs(0)
        objMail.Subject = objArgs(1)
        objMail.Body = objArgs(2)
        objMail.Send
	Set objMail = Nothing
	Set objApp = Nothing
End If
Set objArgs = Nothing

Outlook の設定さえ間違っていなければ、送信されるはずです。
宛先アドレス、サブジェクト、本文を、コマンドラインの引数から得ます。 指定が間違っていれば、MsgBox でその旨を伝えます。
あとは見ての通りです。 それ以上は聞かないでくださいすみませんという感じです。

先ほどの、IE のやつと組み合わせると、 特定のページをテキストにしてメールに流す、ということができます。

Dim objIE, objMail, objApp

set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate("http://www.usupi.org/")
Do While objIE.busy
Loop
Do While objIE.Document.readyState <> "complete"
Loop

Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(0)
objMail.To = "usu@usupi.org"
objMail.Subject = "[usupi.org] " & Date
objMail.Body = objIE.Document.body.innerText
objMail.Send

Set objMail = Nothing
Set objApp = Nothing
Set objIE = Nothing

http://www.usupi.org/ をテキストに変換して usu@usupi.org にメールします。
これを、毎日更新されるページ(Qさんとかテーマパーク4096とか)に対して、 タスクで毎日実行するようにしておけば、 いちいちアクセスせずにメールを読むだけですむので、便利です(たぶん)。


ssh を使ってファイルのコピーを行う

コピーしたいファイルを指定すると、特定の場所に ssh でコピー(scp)します。

Dim objArgs, objSh, strFile, strCmd, intErr
Const strDest = "usu@usugw.usupi.org:/usr/home/back"

strCmd = "%SystemRoot%\system32\cmd.exe /C c:\cygwin\bin\scp.exe "
Set objArgs = Wscript.Arguments
If objArgs.count < 1 then
	MsgBox "ファイルを指定してください。"
Else
        For each strFile in objArgs
                strCmd = strCmd + strFile + " "
        Next
        strCmd = strCmd + strDest
        Set objSh = WScript.CreateObject("WScript.Shell")
        intErr = objSh.Run strCmd, 1, True
	If intErr <> 0 Then
		MsgBox "scp が" & intErr & "を返しました",,"scp result"
	Else
		MsgBox "scp が終了しました",,"scp result"
	End If
        Set objSh = Nothing
End if
Set objArgs = Nothing

特定の場所は、strDest で示しています。お好みの場所に変更してください。
strCmd に、Cygwin の scp.exe を指定しています。 パスなどが異なる場合は、ここを適当に変更します。
パスワードの入力などが必要なければ、Run メソッドの第2引数を 0 にすると、 ウィンドウが表示されないのでうっとおしくなくなるかもしれません。


rsh を使って別のマシンの kterm を起動する

UNIX や UNIX もどきな環境がない方にとっては、役に立たないものです。
Windows 上で XFree86 などの X サーバが動作しているときに、別のマシンの kterm を Windows 上に表示させるものです。

dim strHost
strHost = InputBox("Hostname: ", "kterm")
if strHost = "" then
        MsgBox "Null string",,"Error!"
else
        dim wshShell, strCmd, strOpt, intErr
        set wshShell = WScript.CreateObject("WScript.Shell")
        strCmd = " /usr/X11R6/bin/kterm"
        strOpt = "-fn a14 -fr r14 -fk k14"
        select case strHost
        case "tamao"
                strCmd = " /usr/X11R6/bin/kterm"
                strOpt = "-fn a14 -fr r14 -fkB k14"
        case "indy"
                strCmd = " /usr/bin/X11/kterm"
        end select
        intErr = wshShell.Run("%SystemRoot%\system32\rsh.exe " + strHost + _
		strCmd + " -display %ComputerName%:0 " + strOpt, 0, FALSE)
        if intErr <> 0 then
                MsgBox "Return code : " & intErr,,"kterm result"
        end if
	set wshShell = Nothing
end if

まず最初に、InputBox で別マシンの名前を得ます。
そして、コマンド名(strCmd)やオプション(strOpt)を決定します。 マシンによって、kterm のパスが違ったり、オプションを変えたいことがあると思います。 そこで、Select case ステートメントを使って、 その別マシンにあったパスやオプションに変更しています。
あとは、rsh を起動するだけです。

ただ、そもそも別マシンに rsh できないといけないですし、 別マシンから Windows の X サーバに接続できるようにしておく必要もあります。
rsh できるようにするには、 別マシンの $HOME/.rhosts に Windows マシンのホスト名を書いておきます。 別マシンが rsh を受け付けさえすれば (inetd 経由で in.rshd が動作する設定になっていれば)、いけると思います。
別マシンから kterm を起動(表示)できるようにするには、 あらかじめ Windows 上で xhost コマンドを実行しておきます。
# xhost そのマシン名 とか xhost + とか。xhost + は覚悟が必要です。;-p


参考文献

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Tue Jun 15 23:18:33 2004