繁体   English   中英

用于发送包含文件夹中文件列表的电子邮件的 Powershell 脚本 - 格式问题

[英]Powershell script to send email with list of files in a folder - formatting issue

谢谢你花时间看我的问题。

我有一个 Powershell 脚本,用于检查文件夹中的文件,如果任何文件超过 3 小时,则发送电子邮件。

唯一的问题是,在尝试输出到电子邮件正文时,我似乎无法正确设置格式。

这是脚本:

$emailSmtpServer = "emailserver.com"
$emailSmtpUser = "email@domain.com"
$emailSmtpPass = "password"
$emailSmtpServerPort = "587"
$emailFrom = "email@domain.com"
$emailTo = "email@domain.com"

$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );

$limit = (Get-Date).AddHours(-3)
$path = "C:\folder"

$files = (Get-ChildItem -Path $path -Recurse | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) 
#$files | ft
if ($files -ne $NULL)
            { 
        $emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo )
        $emailMessage.Subject = "list of files"
        $emailMessage.IsBodyHtml = $true
        $emailMessage.Body = "Here is a list of the files: <p> $files"
        $SMTPClient.Send( $emailMessage )
            } 

被注释掉的行 (#$files | ft) 会将输出格式化为如下所示

PS C:\test> .\filecheck.ps1

    Directory: C:\test

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         4/20/2015   7:43 PM       1430 file1.txt
-a---         4/20/2015   7:44 PM       1430 file2.ps1
-a---         4/19/2015  11:29 PM       3551 file3.txt
-a---         4/19/2015  11:28 PM       2078 file4.txt

我不一定需要列表中的“模式”或“长度”,只要列出创建日期和文件名就可以了。 该表将输出到控制台,但电子邮件的正文如下所示:

file1.txt file2.ps1 file3.txt file4.txt 

这使得处理文件列表变得困难,尤其是在文件很多的情况下。

我还不太擅长 powershell,但我已经尝试了所有我能找到的东西,我知道它必须很简单。

我很感激任何帮助。

这是一种可能的方法:将所有文件放在一个数组中

$files = @(Get-ChildItem -Path $path -Recurse | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) 

然后创建您的电子邮件正文,循环浏览文件数组,并为每个文件写一行,其中包含您需要的详细信息,例如

$mailBody = "";
foreach ($file in $files) { 
    $mailBody += "file name: $($file.Name); last write time: $($file.LastWriteTime)`r`n";
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM