我有一个Powershell脚本,可以下载Outlook邮件附件。 但我收到以下错误:
方法调用失败,因为[System.String]不包含名为'saveasfile'的方法。
我使用了以下脚本
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNameSpace("MAPI")
$inbox = $mapi.GetDefaultFolder(6)
$saveFilePath = "C:\temp\"
$subfolder = $inbox.Folders | Where-Object {$_.Name -eq “REPORTS”}
$mail = $subfolder.Items | Select-Object -Property Subject,SentOn,@{name="Attachments";expression={$_.Attachments|%{$_.DisplayName}}} | Where-Object{$_.attachments -match ".html" -and ($_.SentOn -gt '29-Oct-19 12:00:00 AM')}
foreach ($email in $mail)
{
if ($email.attachments.count -ge 1)
{
foreach ($attachment in $email.attachments)
{
$filename = $attachment.filename
$attachment.saveasfile((join-path $savefilepath $filename))
}
}
}
请让我知道如何解决此错误。
答案 0 :(得分:0)
Outlook的Attachments
属性的枚举器返回一个String
键,而不是一个实际的附件对象(这就是为什么使用无类型或弱类型的语言(如PowerShell)与COM配合使用的原因。
PowerShell 想要用作功能性流水线语言(这是要调试的PITA)-有时使用老式的命令性代码会更容易:
For( $i = 0; $i -le $email.Attachments.Count; $i++ ) {
$attachment = $email.Attachments.Item( $i )
$attachment.SaveAsFile( ( Join-Path $savefilepath $filename ) )
}
顺便说一句,您不需要if ($email.attachments.count -ge 1)
语句,因为For( $i = 0; $i...
循环也会检查.Attachments.Count
属性。