【发布时间】:2019-01-30 22:43:11
【问题描述】:
我无法使用Send-MailMessage cmdlet 发送多个附件,如果这些文件位于不同的目录中。我可以发送一个文件,我可以发送另一个文件,我可以发送两个文件如果它们在同一个目录中,但如果它们在不同目录中则不能。
文件/文件夹如下所示:
C:\Scripts\Folder\test.txt
C:\Scripts\Folder\Logs\log.txt
我通过创建这样的数组将这些文件指定为附件:
$attachments = @("C:\Scripts\Folder\test.txt","C:\Scripts\Folder\Logs\log.txt")
我正在运行 PowerShell 5.1,并已在 Windows Server 2012 R2 和 Windows 10 v1803 上对此进行了测试。
Windows Server 2012 R2 上的 $PSVersionTable:
Name Value
---- -----
PSVersion 5.1.14409.1018
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14409.1018
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Windows 10 1803 上的 $PSVersionTable:
Name Value
---- -----
PSVersion 5.1.17134.407
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.407
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
这是发送消息的完整脚本:
# Credentials
$username = "user@domain.com"
$password = ConvertTo-SecureString -String "password" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username,$password
# Attachments
$attachments = @("C:\Scripts\Folder\test.txt","C:\Scripts\Folder\Logs\log.txt")
Send-MailMessage -To "Recipient <recipient@domain.com>" -Subject "Subject Line" -Body "Body text" -SmtpServer smtp.domain.com -Attachments $attachments -Credential $cred -From "Sender <user@domain.com>" -Port 587 -Priority High -UseSsl
没有产生错误消息,并且该消息与第一个附件一起发送和传递。如果我从数组中删除第一个文件,则发送第二个文件(较低目录中的文件)。如果我将第二个文件移动到与第一个文件相同的目录,则两者都可以正常发送。我一直在寻找关于为什么会发生这种情况的答案,但我找不到关于为附件提供多个目录的问题的答案。 help for Send-MailMessage 中也没有针对多个目录指定任何内容。
我也尝试过以不同方式指定附件文件。我试过了:
- 将每个文件的 FullName 添加到其自己的变量中,并使
$attachments成为这些变量的数组 - 使用
Get-ChildItem -Recurse | Where-Object {($_.Name -eq "test.txt") -or ($_.Name -eq "log.txt")} | Send-MailMessage
除非两个文件在同一个目录中,否则这些都不起作用。谁能帮助解释为什么会这样或告诉我我哪里出错了?我知道有很多解决方法,但我想解决这个特定问题。
【问题讨论】:
标签: powershell