我正在研究一個腳本,它將檢查一個文件夾並返回上次文件日期修改時間戳。然後,它會比較當前系統時間並找出兩者之間的差異,如果時間超過20分鐘,將發送電子郵件通知。Powershell腳本疑難解答
在調試/運行它,我得到以下錯誤:
New-TimeSpan : A positional parameter cannot be found that accepts argument '$null'. At C:\Users\jalden\Desktop\CalderaMonitoring-Part1.ps1:7 char:14 + $dtdiff = New-TimeSpan ($_.LastWriteTime) $(Get-Date) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewTimeSpanCommand
這裏是我的腳本:
$src="c:\test\"
$sendmail=$false
Get-Item -path $src | Foreach {$_.LastWriteTime}
Foreach-Object
{
#write-host $_.fullname
$dtdiff = New-TimeSpan ($_.LastWriteTime) $(Get-Date)
if ($dtdiff.minutes -gt 20)
{
$strbody=$strbody +$_.fullname+ " - Created Time: " +$_.LastWriteTime +"`r`n"
$sendmail=$true
}
}
#$strbody
if($sendmail -eq $true)
{
# Email components
$strFromAddress = "[email protected]"
$strToAddress = "[email protected]"
$strMessageSubject = "Files not uploaded in the last 20 minutes"
$strMessageBody = $strbody
$strSendingServer = "smtp.gmail.com"
$SMTPPort = "587"
$emailSmtpUser = "[email protected]"
$emailSmtpPass = "testasfasdfa"
# Email objects
$objSMTPMessage = New-Object System.Net.Mail.MailMessage $strFromAddress, $strToAddress, $strMessageSubject, $strMessageBody
$objSMTPClient = New-Object System.Net.Mail.SMTPClient($strSendingServer, $SMTPPort)
$objSMTPClient.EnableSsl = $true
$objSMTPClient.Credentials = New-Object System.Net.NetworkCredential($emailSmtpUser , $emailSmtpPass);
$objSMTPClient.Send($objSMTPMessage)
}
有什麼建議?
雖然這不是你的e rror問題,不要忘記'.Minutes.'可以是0,其中'.TotalMinutes'會告訴你幾天前的事情。 – gravity
我也不認爲你需要'Foreach {$ _。LastWriteTime}'。在我的盒子裏進行基本的測試 - 在任何情況下都不需要繼續下去......不知道你在那裏試圖做什麼。 – gravity