Powershell Get-ChildItem

时间:2016-12-27 13:47:08

标签: powershell

我有一个powershell脚本,我写了检查文件夹的内容,如果有一个文件的LastWriteTime超过20分钟通知我。我遇到的问题是,当我得到结果时,它包括电子邮件正文中的所有文件。我如何写这个只获取电子邮件正文中的最新文件名?

$src = 'c:\test'
$sendmail = $false

Get-ChildItem -path $src | ForEach-Object { 
#write-host $_.fullname
$dtdiff = New-TimeSpan ($_.LastWriteTime) $(Get-Date)

if ($dtdiff.TotalMinutes -gt 20){
$strbody=$strbody +$_.fullname+ " Last File Modified at "  +$_.LastWriteTime +"`r`n"
$sendmail=$true
}       
}


#$strbody
 if($sendmail -eq $true){
# Email components
$strFromAddress = "abc@xyz.net"
$strToAddress = "abc@xyz.net"
$strMessageSubject = "REPORT"
$strMessageBody = $strbody
$strSendingServer = "smtp.com"
$SMTPPort = "587"
$emailSmtpUser = "abc@xyz.net"
$emailSmtpPass = "test123"
# 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)
}

3 个答案:

答案 0 :(得分:1)

仅获取最实际的文件:编辑以删除漏洞

Get-ChildItem -path $src | 
  Sort LastWriteTime | 
    Select -last 1 |
      ForEach-Object { 
        #write-host $_.fullname
        $dtdiff = New-TimeSpan ($_.LastWriteTime) $(Get-Date)
        if ($dtdiff.TotalMinutes -gt 20){
          $strbody=$strbody +$_.fullname+ " Last File Modified at "  +$_.LastWriteTime +"`r`n"
          $sendmail=$true
        }       
}

答案 1 :(得分:0)

您将每个文件名及其关联的时间戳附加到该循环中的$strbody。它正是你所指定的。

如果您希望在过去20分钟内创建的最新文件,请将get-childitem/foreach循环更改为:

$mostrecentfile = get-childitem -path $src | 
    where-object {$_.lastwritetime -gt (get-date).addminutes(-20)} |
    sort-object -property lastwritetime -descending | select-object -first 1
}

if ($mostrecentfile -ne $null) {
$strbody=$_.fullname+ " Last File Modified at "  +$_.LastWriteTime;
$sendmail = $true;
}

答案 2 :(得分:0)

get-childitem "c:\temp" -file | where LastWriteTime -le (Get-Date).AddMinutes(-20) |
    Sort lastwritetime -descending  | 
% {

$strFromAddress = "abc@xyz.net"
$strToAddress = "abc@xyz.net"
$strMessageSubject = "REPORT"
$strMessageBody = "Last file modifed '{0}' at {1}" -f $_.fullname, $_.LastWriteTime
$strSendingServer = "smtp.com"
$SMTPPort = "587"
$emailSmtpUser = "abc@xyz.net"
$emailSmtpPass = "test123"
# 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)
$objSMTPClient.Dispose()
break
}
相关问题