在使用FreeFileSync + 工作排程器後,用戶每日會自動備份指定資料夾到File Server,並產生Log檔。
為確保排程有跑、故寫了段PowerShell來抓取日誌日期,每日早上發送、觀察昨日有沒備份。
FreeFileSync有跑就會有日誌,由日誌檔名也可看到有沒錯誤。

#切換資料夾
Set-Location D:\backup

#取得資料夾下檔案、目錄,排除指定文件,再篩選出Name,丟到user.txt裡
Get-ChildItem -Exclude 日誌,歷史版本,log.ps1 | Select-Object Name > D:\blat\user.txt

#設定變數User為user.txt內容
$User=(Get-Content D:\blat\user.txt)

#用Trim()去掉首尾空格
$UserTrim=$User.Trim()

#設定變數長度-3(減掉多出的 空白行、Name、----),可以不用減、無傷大雅
$length = $UserTrim.Length-3
#echo $length

#清除先前temp.txt的內容
Clear-Content D:\blat\temp.txt

#for迴圈操作 -le小於或等於,參考:http://carefree-live.blogspot.com/2012/07/powershell.html
for($i=3;$i -le $length;$i++){
    #$path = join-path -path D:\backup\ -childpath $A[$i]
    #用join-path 連接多級子目錄,再連接日誌子目錄
    $path = join-path -path $UserTrim[$i] -childpath 日誌
    #先echo用戶名,丟到temp.txt
    echo $UserTrim[$i] >> D:\blat\temp.txt
    #先排序日誌檔,再抓取最新寫入的一筆日誌檔,再用findstr /c:字串找到-a 丟到temp.txt
    Get-ChildItem $path | sort LastWriteTime | select -last 1 | findstr /c:-a >> D:\blat\temp.txt
#這裡迴圈實際輸出如下,舉一段例子
#Gery Huang (用戶名)
#-a----        2018/9/17  ?? 09:57        1659747 Backup 2018-09-17 091006.597 [??].log (日誌)
}

#強制編碼為UTF8(這段有問題,可能輸出到temp.txt的內容已經是?? 所以再轉換為UTF8也沒用)
Get-Content D:\blat\temp.txt | ? {$_.trim() -ne "" } | set-content D:\blat\log.txt -Force -Encoding UTF8

#設定Server位址
$svr="abc.com"

#設定寄件者
$sender="[email protected]"

#設定接收者
$receiver="[email protected]"

#本地主機名稱
$hostname=hostname

#發信指令
D:\blat\blat.exe D:\blat\log.txt -server $svr -f $sender -to $receiver -u notice -pw 123456 -s "$hostname Backup Log"

Blat 官網:http://www.blat.net/
比較理想應該比對昨天日期,沒跑備份才列出來,有閒再改。
後記:1/24,編碼問題未解決

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *