Я работаю над скриптом, который проверяет папку и возвращает последнюю временную метку даты последнего файла. Затем он сравнивает текущее системное время и найдет разницу между ними, и если время больше 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 issue, не забывайте, что '.Minutes.' может быть 0, где' .TotalMinutes' покажет вам что-то, что было днем. – gravity
Я также не думаю, что вам нужно 'Foreach {$ _. LastWriteTime}' вообще. В моем базовом тестировании на моем ящике - это не было необходимым для продолжения в потоке ... не уверен, что вы пытались сделать там. – gravity