ログファイルも出力するようにしてみた

昨日の記事のスクリプトにログファイルの出力も付けてみた。
もしメールが何らかの原因で送信できなかった時の為のエビデンスになると思う
(そろそろ監視ツールの導入を考えても良いぐらいになってきたなぁ^^;)

# 対象機器のIPアドレスを格納した配列
[String[]]$addressAp = @('192.168.10.1','192.168.10.2')

#ログファイル名の指定
[string]$LogFileName = "C:ScriptsIPSurvlog" + $(Get-Date).ToString("yyyyMMdd") + ".txt"

# メールあて先等情報
$EmailFrom = "From@example.com"
$EmailTo ="To@example.com"
$Subject = "【テスト】監視エラーメール" 
$Body = "監視エラーメール" 

#実行日付取得
[string]$ResultStr = (Get-Date -format g )

# 実行結果を確認します。
for($i = 0; $i -lt $addressAp.Count; $i++) {

   # Pingを実行します。
   $pingAlive = @(Test-Connection -ComputerName $addressAp[$i] -Quiet)

   # Ping成功の場合
   if ($pingAlive -eq $True) {
       $ResultStr += (',' + $addressAp[$i] + ',成功')

   } else {
   # Ping成功の場合 メール送信
       $ResultStr += (',' + $addressAp[$i] + ',失敗')

        $Body += "`r`n"
        $Body += "エラーアドレス:" + $addressAp[$i] 
        $Body += "`r`n"
        $Body += "連続エラーなどうるさい場合はタスクスケジューラから該当のスクリプトを削除してください。"
        $SMTPServer = "Office365のSMTPサーバーアドレス.outlook.com" 
        $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
        $SMTPClient.EnableSsl = $true 
        $SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“Office365ログインID(メールアドレス)”, "パスワード”); 
        $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)       
   }
}

#実行結果をログファイルに出力
Write-Output $ResultStr | Out-file $LogFileName -append

こんな感じで Log フォルダーを指定してテキスト出力しています。
ログファイルを日付で作成され、例えば10分おきとかに実行した場合は、同じ日付であれば追記されます。

Comments are Disabled