2017-09-15 39 views
0

我創建了我的第一個(對於我來說很複雜)的腳本,我想知道是否有更簡單的方法或者格式是否正確。Powershell格式

我的代碼搜索包含多個文件的文件夾,這些文件在每個文件的末尾都有一個日期時間,例如:noapp.logdatetime。我想找到最新的文件搜索字符串,如果它發現它發送電子郵件。這是我迄今爲止似乎有效的工作。

Get-ChildItem "c:\temp" -Filter "noapp.log*" | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1 | Select-String "Pool maximum size exceeded" | Select-Object -First 1 
foreach { Send-MailMessage -Subject "Pool Max Exceeded ctdaysis42" -From [email protected] -To [email protected] -Body "Pool Max Exceeded ctdaysis42" -SmtpServer mail.xxx.com} 

感謝您的意見

+0

作爲一種最佳做法,我建議在cmdlet上的腳本中定義每個參數。例如,'Get-ChildItem -Path'C:\ Temp''。如果你沒有使用字符串擴展,你應該使用字符串文字(單引號或雙引號) – TheIncorrigible1

+0

我想你已經錯過了一個'|'在你的ForEach-Object命令之前,但我猜測你的實際腳本並不缺少。 –

回答

0

你想獲得最新的修改noapp.log文件,然後檢查是否該日誌文件包含「池最大規模突破」,如果是的話那麼發送郵件。

$Log = Get-ChildItem "c:\temp" -Filter "noapp.log*" | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1 

If (Get-Content $Log.fullname | Select-String "Pool maximum size exceeded") {  
    Send-MailMessage -Subject "Pool Max Exceeded ctdaysis42" -From [email protected] -To [email protected] -Body "Pool Max Exceeded ctdaysis42" -SmtpServer mail.xxx.com 
} 
+0

是的,那正是我想要做的。非常感謝! – jcarreiro