繁体   English   中英

在PowerShell中将新创建的对象从一个列表添加到另一个列表

[英]Adding newly created objects from one list to another in PowerShell

我有一个脚本,当文件超出最大设置大小时,该脚本会发送电子邮件。

我所有的文件都来自一个XML文件,该文件总结了路径和最大大小。

我检查每个大小(并查看是否超过最大大小)的foreach看起来像:

foreach ($item in $list)
{
    if($item.Size -gt $item.TriggerSize -And (Test-Path $item.Path))
    {        
        $body = 

        "The file " + $item.Name + " is reaching his max size! 
        <br /><br />  Current size: "+$item.Size.ToString(".00") + " " + $byteSize.Substring(1)  + 
        "<br /> Maximum size: " + $item.MaxSize + " " + $byteSize.Substring(1) 

        Send-MailMessage -port 587 -From $from -BodyAsHtml -Encoding $enc -To $to -Subject $subject -Body $body -UseSsl -Credential $credentials

    }
}

该代码运行正常,我收到一封电子邮件,看起来像:

文件editix2017.exe达到了他的最大大小!

当前大小:84.93 Mb

最大大小:100 Mb

但是,我遇到的问题是,当我使用多个文件时,它会为每个超出其最大限制的文件发送一封电子邮件。

这意味着,如果我有2个超出最大大小的文件,它将发送2封单独的电子邮件。

如何将每个超出的文件封装到列表中,然后仅发送一封电子邮件?

每次使用$body +=将文本添加到$body字符串中,然后将Send-MailMessage移到循环外,以便仅在评估每个文件后才发送电子邮件:

foreach ($item in $list)
{
    if($item.Size -gt $item.TriggerSize -And (Test-Path $item.Path))
    {        
    $body += "The file $($item.Name) is reaching his max size!<br />
    Current size: $($item.Size.ToString(".00")) $($byteSize.Substring(1))<br />
    Maximum size: $($item.MaxSize) $($byteSize.Substring(1))<br /><br />"
    }
}
Send-MailMessage -port 587 -From $from -BodyAsHtml -Encoding $enc -To $to -Subject $subject -Body $body -UseSsl -Credential $credentials

编辑:我更新了$body构造为使用子表达式$()因为这些子表达式仅返回对象的属性,从而使字符串构造更加简单。

这可能会做到(未测试)。 它将$ body定义为一个空字符串,然后我们在循环中增加有关文件的消息,然后我将send-mailmessage移到了循环之外,以便我们在末尾进行操作,但前提是$ body具有内容:

$body = ""

foreach ($item in $list)
{
    if($item.Size -gt $item.TriggerSize -And (Test-Path $item.Path))
    {        
        $body += 

        "The file " + $item.Name + " is reaching his max size! 
        <br /><br />  Current size: "+$item.Size.ToString(".00") + " " + $byteSize.Substring(1)  + 
        "<br /> Maximum size: " + $item.MaxSize + " " + $byteSize.Substring(1)  + "<br /><br />"

    }
}
If ($body) { Send-MailMessage -port 587 -From $from -BodyAsHtml -Encoding $enc -To $to -Subject $subject -Body $body -UseSsl -Credential $credentials }

暂无
暂无

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

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