【发布时间】:2016-12-21 21:01:13
【问题描述】:
我正在编写一个脚本,该脚本将检查文件夹并返回最后一个文件日期修改时间戳。然后它将比较当前系统时间并找出两者之间的差异,如果时间大于 20 分钟,则会发送电子邮件通知。
调试/运行时出现以下错误:
New-TimeSpan:找不到接受参数“$null”的位置参数。 在 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 = "abc@xyz.net"
$strToAddress = "abc@xyz.net"
$strMessageSubject = "Files not uploaded in the last 20 minutes"
$strMessageBody = $strbody
$strSendingServer = "smtp.gmail.com"
$SMTPPort = "587"
$emailSmtpUser = "abc@xyz.net"
$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)
}
有什么建议吗?
【问题讨论】:
-
虽然这不是您的错误问题,但请不要忘记
.Minutes.可能为 0,其中.TotalMinutes会显示几天前的内容。 -
我也不认为你需要
Foreach {$_.LastWriteTime}。在我对我的盒子的基本测试中 - 以任何方式继续在流中都没有必要......不确定你在那里尝试做什么。