2015年5月30日土曜日

[PowerShell] 最新のWindows Serverバックアップの内容を取得する

wbadminコマンドでWindows Serverバックアップの内容を取得するときは
 (1)wbadmin get versions で利用可能なバックアップのバージョンを取得
 (2)wbadmin get items -version:バージョン識別子 でバックアップ内容を取得
という手順になります。いちいちバージョンを確認するのが面倒なのでPowerShellをしようしたスクリプトで自動化しました。
このコマンドはコマンドプロンプトではなくPowerShellにて実行します。


# Windows Serverバックアップにて有効なバックアップの一覧を取得します
$Wbadminlog = wbadmin get versions

# 取得した一覧の情報を1行ずつ取り出せるよう加工します
$Wbadminlog = $Wbadminlog -split "`n"

# 一覧の情報の行数を取得します
$WbadminlogNoteLineCount = $Wbadminlog.Length

# 変数の初期値を設定
$i = 0
$BackupVersion = ""
$BackupDate = Get-Date "2000/01/01"


# 最も新しい日付のバックアップバージョンを取得
while ($i -lt $WbadminlogNoteLineCount){
    if($Wbadminlog[$i] -like "バージョン識別子: *"){
        if ($BackupDate -lt (Get-Date $Wbadminlog[$i].Substring(10,16))){
            $BackupVersion = $Wbadminlog[$i].Substring(10,16)
            $BackupDate = (Get-Date $Wbadminlog[$i].Substring(10,16))
        }
    }
    $i ++
}

# 最も新しいバックアップの内容を取得します
wbadmin get items -version:$BackupVersion




[PowerShell] Get-WinEventで必要なログのみを取得する

PowerShell の Get-WinEvent コマンドを使ってイベントログの内容を出力します。
日常的にイベントログを監視する場合は監視から除外したいログが出てきますので、それを含まない形で出力します。


# 対象コンピュータを指定する
$ComName = [Net.Dns]::GetHostName()

# 抽出を行うログを指定する
$LogName = "System"

# 抽出を行う期間を指定する
$StartTime = (Get-Date).AddDays(-7)
$EndTime   = Get-Date


# 監視対象から除外するイベントを記載する
$ExceptionFilter=
@(
    @{
        Id = 1014;  
        Level = 3; 
        ProviderName = "Microsoft-Windows-DNS-Client";
    },
    @{
        Id = 22;  
        Level = 3; 
        ProviderName = "Microsoft-Windows-Hyper-V-VmSwitch";
    }
)     


# 指定した種類・期間のイベントログを取得する
$EventsList = Get-WinEvent -ComputerName $ComName -FilterHashTable @{LogName=$LogName ; StartTime=$StartTime ; EndTime = $EndTime }


# 重大、エラー、警告以外のイベントを除外する
$EventsList = $EventsList | Where-Object {$_.Level -le 3}


# 除外リストに記載のログを除外する
$Cnt = 0
while ($Cnt -lt $ExceptionFilter.count) {
    $EventsList = $EventsList | Where-Object {-not ($_.Id -eq $ExceptionFilter[$Cnt].Id -and $_.Level -eq $ExceptionFilter[$Cnt].Level -and $_.ProviderName -eq $ExceptionFilter[$Cnt].ProviderName)}
    $Cnt++
}

# イベントのリストを出力する
$EventsList | Format-List -Property  LogName, MachineName, LevelDisplayName, TimeCreated, ProviderName, Id, UserId, Message 
 
 
参考サイト
Get-WinEvent
連想配列を変換してユーザー定義オブジェクトを簡単に作成する