MR2オーナー吉田貴幸のブログ

MR2(SW20)オーナー吉田貴幸のブログ。仕事はITインフラエンジニア。愛車の記事とIT関連の情報を発信しています

【Windows】[VBScript] 過去1年間のイベントログをCSV形式で出力する

 f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

 

VBScriptで過去1年間のイベントログを、CSV形式で出力するサンプルです。Windows標準のMMCからCSV形式でエクスポートしても、改行が含まれるメッセージがあると、ExcelやAccessでインポートエラーとなるので、VBScriptを使って整形して出力します。

 

過去1年間のイベントログをCSV形式で出力する

  • eventlogExport.vbs
'//イベントログをCSV形式でエクスポートする
On error resume next

'//変数
Dim oClassSet_All
Dim oClassSet_Eventcode
Dim oClassSet_OS
Dim oClass
Dim oLocator
Dim oService
dim strBaseDate
dim strStartDate
dim intEventCode
dim strBeforeEventCode
dim intEventCount
dim strAnalyzeMsg
dim eventDate
dim eventDateJST
dim strEventMsg

'//WMI接続
Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = oLocator.ConnectServer

'//取得するイベントログの開始日
'strBaseDate = "2020/1/1"
strBaseDate = DateAdd("y", -1, DateAdd("h", -9, now))

'//イベントログの取得(Application、System)
Set oClassSet_All = oService.ExecQuery("Select * From Win32_NTLogEvent Where (logfile='System' or Logfile='application') And TimeGenerated > '"& strBaseDate &"'")

'//ヘッダー出力
wscript.echo "ComputerName,Logfile,TimeGenerated,TimeGenerated(JST),EventType,type,EventCode,User,SourceName,Message"

'//イベントログコレクション
For Each oClass In oClassSet_All

'//イベント日時変換(JST)
eventDate = cdate(left(oClass.TimeGenerated,4) & "/" & mid(oClass.TimeGenerated,5,2) & "/" & mid(oClass.TimeGenerated,7,2) & " " & mid(oClass.TimeGenerated,9,2) & ":" & mid(oClass.TimeGenerated,11,2) & ":" & mid(oClass.TimeGenerated,13,2))
eventDateJST = DateAdd("h", 9 , eventDate)

'//MS-AccessへのCSVで取り込みエラーが出ないように、イベントログメッセージの変換。
'//改行は(CrLf)にする
'//ダブルクォーテーションはシングルクォーテーションにする
strEventMsg = oClass.Message
strEventMsg = Replace(strEventMsg, vbCrLf, "(CRLF)")
strEventMsg = Replace(strEventMsg, vbCr, "(CR)")
strEventMsg = Replace(strEventMsg, vbLf, "(LF)")
strEventMsg = Replace(strEventMsg, chr(34), "'")

'//イベントログ出力
wscript.echo _
chr(34) & oClass.ComputerName & chr(34) & "," &_
chr(34) & oClass.Logfile & chr(34) & "," &_
chr(34) & oClass.TimeGenerated & chr(34) & "," &_
chr(34) & eventDateJST & chr(34) & "," &_
chr(34) & oClass.EventType & chr(34) & "," &_
chr(34) & oClass.Type & chr(34) & "," &_
chr(34) & oClass.EventCode & chr(34) & "," &_
chr(34) & oClass.User & chr(34) & "," &_
chr(34) & oClass.SourceName & chr(34) & "," &_
chr(34) & strEventMsg & chr(34)
Next

'//オブジェクトクリア
Set oClassSet_All = Nothing
Set oClass = Nothing
Set oService = Nothing
Set oLocator = Nothing

Wscript.quit

 

実行方法

取得したいサーバーで、コマンドプロンプトから以下のコマンドで実行してください

>cscript //NOLOGO (スクリプトパス)\eventlogExport.vbs > (実行結果出力先パス、ファイル名)

例)cscript c:\temp\eventlogExport.vbs //NOLOGO > c:\temp\eventlogExport.csv

 

出力結果

CSV形式(カンマ、””区切り)で出力します。

ComputerName:コンピュータ名

Logfile:イベントログの種類(Application、System)

TimeGenerated:イベント発生日時

TimeGenerated(JST):イベント発生日時(日本時間変換後)

