Powershell 对于邮件中的每个文件,您可以修复吗?

Powershell 对于邮件中的每个文件,您可以修复吗?,powershell,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 "admini

我正在寻找如何附加一个文件夹中的随机文件。 我试过这个

$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个文件附加到邮件消息。 您知道如何解决这个问题吗?为什么for-each只执行一次


谢谢

您的搜索不是递归的

尝试:

根据您使用的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 }

希望这对您的变量
$signature
在foreach中的每次迭代中都会被替换,而不是附加到(
+=
)中有所帮助。
为了获得更好的概述,我建议使用


谢谢你的帮助。如果我理解-recurse=此文件夹中的平均文件夹。希望您有其他想法,我也尝试了$signature+=但不适用于此。我的PSVersion 5.0.10586.117i将阅读你的链接,但如果你能解释一下你的代码,因为我不知道这种方式,我知道我的代码中的所有变量,所以我最好理解一下,我相信邮件将通过这个@param发送,但对我来说太奇怪了,因为我们通常使用$。也许你使用@becausepowershell会一直这样吗?你的代码是如何工作的,因为对于我的knowdelege来说,如果我看到这个代码,我相信在全名之后脚本会附加一个文件,然后继续?非常感谢,非常好。附加了一个链接,说明所有参数都被填充到哈希表中并传递给cmdlet。
附件
参数需要文件路径。将gci括在括号中并用
.FullName
作为后缀相当于
Get ChildItem X:\path | Select Object-ExpandProperty FullName
,但短得多您的代码非常好,但是当我尝试从另一个路径添加文件时,我出现了一个错误,因为我不知道如何修复它。尝试后,我发现了如何做到这一点$附件+=(获取ChildItem“C:\Users\adm\script\picture\”)。全名+工作正常,希望这是一个好代码?当然,如果它适合您的话<代码>+=附加到字符串/集合响应。添加到数字。请不要将标签编辑到问题的主题中。接受答案就足以将问题标记为已解决。
Get-ChildItem “C:\Users\adm\script\signature\” -Recurse | where { ! $_.PSIsContainer }
$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