ラベル Programming の投稿を表示しています。 すべての投稿を表示
ラベル Programming の投稿を表示しています。 すべての投稿を表示

2013年9月24日火曜日

Vbscriptでサービスの存在を確認

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

プログラムをインストールしたかどうか確認する場合があります。プログラムインストール後、サービスに追加されるのであれば、サービスが存在しているかどうかを確認することで、プログラムがインストールされたどうかを判断できます。

コードは以下です

'ローカルコンピュータに接続する。
Set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer
'クエリー条件をWQLにて指定する。
Set objClassSet = objService.ExecQuery("SELECT * FROM Win32_Service WHERE Name='Winmgmt'")

if objClassSet.count = 1 then
    wscript.echo("サービスが存在している")
end if

2013年9月6日金曜日

ASP.net Webサーバーからファイルをダウンロードする

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

Asp.netでWebサーバーからファイルをダウンロードするコードです。

private void DownloadFile(string filePath)
      {
          if (filePath != "")
          {
              string path = Server.MapPath(filePath);
              System.IO.FileInfo file = new System.IO.FileInfo(path);
              if (file.Exists)
              {
                  //Response.Cache.SetCacheability(HttpCacheability.NoCache);
                  //Response.ClearContent();
                  Response.Clear();
                  Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                  Response.AddHeader("Content-Length", file.Length.ToString());
                  Response.ContentType = "application/octet-stream";
                  //Response.WriteFile(file.FullName);
                  Response.TransmitFile(file.FullName);
                  Response.End();

              }
              else
              {
                  Response.Write(filePath + "が存在しません。管理者にご連絡ください。");
              }
          }
 
      }

DownloadFile(./download/<filename>)

Javascript Asp.net クライアントのMACアドレスを取得

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

JavaScriptでクライアントのMacアドレスを取得してWebサーバーに渡す方法をメモします。

default.apxに以下のコードを追加

<asp:HiddenField ID="hdnResultValue" Value="0" runat="server" />
<asp:Button ID="btn1" runat="server"  OnClientClick="GetMacAddr();" onclick="Btn1_Click" Text="GetMAC"/>

<script type="text/javascript">

  function GetMacAddr() {
        //This function requires following option to be enabled without prompting
        //In Internet Options for IE 5.5 and up
        //Tab Security (Local Internet Sites)
        //Custom Level button
        //"Initialize and script ActiveX control not marked as safe." option enabled
        try {
            var locator = new ActiveXObject("WbemScripting.SWbemLocator");
            var service = locator.ConnectServer(".");

            //Get properties of the network devices with an active IP address
            var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration" +
            " WHERE IPEnabled=TRUE");

            var e = new Enumerator(properties);

            //Take first item from the list and return MACAddress
            var p = e.item(0);
        }
        catch (exception) {
            //alert('Add your domain to Trusted Sites.');
            window.location = "about:blank";
        }
        document.getElementById("hdnResultValue").value = p.MACAddress;
        //return p.MACAddress;
    }
</script>

 

C#の方でhdnResultValueに対して操作する。

protected void Btn1_Click(object sender, EventArgs e)
   {
           string macAddr = hdnResultValue.Value.Replace(":", "");
           label2.Text = hdnResultValue.Value;
   }

※注意
・IEでしか動かない。

・IE⇒インタネットオプション⇒セキュリティでサイトを信頼済みサイトに追加し、信頼済みサイトのセキュリティレベル設定で「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」を有効にする

image

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

2011年11月15日火曜日

WSH オブジェクト

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

WSHの基本オブジェクト

 1つ目は、WSHに標準的に付属しているオブジェクトだ。多くのスクリプトは、これらの基本オブジェクトを単独、ないし組み合わせて利用することにより実現されている。

  • WScriptオブジェクト
     ほかのオブジェクトを呼び出したり、標準入出力を扱ったり、スクリプトの実行を制御したり、コマンドライン引数を読み込んだりできるWSHのトップレベル・オブジェクト。

  • FileSystemObjectオブジェクト
     ファイルやフォルダのコピー、移動、削除などを自由自在に行えるオブジェクト。サイズや更新日時などのプロパティの値も取得できる。
     またこのオブジェクトを使うことで、テキスト・ファイルに文字列を書き込んだり、読み出したりすることができる。

  • WshShellオブジェクト
     アプリケーションを起動させたり、終了させたりするためのオブジェクト。また、実行中のアプリケーションに対し、任意のキー・コード(キーを押したという情報)を送出することができる。つまり、このオブジェクトを使えば、キーボード操作を自動化できる。コンソール・アプリケーションでは、その出力内容も取得できる。
     ほかにも、レジストリの操作や、ショートカットの作成などが可能である。

  • WshNetworkオブジェクト
     ネットワーク・ドライブやネットワーク・プリンタをリストアップしたり、作成、削除したりできるオブジェクト。

  • WshControllerオブジェクト
     ネットワーク上のほかのPC上でスクリプトを実行することができるオブジェクト。

WSH Objects

2011年10月12日水曜日

整数のバイナリ表示を取得

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

image

ビット演算子を用いて、整数のバイナリ表示を得る

Version 1

void PrintBinary(int x,int d){
    char buffer[33];
    int index=0;
    for(;d>0;d--){
        buffer[index++]='0'+(x&1);
        x>>=1;
    }
    while (index >0 )
        printf("%c",buffer[--index]) ;
    return;
}

 

Version 2

void PrintBinary(int x,int d){
    char buffer[33];
    int index=0;
    while (d >0) {
        if (x & 1)
            buffer[index++]='1';
        else
            buffer[index++]='0';
        x >>= 1;
        d--;
    }
    while (index >0 )
        printf("%c",buffer[--index]) ;
    return;
}