EventType:イベントの種類コード

type:イベントの種類

EventCode:イベントコード

User:ユーザー

SourceName:ソース

Message:イベントの内容(改行なし) 

【Windows】[VBScript] イベントログで OS再起動に発生していないエラーのみ を出力する

 f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

 

OS起動後にイベントログでエラーが発生していた場合、過去に発生したイベントコードなのかをVBScriptで確認するサンプルです。OSを再起動してイベントログを確認する際に、過去に発生していたエラーなのかをVBScriptを使って確認します。

このコード、過去のイベントコードを確認する動作が遅いです。。

 

イベントコードごとに過去3か月のエラー回数を出力する

  • eventlogAnalyze.vbs
On error resume next

'//変数

Dim oClassSet_All
Dim oClassSet_Eventcode
Dim oClassSet_OS
Dim oClass
Dim oLocator
Dim oService
Dim strBaseDate
Dim strStartDate
Dim intEventCode
Dim strBeforeEventCode
Dim intEventCount
Dim strAnalyzeMsg
Dim strEventMsg

'//イベントログ遡及開始日を3か月前とする
strStartDate = DateAdd("m", -3, DateAdd("h", -9, now))
'strBaseDate = "2020/12/29 4:30"

'//WMI接続
Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")Set oService = oLocator.ConnectServer
'//OS起動日時の取得
Set oClassSet_OS = oService.ExecQuery("Select * From Win32_OperatingSystem")For Each oClass In oClassSet_OS strBaseDate = CStr(oClass.LastBootUpTime)Next

'//OS起動時以降のイベントログを取得する(エラーのみ)
Set oClassSet_All = oService.ExecQuery("Select * From Win32_NTLogEvent Where (logfile='System' or Logfile='application') and (EventType=1) and TimeGenerated > '"& strBaseDate &"'")

'//ヘッダー出力
wscript.echo "最後に起動した日時: " & strBaseDate
wscript.echo "イベントログ遡及確認日時: " & strStartDate
wscript.echo "ComputerName,Logfile,TimeGenerated,TimeGenerated(JST),EventType,type,EventCode,User,SourceName,Message,このイベントIDが過去に発生した回数,新規/既知"

'//イベントログコレクション
For Each oClass In oClassSet_All

'//前レコードとイベントコードが同一であれば、カウントをスキップ
If strBeforeEventCode <> oClass.EventCode then
intEventCount = EventCodeCount(oClass.EventCode,strBaseDate,strStartDate)
strBeforeEventCode = oClass.EventCode
End If

'//新規、既知判定
If intEventCount = 0 then
strAnalyzeMsg = "新規"
Else
strAnalyzeMsg = "既知"
End If

'//イベント日時変換(JST)
eventDate = cdate(left(oClass.TimeGenerated,4) & "/" & mid(oClass.TimeGenerated,5,2) & "/" & mid(oClass.TimeGenerated,7,2) & " " & mid(oClass.TimeGenerated,9,2) & ":" & mid(oClass.TimeGenerated,11,2) & ":" & mid(oClass.TimeGenerated,13,2))
eventDateJST = DateAdd("h", 9 , eventDate)

'//MS-AccessへのCSVで取り込みエラーが出ないように、イベントログメッセージの変換。
'//改行は(CrLf)にする
'//ダブルクォーテーションはシングルクォーテーションにする

steEventMsg = oClass.Message
steEventMsg = Replace(steEventMsg,vbCrLf,"(CrLf)")
steEventMsg = Replace(steEventMsg,vbCr,"(Cr)")
steEventMsg = Replace(steEventMsg,vbLf,"(Lf)")
steEventMsg = Replace(steEventMsg,chr(34),"'")

'//イベントログ出力
wscript.echo _
chr(34) & oClass.ComputerName & chr(34) & "," &_
chr(34) & oClass.Logfile & chr(34) & "," &_
chr(34) & oClass.TimeGenerated & chr(34) & "," &_
chr(34) & eventDateJST & chr(34) & "," &_
chr(34) & oClass.EventType & chr(34) & "," &_
chr(34) & oClass.Type & chr(34) & "," &_
chr(34) & oClass.EventCode & chr(34) & "," &_
chr(34) & oClass.User & chr(34) & "," &_
chr(34) & oClass.SourceName & chr(34) & "," &_
chr(34) & steEventMsg & chr(34) & "," &_
chr(34) & intEventCount & chr(34) & "," &_
chr(34) & strAnalyzeMsg & chr(34)
Next

