我不能使用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中,也没有任何关于多个目录的内容。
我也尝试过以其他方式指定附件文件。我尝试过:
$attachments
成为这些变量的数组Get-ChildItem -Recurse | Where-Object {($_.Name -eq "test.txt") -or ($_.Name -eq "log.txt")} | Send-MailMessage
除非两个文件都位于同一目录中,否则这些操作均无效。谁能帮忙解释为什么会这样,或者告诉我我哪里出问题了?我知道有很多解决方法,但我想解决这个特定问题。
答案 0 :(得分:0)
我刚刚使用您的代码进行了测试,并在Windows 10计算机上重新创建了相同的文件夹/文件结构,一切正常。 我收到了电子邮件,并且两个附件都存在。
您的$PSVersionTable
说您的PowerShell PSVersion是什么?
我的是这样的:
Name Value
---- -----
PSVersion 5.1.17763.134
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.134
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
这正在运行Windows 10 build 1809 为了进行测试,我使用了通过smtp.office365.com发送的Office 365帐户。