您可以修复邮件中的每个文件吗?

时间:2018-07-07 06:16:24

标签: powershell

我正在寻找如何从文件夹中附加随机文件。 我尝试过

$files =(Get-ChildItem “C:\Users\adm\script\signature\”)
Foreach($file in $files) { 
    $signature =Get-ChildItem "C:\Users\adm\script\signature\$file" 
} 

Send-MailMessage -From "administrator@corp.internal" -to "administrator@corp.internal" -Subject "mot de passe compte windows" -Attachments $signature  -body "$bodysignature" -BodyAshtm -SmtpServer "smtp.test"

,但邮件消息仅附加1个文件。 您知道如何解决该问题,为什么每个解决方案只能执行一次?

谢谢

2 个答案:

答案 0 :(得分:2)

foreach中的每次迭代都会替换您的变量$signature,而不是附加到(+=)上。
为了获得更好的概述,我建议使用splatting

$Attachments = (Get-ChildItem "C:\Users\adm\script\signature\").FullName
$param = @{
    From        = "administrator@corp.internal"
    To          = "administrator@corp.internal"
    Subject     = "mot de passe compte windows" 
    Attachments = $Attachments  
    Body        = "$bodysignature" 
    BodyAshtm   = $True
    SmtpServer  = "smtp.test"
}
Send-MailMessage @param

答案 1 :(得分:0)

您的搜索不是递归的。

尝试:

  Get-ChildItem “C:\Users\adm\script\signature\” -Recurse

根据您使用的PowerShell版本(通过$PSVersionTable转储)Get-ChildItem还有一个附加的-File参数,仅用于返回文件,而不用于文件夹。

因此在PowerShell版本5上,您可以使用

 Get-ChildItem “C:\Users\adm\script\signature\” -Recurse -File

在旧版本中,您必须使用

Get-ChildItem “C:\Users\adm\script\signature\” -Recurse | where { ! $_.PSIsContainer }

希望有帮助