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


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9