<# .SYNOPSIS イベントログをエクスポートします。 .DESCRIPTION イベントログをエクスポートします。 .NOTES {$SCRIPT_HOME}\etc\Export-Eventlog.confにCSV形式で各種条件を設定してください。 書式 Name エクスポートするイベントログを指定します。 ExportDir エクスポートするフォルダー名を指定します。 ExportType 出力形式を指定します。現在は、次の形式に対応しています。 CSV : CSV形式です。 EVTX : イベントビューワ形式です。 .EXAMPLE C:\PS> .\Exec-Logrotate.ps1 .LINK http://www. #> <# **************************************************************************** * 引数設定 *************************************************************************** #> [CmdLetBinding()] param ( ) <# **************************************************************************** * 環境設定 *************************************************************************** #> # ***** 環境フォルダ設定 $HSC_HOME = Convert-Path -Path (Join-Path -Path (Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent) -ChildPath ..\) # スクリプトの一つ上のフォルダーをHOMEに設定 $HSC_BIN = Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent # スクリプトの存在するフォルダーをBINに設定 $HSC_ETC = Join-Path -Path $HSC_HOME -ChildPath \etc -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LIB = Join-Path -Path $HSC_HOME -ChildPath \lib -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_TMP = Join-Path -Path $HSC_HOME -ChildPath \tmp -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LOG = Join-Path -Path $HSC_HOME -ChildPath \log -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_VAR = Join-Path -Path $HSC_HOME -ChildPath \var -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す # ***** 各種ファイル設定 $HSC_EPPlus = Join-Path -Path $HSC_LIB -ChildPath \EPPlus.dll $HSC_ETCFILE = Join-Path -Path $HSC_ETC -ChildPath \Backup-ESXConfiguration.conf -Resolve $HSC_LogPrefix = $Script:myInvocation.MyCommand.Name # 共通関数呼出 .$HSC_LIB\HSC-SharedFunction.ps1 # Transcriptの発行 $HSC_DetailLogfile = Join-Path -Path $HSC_LOG -ChildPath ($HSC_LogPrefix + '-Detail_' + (Get-Date -Format 'yyyyMMdd') + '.log') Start-transcript -Path $HSC_DetailLogfile -Append # 日付を取得 $HSC_GETDATE = Get-Date -Format 'yyyyMMdd' # 設定ファイル読み込み $HSC_ETC_Datas = Get-Content -Path $HSC_ETCFILE -Encoding Default | ConvertFrom-Csv # 処理開始メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* ESXサーバーの構成情報のバックアップを開始します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') <# **************************************************************************** * メイン *************************************************************************** #> # ***** PowerCLIモジュールロード Add-PSSnapin VMware.VimAutomation.Core foreach ($HSC_ETC_Data in $HSC_ETC_Datas) { # エクスポート対象情報出力 HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('対象ESXサーバー :' + $HSC_ETC_Data.ESXHost) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('バックアップフォルダー :' + $HSC_ETC_Data.BackupDir) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('接続ユーザー名 :' + $HSC_ETC_Data.UserID) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('認証ファイル :' + $HSC_ETC_Data.CredentialFile) # パスワード取得 if (Test-Path -Path (Join-Path -Path $HSC_ETC -ChildPath $HSC_ETC_Data.CredentialFile)) { # 認証ファイルあり $HSC_SecurePassword = Get-Content -Path (Join-Path -Path $HSC_ETC -ChildPath $HSC_ETC_Data.CredentialFile) | ConvertTo-SecureString $HSC_Credential = New-Object System.Management.Automation.PSCredential $HSC_ETC_Data.UserID, $HSC_SecurePassword $HSC_PlainPassword = $HSC_Credential.GetNetworkCredential() } else { # 認証ファイルなし HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('認証ファイル[' + (Join-Path -Path $HSC_ETC -ChildPath $HSC_ETC_Data.CredentialFile) + ']が見つかりません。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('次のコマンドを発行して、認証ファイルを作成する必要があります。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('`$Credfile = Get-Credential') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('`$Credfile.Password | ConvertFrom-SecureString | Set-Content `"認証ファイル保存フォルダ\認証ファイル名.cred`"') exit } # バックアップフォルダーを作成 if (-not(Test-Path -Path $HSC_ETC_Data.BackupDir)) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('バックアップフォルダー' + $HSC_ETC_Data.BackupDir + 'を作成します。') $HSC_MKDIR_Result = New-Item -Path $HSC_ETC_Data.BackupDir -ItemType Directory HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_MKDIR_Result | Out-String) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('バックアップフォルダー' + $HSC_ETC_Data.BackupDir + 'を作成しました。') } <# $ESX_Connection = Connect-VIServer -Server $KW_VMHost -User "root" -Password $KW_PlainPassword.Password #> #Get-VMHostFirmware -VMHost ESXi_host_IP_address -BackupConfiguration -DestinationPath output_directory # イベントログのアーカイブ switch ($HSC_ETC_Data.ExportType) { # EVTX形式の処理 "EVTX" { if (Test-Path -Path $HSC_ArchiveFile) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('出力ファイル ' + $HSC_ArchiveFile + ' が存在します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ArchiveFile + ' を削除します。') Remove-Item -Path $HSC_ArchiveFile -Force HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ArchiveFile + ' を削除しました。') } HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートを開始します。') # WEVTUTILはUTCで時間を扱うためJSTからの時間差を考慮すること $HSC_EVTX_QUERY = "*[System[TimeCreated[@SystemTime >= '" + $HSC_EVTX_FROMDATE + "T15:00:00.000Z' and @SystemTime <= '" + $HSC_EVTX_TODATE + "T14:59:59.999Z']]]" WEVTUTIL export-log $HSC_ETC_Data.Name $HSC_ArchiveFile /q:"$HSC_EVTX_QUERY" HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートが終了しました。') break } # CSV形式の処理 "CSV" { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートを開始します。') Get-EventLog -LogName $HSC_ETC_Data.Name -After "$HSC_CSV_GETDATE 00:00:00" -Before "$HSC_CSV_GETDATE 23:59:59" ` | Select-Object -Property TimeGenerated, EntryType, EventID, Category, CategoryNumber, Source, Message, MachineName, Username, Site, Container ` | Export-Csv -Path $HSC_ArchiveFile -Encoding Default -NoTypeInformation HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ETC_Data.Name + ' のエクスポートが終了しました。') break } # 未対応の指定 default { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('指定された形式 ' + $HSC_ETC_Data.ExportType + ' には対応していません。') } } } <# Disconnect-VIServer -Server $ESX_Connection -Confirm:$FALSE #> # 処理終了メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* イベントログのエクスポートを終了します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') # Transcriptの停止 Stop-Transcript