Microsoft XPS Document Writer

.NET Framework 3.0をインストールすると、プリンタとして"Microsoft XPS Document Writer"が追加されます。

.NET Framework 3.0をインストールした時には、気がつきませんでしたが、年賀状を印刷するためにプリンタ関係を設定していて気がつきました。

このXPS(XML Paper Specification)は・・・と説明を書こうとおもいましたが、keywordページを見たほうがはやいですね。
"一言で言ってしまうとMicrosoft製のPDF"この言葉につきます。

Visual Studio 2005 Express Edition SP1

Visual Studio 2005 Express Edition用のService Pack1が出ていますね。

Microsoft Visual Studio 2005 Service Pack 1


Express Edtion以外のSP1はこちら、
Microsoft® Visual Studio® 2005 Standard, Professional, Team Editions 用の Service Pack 1

当面、Express Edition以外を利用する機会はなさそうですが・・

IISのASPデバッグの有効/無効をvbscriptから切り替える

先日ASPの開発をやっていて、ASPデバッグの有効/無効の切り替えを頻繁に実行する必要がありました。
そのときは、めんどくさいと思いながら手動で切り替えていました。

しかし、やっぱりこんな作業は自動でやるべき!と思い、スクリプトを作成しました。

Option Explicit

Dim iisObj

Set iisObj = GetObject("IIS://localhost/w3svc/1/root")

If iisObj.Class = "IIsWebVirtualDir" Then
    If iisObj.AppAllowDebugging Then
        WScript.Echo "DebugON→OFF"
        iisObj.AppAllowDebugging = False
    Else
        WScript.Echo "DebugOFF→ON"
        iisObj.AppAllowDebugging = True
    End If
    iisObj.SetInfo()
    iisObj.AppUnload()
End If

これで、http://localhost/の全体のASPデバッグの切り替えが行えます。

特定の仮想ディレクトリだけ設定する場合は、

GetObject("IIS://localhost/w3svc/1/root")

の部分を

GetObject("IIS://localhost/w3svc/1/root/test")

のようにすると、http://localhost/test の設定を変えることができます。
参考:
方法 : IIS で ASP デバッグを有効にする

TDDに挑戦

いい加減に、開発にTDDをとりいれられるように

WEB+DB PRESS Vol.35

WEB+DB PRESS Vol.35

を買って読んでる最中。

ただ、メインの開発が.NETなんだけど・・まー役に立つはず

イベントログから指定期間のイベントを取得する方法

イベントログに記録されているイベントについて、期間を指定をして取得する方法を調べました。

Const CONVERT_TO_LOCAL_TIME = True 
Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime") 
Set dtmEndDate = CreateObject("WbemScripting.SWbemDateTime") 
DateToCheck = CDate("2/18/2002") 
dtmStartDate.SetVarDate DateToCheck, CONVERT_TO_LOCAL_TIME 
dtmEndDate.SetVarDate DateToCheck + 1, CONVERT_TO_LOCAL_TIME 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colEvents = objWMIService.ExecQuery _ 
    ("Select * from Win32_NTLogEvent Where TimeWritten >= '" _ 
        & dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'") 
For each objEvent in colEvents 
    Wscript.Echo "Category: " & objEvent.Category 
    Wscript.Echo "Computer Name: " & objEvent.ComputerName 
    Wscript.Echo "Event Code: " & objEvent.EventCode 
    Wscript.Echo "Message: " & objEvent.Message 
    Wscript.Echo "Record Number: " & objEvent.RecordNumber 
    Wscript.Echo "Source Name: " & objEvent.SourceName 
    Wscript.Echo "Time Written: " & objEvent.TimeWritten 
    Wscript.Echo "Event Type: " & objEvent.Type 
    Wscript.Echo "User: " & objEvent.User 
    Wscript.Echo objEvent.LogFile 
Next


上記の例では、2002/2/18に発生した全てのイベントを取得することができます。
ただし、このスクリプトは、Windows XP 以上でなければ動作しません。

Windows 2000 で実行すると、下記のようなエラーが出て実行できません。

Microsoft VBScript 実行時エラー: ActiveX コンポーネントはオブジェクトを作成できません。:
'WbemScripting.SWbemDateTime'

どうやら、Windows 2000では'WbemScripting.SWbemDateTime'オブジェクトはサポートされていないようです。
調べてみると、'WbemScripting.SWbemDateTime'はローカル時刻をUTCに変換する処理を実行しているようです。

そこで、Windows 2000では下記のような関数を実装してUTC形式に変換してあげる必要があります。

Function FormatUTCDate(dDate)
    Dim strReturn

    strReturn = Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2)
    strReturn = strReturn & "000000.000000+540"

    FormatUTCDate = strReturn
    
End Function

最初にあげたコードをWindows 2000用に直すと

DateToCheck = CDate("2/18/2002") 
dtmStartDate = FormatUTCDate(DateToCheck)
dtmEndDate = FormatUTCDate(DateToCheck + 1)

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colEvents = objWMIService.ExecQuery _ 
    ("Select * from Win32_NTLogEvent Where TimeWritten >= '" _ 
        & dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'") 
For each objEvent in colEvents 
    Wscript.Echo "Category: " & objEvent.Category 
    Wscript.Echo "Computer Name: " & objEvent.ComputerName 
    Wscript.Echo "Event Code: " & objEvent.EventCode 
    Wscript.Echo "Message: " & objEvent.Message 
    Wscript.Echo "Record Number: " & objEvent.RecordNumber 
    Wscript.Echo "Source Name: " & objEvent.SourceName 
    Wscript.Echo "Time Written: " & objEvent.TimeWritten 
    Wscript.Echo "Event Type: " & objEvent.Type 
    Wscript.Echo "User: " & objEvent.User 
    Wscript.Echo objEvent.LogFile 
Next

Function FormatUTCDate(dDate)
    Dim strReturn

    strReturn = Year(dDate) & Right("0" & Month(dDate), 2) & Right("0" & Day(dDate), 2)
    strReturn = strReturn & "000000.000000+540"

    FormatUTCDate = strReturn
    
End Function

参考:
Hey, Scripting Guy! 特定の日付より古いファイルをすべて削除することはできますか