'//オブジェクトクリア
Set oClassSet_All = Nothing
Set oClass = Nothing
Set oService = Nothing
Set oLocator = Nothing

'//基準日から開始日まで遡ってイベントコードの発生件数をカウントする
Function EventCodeCount(strEventCode,strBaseDate,strStartDate)

Set oClassSet_Eventcode = oService.ExecQuery("Select * From Win32_NTLogEvent Where (logfile='System' or Logfile='application') And (TimeGenerated < '"& strBaseDate &"' And TimeGenerated > '"& strStartDate &"') And Eventcode=" & strEventCode & "")
EventCodeCount = oClassSet_Eventcode.count

End Function

Wscript.quit

 

実行方法

取得したいサーバーで、コマンドプロンプトから以下のコマンドで実行してください

>cscript //NOLOGO (スクリプトパス)\eventlogAnalyze.vbs > (実行結果出力先パス、ファイル名)

例)cscript c:\temp\eventlogAnalyze.vbs //NOLOGO > c:\temp\eventlogAnalyze.csv

 

出力結果

CSV形式(カンマ、””区切り)で出力します。

ComputerName:コンピュータ名

Logfile:イベントログの種類(Application、System)

TimeGenerated:イベント発生日時

TimeGenerated(JST):イベント発生日時(日本時間変換後)

EventType:イベントの種類コード

type:イベントの種類

EventCode:イベントコード

User:ユーザー

SourceName:ソース

Message:イベントの内容

このイベントIDが 過去に発生した回数:OS起動前にこのイベントコードが発生した件数

新規/既知:OS起動後に新規に発生したエラーが新規、それ以外は既知

 

【Windows】リモートデスクトップ先のコンピュータで Ctrl+Alt+Delete キーを使用する

f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

リモートデスクトップで接続先のサーバーやPCで[Ctrl]+[Alt]+[Delete]キーを使用したい場合、[Ctrl]+[Alt]+[Delete]キーを押してもローカルコンピュータ側で反応してしまいます。

そこで、リモートデスクトップ接続先で[Ctrl]+[Alt]+[Delete]キーを使用する方法をご紹介します。

 

リモートデスクトップ接続時は [Ctrl]+[Alt]+[End] キーを使用する

リモートデスクトップで接続しているときに、Ctrl+Alt+Deleteキーではなく、Ctrl+Alt+Endキーを押すことで、リモートデスクトップ先でCtrl+Alt+Deleteキーが押された状態になります。

リモートデスクトップの全画面表示でもウィンドウ表示 でも有効です。

f:id:takayuki-yoshida:20201226214542p:plain

 

コマンドプロンプトを使用する

コマンドプロンプトを開き、以下のコマンドを実行することで、Ctrl+Alt+Deleteキーを送信できます。

> explorer.exe shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0} 

バッチファイルにしておくと、ダブルクリックで実行できますね

 

参考

superuser.com


【Windows】PowerShellを使用して、Windows標準機能のみでランダムなパスワードを生成する

f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

インターネットのパスワード生成サイトを使用しないで、Windows標準機能のみでパスワードを生成する方法を紹介します。PowerShellを使用します。

 

パスワードを生成する

PowerShellを起動して、以下のコマンドを実行することで、パスワードを生成することができます。