2010年11月11日木曜日

VBScriptのRun、Exec関数

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

VBScriptでコマンドを実行するRun、Exec関数
Set objWshShell = Wscript.CreateObject("WScript.Shell")
objWshShell.Run "ipconfig /all", 0, true

ipconfig /all    実行するコマンド
0 ウィンドウを表示しない
true コマンド実行終了を待つ

Exec関数を使って、コマンドの出力(output)文字列を取得することが可能。
Set objWshShell = Wscript.CreateObject("WScript.Shell")
command = "ipconfig /all"
Set objExec = objWshShell.Exec(command)
Do Until objExec.StdOut.AtEndOfStream
result = result & objExec.StdOut.ReadLine
Loop

StdOut 標準出力

取得した文字列がresult変数に保存される



2010年7月30日金曜日

VBscriptで レジストリキーを操作

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

今レジストリキーを操作するVBscriptを書いているので、忘れないうちに、メモをしておきたい思います。

VBでレジストリを操作するためのWSH(Windows Scripting Host)のオブジェクトWscript.Shellを使用すると、レジストリキーを管理することが出来ます。

'Wscript.Shellオブジェクトの定義
Dim objWsh
Set objWsh = CreateObject("Wscript.Shell")

Wscript.Shellにはいくつかメソッドがあるので、気軽にレジストリキー、値の作成、変更および削除などの操作が出来ます。
RegWrite
RegRead
RegDelete など

Wscript.Shellオブジェクト詳細

'1つキーと二つ値を作成
'値名は(既定)、値は1
objWsh.RegWrite "HKCU\Software\Test\", 1, "REG_DWORD"
'値名は"testValueName"、値は"testValue"
objWsh.RegWrite "HKCU\Software\Test\testValueName", "testValue", "REG_SZ"

'キー名または値名の値を取得
'(既定)の値
Wscript.Echo objWsh.RegRead("HKCU\Software\Test\")
'testValueNameの値
Wscript.Echo objWsh.RegRead("HKCU\Software\Test\testValueName")

'testValueNameの値をtestValueChangedに変更
objWsh.RegWrite "HKCU\Software\Test\testValueName", "testValueChanged"

'testValueNameを削除
objWsh.RegDelete("HKCU\Software\Test\testValueName")
'キーTestを削除
objWsh.RegDelete("HKCU\Software\Test\")

※注意:RegWriteに複数引数を渡す場合は、括弧をつける必要はない

Wscript.Shellは便利ですが、機能としては十分ではありません。たとえば、サブキーの列挙やREG_MULTI_SZ型の値の変更などは出来ない。じゃ、どうしましょう。これからWMIを使う方法をご紹介いたします。

'サブキーの列挙
'キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetのサブキー一覧を取得

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut
'WMI サービスに接続し、さらに StdRegProv クラスに接続しています
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
'すべてのサブキーを出力する
For Each subkey In arrSubKeys
StdOut.WriteLine subkey
Next

コマンドラインモードで実行すれば、サブキー名が表示される
   cscript.exe [script Name]

'キーまたは値の存在確認、取得、変更
'strValueはnullの場合に、キーまたは値は存在しない。取得した値をstrValue変数に保存
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Test", "testValueName", strValue
if IsNull(strValue) Then
  Wscript.echo "not exist"
else
  Wscript.echo "exist"
end if

'変更。testValueNameが存在しない時に、新規作成する
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Test","testValueName", Array("a","b")
変更するには、管理者モードで実行する必要があります。

2010年7月28日水曜日

VBscriptについてのメモ

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

最近よくVBscriptを使って、システム管理用のスクリプトを書いています。ここにメモをしておきます。

①文字列、ログをファイルに出力。
    Set objFso = CreateObject("Scripting.FileSystemObject")
  '読み取り専用でファイルを開く
    Set objFile = objFso.OpenTextFile("c:\test.txt",1)
  '上書きモードで開く
    Set objFile = objFso.OpenTextFile("c:\test.txt",2)
  '追加モードで開く(ファイルが存在しない場合は、新規作成[true])
    Set obfFile = objFso.OpenTextFile("c:\test.txt",8,true)

  ※ログを残すときに、追加モードが一番使われる。

②LDAPを使って、ADオブジェクトや属性を操作
  'ユーザーオブジェクトの属性を取得する
    Set objUser = CreateObject("LDAP://CN=testuser,OU=testOU,DC=test,DC=local")
    objUser.Get([AttributeName])
    Wscript.Echo objUser.distinguishName
    Wscript.Echo objUser.displayname
    ......

  'アカウントの作成
    Set objOU = CreateObject("LDAP://OU=testOU,DC=test,DC=local")
    Set objUser = objOU.Create("User","CN=testUser")
    objUser.Put "sAMAccountName", "yechangyao"
    objUser.SetInfo

  '属性の設定、変更
    Set objUser = CreateObject("LDAP://CN=testuser,OU=testOU,DC=test,DC=local")
    objUser.Put "displayName", "ye changyao"
    objUser.Put "mail","[email protected]"
    objUser.Put "userPrincipalName", "[email protected]"
    objUser.SetInfo

  'ユーザーパスワードの設定
    objUser.SetPassword "Password!"

  'ユーザーアカウントの無効化
    objUser.AccountDisabled = TRUE

  '"DC=test,DC=local"のような文字列を取得
    Set objRootDSE = GetObject("LDAP://RootDSE")
    Wscript.Echo objRootDSE.get("defaultNamingContext")

VBscript リファレンス MSDN

ADSI LDAP Provider MSDN