2013年8月7日水曜日

VBScriptでWeb上のファイルをダウンロードする

  • このエントリーをはてなブックマークに追加


VBScriptでWebサイト上のファイルをダウンロードするスクリプトです。

例:comodoのinstallerを自作のWEBサーバーにおいて、そこからダウンロードし、クライアントの方で実行するスクリプトです。関数DownloadFileがダウンロードファイルのURL、ファイル名、保存先フォルダを指定してて使えます。

Function DownloadFile(strUrl,strFile,strFolder)
    ' ダウンロード用のオブジェクト
    Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
    on error resume next
    Call objSrvHTTP.Open("GET", strUrl, False )
    if Err.Number <> 0 then
        Wscript.Echo Err.Description
        Wscript.Quit
    end if
    objSrvHTTP.Send

    if Err.Number <> 0 then
    ' おそらくサーバーの指定が間違っている
        Wscript.Echo Err.Description
        Wscript.Quit
    end if
    on error goto 0
    if objSrvHTTP.status = 404 then
        Wscript.Echo "URLが正しくありません(404)"
        Wscript.Quit
    end if
    ' バイナリデータ保存用オブジェクト
    Set Stream = Wscript.CreateObject("ADODB.Stream")
    Stream.Open
    Stream.Type = 1 ' バイナリ
    ' 戻されたバイナリをファイルとしてストリームに書き込み
    Stream.Write objSrvHTTP.responseBody
    ' ファイルとして保存
    Stream.SaveToFile strFolder & strFile, 2
    Stream.Close
End Function

'Webサイト上のフルパス
url = "http://10.10.3.60/download/cert/cispremium_installer.exe"
'保存先フォルダ
folder = "c:\temp\"
'保存したファイルの名前
filename = "cispremium_installer.exe"

'ダウンロード
DownloadFile url, filename, folder

'ダウンロードしたあとに、.exeを実行する
cmd = "cmd /c " & folder & filename
Set objShell = WScript.CreateObject("WScript.Shell")
’Runで1を指定すると画面が表示される
objShell.Run cmd,1,true
set objShell = Nothing

2013年8月2日金曜日

Powershell 2.0では配列にContainsメッソドが使えない

  • このエントリーをはてなブックマークに追加


Powershell 2.0では、配列に要素が存在するかを確認するときに、Contains()メッソドを使うと、エラーが発生します。

[System.Object[]] に 'contains' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。
発生場所 行:1 文字:14
+ $arr.contains <<<< ("aa")
    + CategoryInfo          : InvalidOperation: (contains:String) []、RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Powershell 3.0ではうまくいくのですが、Powershell 2.0では使えません。

image

代替策としては、-Containsを使います。

$arr  –contains  “aa”

実行すると、Trueが返って来ます。

Powershell 重複要素 異なる要素の出力と配列結合

  • このエントリーをはてなブックマークに追加


今日は、Powershellの配列についての話です。

複数配列に存在している同じ(共通)要素を取り出したり、異なる要素を出力したりすることがあります。

例えば、以下2つの配列があるとします。

$array1 = "apple","bear","cat","dog"
$array2 = "apple","book","cut","dog"

1)2つ配列の共通要素を出力する

$array1 | Where-Object { $array2 -contains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -contains $_){ $newArr += $_ }}

 

2)$array1にある、$array2にない要素を出力する

$array1 | Where-Object { $array2 -notcontains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -notcontains $_){ $newArr += $_ }}

 

3)2つの配列を結合して、重複要素を重複させないようにする

$unionArr = $array1 + $array2 |  Select-Object –Unique

image