下記の例は、パスワードの長さ8文字英数字以外の文字 (@、#、!、%、& など) を1個含むパスワードの生成例です

Add-type -AssemblyName System.Web;[System.Web.Security.Membership]::GeneratePassword(8,1)

 

※上記のコマンドは、改行されて表示される場合がありますが、改行不要です

※例を参考にパスワードポリシーにあわせて、GeneratePasswordのカッコ内の数字を変更してください

 

参考

docs.microsoft.com

【Windows】VBScriptでプロダクトキーを表示・取得する

f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

WindowsのプロダクトキーをVBScriptで表示・取得する方法を紹介します。フリーソフトなどを使用せず、Windows標準機能で取得ができます。

 

Productkey.vbs

メモ帳を開き、以下のテキストをコピーして、名前を付けて保存からファイル名「Productkey.vbs」を入力して保存してください

Set WshShell = CreateObject("WScript.Shell")
wscript.echo ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

 

参考に記載されているソースから、プロダクトキー表示の箇所を標準出力へ変更しています。

 

実行方法

コマンドプロンプトを開き、下記コマンドで実行します。

>cscript //nologo Productkey.vbs

 

 

出力結果をリダイレクトして、テキストで保存することもできます。

>cscript //nologo Productkey.vbs > Productkey.txt

 

なお、Productkey.vbsファイルをダブルクリックで実行して、GUI表示も可能です。

 

参考

social.technet.microsoft.com

 

【OneDrive for business】OneDriveをネットワークドライブに設定する

f:id:takayuki-yoshida:20200924200628p:plain

 

 

はじめに

OneDrive for businessをネットワークドライブに設定する方法を紹介します。

注:マイクロソフトより、WebDAVでネットワークドライブで接続する際に、認証エラーが発生する場合の対処方法が公開されています。こちらの手順(レジストリ追加)の実施も行ってください(2020/11/1追記)

docs.microsoft.com

 

OneDrive for business をエクスプローラーで表示する

ネットワークドライブを設定したいPCで、[スタート]メニューを開き、[Windows アクセサリ]-[Internet Explorer]を開きます

f:id:takayuki-yoshida:20200922000843p:plain

2.2 「Internet Explorer」で、ネットワークドライブに設定したいOneDriveのURLを入力します。

 f:id:takayuki-yoshida:20200922000930p:plain

※OneDriveのURLは以下の方法で調べることができます。

タスクトレイのOneDrive for business のアイコンをクリックして「オンラインで表示」をクリックします

f:id:takayuki-yoshida:20200924200837p:plain

表示されたURLをコピーします。このURLをInternet Explorerに貼り付けして開きます。

f:id:takayuki-yoshida:20200924200859p:plain

 

Internet Explorerのメニューの「設定アイコン」をクリックし、「インターネットオプション」をクリックします。

 f:id:takayuki-yoshida:20200922000944p:plain

「セキュリティ」タブを開き「信頼済みサイト」を選択し、「サイト」をクリックします

f:id:takayuki-yoshida:20200922001011p:plain

このWebサイトをゾーンに追加するに下記のURLを入力し、「追加」をクリック、次に「閉じる」をクリックします。
※1URLごと繰り返しすべてのURLを追加します。
https://portal.office.com
https://*.sharepointonline.com
https://*.officeapps.live.com
https://*.cdn.office.net
https://*.osi.office.net
https://*.microsoft.com
https://*.microsoftonline.com
https://*.windows.net
https://*.sharepoint.com
https://*.akamaihd.net
https://*.azure-dns.com
https://*.azure-dns.net
https://*.azure-dns.org
https://*.azure-dns.info
https://*.office365.com
https://outlook.office365.com

f:id:takayuki-yoshida:20200924200924p:plain

「OK」をクリックします

f:id:takayuki-yoshida:20200922001050p:plain

Internet Explorerで表示されているOneDriveのメニューをクリックし、「エクスプローラーで表示」をクリックします

 f:id:takayuki-yoshida:20200924201034p:plain

ポップアップブロックのメッセージが表示された場合は、「このサイトのオプション」-「常に許可」をクリックします

f:id:takayuki-yoshida:20200922001224p:plain

エクスプローラーでOneDriveが表示されます

 

3 OneDriveをネットワークドライブに設定する

 エクスプローラーで開いたドキュメントライブラリのアドレスを全選択し、右クリック「コピー」でアドレスをコピーします

f:id:takayuki-yoshida:20200922001504p:plain


エクスプローラーの左に表示されているフォルダのツリーから「PC」を右クリックし、「ネットワークドライブの割り当て」をクリックします

f:id:takayuki-yoshida:20200922001523p:plain

割り当てる「ドライブ」名を選択して、フォルダーに前項でコピーしたアドレスを貼り付けします。次に「完了」をクリックします

f:id:takayuki-yoshida:20200922001558p:plain

ネットワークドライブに割り当てが完了し、ネットワークドライブで表示されるようになります

 

WebClientサービスを自動起動に設定する

「スタート」メニューを開き、「Windows管理ツール」-「サービス」をクリックします

f:id:takayuki-yoshida:20200922001650p:plain

サービスの一覧から「WebClient」を右クリックし「プロパティ」をクリックします

f:id:takayuki-yoshida:20200922001727p:plain

スタートアップの種類を「自動」を選択して「OK」をクリックします

※サービスの状態が「停止」になっている場合は、「開始」をクリックして、「実行中」になることを確認してください

f:id:takayuki-yoshida:20200922001745p:plain

以上で設定完了です

 

参考

docs.microsoft.com


【SharePoint Online】SharePointのドキュメントライブラリをネットワークドライブに設定する

 

f:id:takayuki-yoshida:20200922001949p:plain

 

はじめに

SharePoint Online のドキュメントライブラリにエクスプローラーからアクセスし、ネットワークドライブに設定する方法を紹介します。

 

注:マイクロソフトより、WebDAVでネットワークドライブで接続する際に、認証エラーが発生する場合の対処方法が公開されています。こちらの手順(レジストリ追加)の実施も行ってください(2020/11/1追記)

docs.microsoft.com

 

 

SharePoint Onlineのドキュメントライブラリをエクスプローラーで表示する

ネットワークドライブを設定したいPCで、[スタート]メニューを開き、[Windows アクセサリ]-[Internet Explorer]を開きます

f:id:takayuki-yoshida:20200922000843p:plain

「Internet Explorer」で、ネットワークドライブに設定したいSharePointドキュメントライブラリのURLを入力します。

 f:id:takayuki-yoshida:20200922000930p:plain

Internet Explorerのメニューの「設定アイコン」をクリックし、「インターネットオプション」をクリックします。

 f:id:takayuki-yoshida:20200922000944p:plain

「セキュリティ」タブを開き「信頼済みサイト」を選択し、「サイト」をクリックします

f:id:takayuki-yoshida:20200922001011p:plain

「追加」をクリックします

f:id:takayuki-yoshida:20200922001025p:plain

このWebサイトをゾーンに追加するに「https://*.sharepoint.com」と入力し、「追加」をクリック、次に「閉じる」をクリックします

f:id:takayuki-yoshida:20200922001040p:plain

「OK」をクリックします

f:id:takayuki-yoshida:20200922001050p:plain

Internet Explorerで表示されているドキュメントライブラリのメニューから「 すべてのドキュメント」をクリックし、「エクスプローラーで表示」をクリックします

 f:id:takayuki-yoshida:20200922001143p:plain

ポップアップブロックのメッセージが表示された場合は、「このサイトのオプション」-「常に許可」をクリックします

f:id:takayuki-yoshida:20200922001224p:plain

エクスプローラーでSharePointOnlineのドキュメントライブラリが表示されます

 

ドキュメントライブラリをネットワークドライブに設定する

 エクスプローラーで開いたドキュメントライブラリのアドレスを全選択し、右クリック「コピー」でアドレスをコピーします

f:id:takayuki-yoshida:20200922001504p:plain


エクスプローラーの左に表示されているフォルダのツリーから「PC」を右クリックし、「ネットワークドライブの割り当て」をクリックします

f:id:takayuki-yoshida:20200922001523p:plain

割り当てる「ドライブ」名を選択して、フォルダーに前項でコピーしたアドレスを貼り付けします。次に「完了」をクリックします

f:id:takayuki-yoshida:20200922001558p:plain

ネットワークドライブに割り当てが完了し、ネットワークドライブで表示されるようになります

 

WebClientサービスを自動起動に設定する

「スタート」メニューを開き、「Windows管理ツール」-「サービス」をクリックします

f:id:takayuki-yoshida:20200922001650p:plain

サービスの一覧から「WebClient」を右クリックし「プロパティ」をクリックします

f:id:takayuki-yoshida:20200922001727p:plain

スタートアップの種類を「自動」を選択して「OK」をクリックします

※サービスの状態が「停止」になっている場合は、「開始」をクリックして、「実行中」になることを確認してください

f:id:takayuki-yoshida:20200922001745p:plain

以上で設定完了です

 

参考

docs.microsoft.com