PowerShellでファーム内の全サーバから診断ログを収集するサンプル
完全に自分用メモです。Facebookフレンドの技術者な方が、PowerShellで「ファーム内全サーバーの診断ログから、昨日ログの、うち警告以上を収集する」スクリプトを書かれていたので、ご本人の許可を得てここに掲載しておきます。なお、自身ではまだこれ試せていません(汗
powershell.exe .\MargeEventPerDay 1
# SharePoint用スナップイン追加
.”C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1″;
# 対象となる日の現在からの日数
$BeforeDays = 0;
# 引数から取得
if ($Args.Count -ge 1)
{
# 引数ありの場合は指定された日数だけ前の日が対象
$BeforeDays = -([int]::Parse( $Args[0] ));
}
# 現在時刻
$Now = [System.DateTime]::Now;
# 開始日
$TargetDay = $Now.AddDays($BeforeDays);
# 開始日の0時
$StartTime = $TargetDay.Date;
# 開始日の23時59分59秒999
$EndTime = $StartTime.AddDays(1).AddMilliseconds(-1);
$Prefix = “MargedULS_”;
if ( $EndTime -ge $Now )
{
# 現在が終了時刻前の場合
$Suffix = “(to” + $Now.ToString(“HHmmdd”) + “)”;
}
else
{
# 現在が終了時刻後の場合
$Suffix = “(AllDay)”;
}
# 出力ファイルパス
$OutputFilePath = [environment]::CurrentDirectory + “\” + $Prefix + $StartTime.ToString(“yyyyMMdd”) + $Suffix + “.csv”;
$OutputFilePath2 = [environment]::CurrentDirectory + “\” + $Prefix + $StartTime.ToString(“yyyyMMdd”) + $Suffix + “_Warning.csv”;
if (Test-Path $OutputFilePath2)
{
# ファイルが既存の場合は処理しない
Echo “Already exists : ” $OutputFilePath2
}
else
{
if (Test-Path $OutputFilePath)
{
# ファイルが既存の場合は処理しない
Echo “Already exists : ” $OutputFilePath
}
else
{
# ファイルが既存でない場合は処理する
Merge-SPLogFile -Path $OutputFilePath -StartTime $StartTime -EndTime $EndTime;
Echo “Marged file : ” $OutputFilePath
}
# 低レベルのイベントを省いたファイルを生成
Import-Csv -Path $OutputFilePath -Delimiter “`t” -Header “Timestamp”,”Process”,”TID”,”Area”,”Category”,”EventID”,”Level”,”Message”,”Correlation” `
| Where-Object {($_.Level -eq “Warning”) -or ($_.Level -eq “Error”) -or ($_.Level -eq “Critical”) -or ($_.Level -eq “Unexpected”) -or ($_.Level -eq “Monitorable”)} `
| Export-Csv -Path $OutputFilePath2 -encoding “unicode” -NoTypeInformation -Delimiter “`t”;
Remove-Item $OutputFilePath;
Echo “Filter file : ” $OutputFilePath2
}
なお、「デカいログなんかを扱うときのパイプライン処理がインメモリなのかどうかだけ心配」とのことです。
おまけ:
SharePont2010サーバーの構成モードを調べるPowerShell:
>(Get-ItemProperty “HKLM:\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\14.0\WSS”).ServerRole
login