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

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

【Windows】イベントログをエクスポートする(evtx形式)

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

 

はじめに

 Windows10のイベントログを、evtxファイル形式でエクスポートする方法です。

 

 

イベントビューアーを開く

「スタート」メニューをクリックして、「Windows管理ツール」ー「イベントビューアー」を開きます

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


アプリケーションのイベントログをエクスポートする

イベントビューアー画面で、「Windowsログ」をダブルクリックして展開し、「Application」を右クリック、「すべてのイベントを名前を付けて保存」をクリックします

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

 保存する場所を選択して、ファイル名に任意のファイル名(例:アプリケーションログ)を入力して、「保存」をクリックします。

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

 

「これらの言語についての表示情報」を選択して、「日本語」にチェックを入れ、「OK」をクリックします

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

以上でエクスポート完了です

 

 

システムのイベントログをエクスポートする

イベントビューアー画面で「Windowsログ」をダブルクリックして展開し、「システム」を右クリック、「すべてのイベントを名前を付けて保存」をクリックします

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

 保存する場所を選択して、ファイル名に任意のファイル名(例:システムログ)を入力して、「保存」をクリックします。

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

 

「これらの言語についての表示情報」を選択して、「日本語」にチェックを入れ、「OK」をクリックします

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

以上でエクスポート完了です

 

【WSUS】[PowerShell] WSUSで、更新プログラム一覧をCSVで出力して、更新プログラムを指定して拒否する

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

はじめに

WSUS(Windows Server Update Services)で、更新プログラム一覧をCSVで出力するPowerShellコマンドの紹介と、出力された結果から更新プログラムを個別に指定してドで拒否するPowerShellコマンドを紹介します。

WSUSは、必要のない更新プログラムを拒否にすることで、CPU負荷の低減、ディスク使用量の低減になり、WSUSサーバーを運用するうえで必ず定期的に行う必要があります。

また、自動や条件指定で一括で拒否にするPowerShellコマンドは情報があるのですが、一旦CSVに出力してExcelなどで更新プログラムを確認してから、個別に指定して拒否する方法があまりなかったので、この方法を紹介します。

 

WSUSの更新プログラム一覧をCSVで出力する

 出力先のパスは適宜変更ください。

PS> #WSUS更新プログラムCSVリスト出力
PS> Import-Module UpdateServices
PS> $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
PS> $allUpdates = $wsus.GetUpdates()
PS> $allUpdates | Select-Object Title, @{Name='KnowledgebaseArticles';Expression={$_.KnowledgebaseArticles}},UpdateClassificationTitle, LegacyName,CreationDate, IsApproved,IsDeclined | Export-Csv -Encoding UTF8 -NoTypeInformation -path c:\temp\wsuslist.csv 

 

個別に更新プログラムを指定して拒否済みにする

「LegacyName」を指定して拒否にするコマンド

※「LegacyName」が一意であることを確認してから実行してください。

※CSV出力を行ったコンソールから実行する前提です。

パッチを指定で拒否する(このコマンドのみを繰り返し実行可能)
PS> ($allUpdates | where-object{$_.LegacyName -eq 'q309521_xp_4973'}).Decline()

 

「Title」を指定して拒否にするコマンド

※「Title」が一意であることを確認してから実行してください。

PS> ($allUpdates | where-object{$_.Title -eq 'Windows XP Update Package, October 25, 2001'}).Decline()

 

参考

social.msdn.microsoft.com

また、SCCMのソフトウェア更新ポイントで使用するWSUSも同様に、拒否にする運用が必要になります。

social.msdn.microsoft.com

<リンク集>Adobe Flash Player サポート終了でシステム管理者が見るサイトまとめ

 

はじめに

Adobe Flash Playerが2020年12月31日でサポート終了となり、2021年1月12日以降Flashコンテンツの実行がブロックされるとアナウンスされています。システム管理者でアンインストール対応やどうしても継続利用するための対応など、参考になるリンクをまとめています。

www.adobe.com

 

リンク集

・@IT

Flash Playerが2020年末で終了!? どうすれば安全に再生できる?:Tech TIPS - @IT

 

・Adobe

Adobe Flash Player法人向けサポート終了

Adobe Flash Player Administration Guide for Flash Player | Adobe Developer Connection

 - Adobe Flash Player Administration Guide for Flash Player 32 (PDF, 980 KB)

※こちらのPDFのガイドに、EOL後にFlash Playerを表示させる方法が記載されています

Uninstall Flash Player for Windows

Flash Player Help

※使用しているブラウザでFlashPlayerが動作しているか確認できるサイト

 

・Microsoft

Adobe Flash Player のサポート終了に関する最新情報 - Windows Blog for Japan

Adobe Flash Player の削除の更新: 2020 年10月27日

Microsoft Update Catalog(Adobe FlashPlayerの削除)

 

・VMware

[TAM Blog] Adobe Flash サポート終了に伴う VMware 製品への影響と対策のポイント - VMware Japan Blog

 

・NTTデータ

Adobe Flash Player のサポート終了後も継続して利用するための手順例 – intra-mart Developer Site

 

 

【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