我正在尝试编写一个 powershell 脚本来下载每天通过电子邮件发送的 csv 并将其保存到文件夹中,然后使用 powershell/excel 对其进行处理。我已经编写了 powershell 来打开文件并使用用 VBA 编写的 excel 宏对其进行处理,但我似乎无法获取下面的代码来下载附件。通过电子邮件发送的文件名通常是 exceptions_123456.csv,但文件名有时会更改,但它始终是 .CSV,并且是我每天收到的唯一 csv 文件。所以我想下载今天通过电子邮件发送给我的任何 csv 文件并发送到我的收件箱。
这是我尝试过的代码,它似乎不起作用。我没有收到任何错误,我甚至尝试手动用今天的日期“03/23/2023”替换 $today 变量,但它也无法下载。不确定问题出在哪里。
Add-type -assembly "Microsoft.Office.Interop.Outlook"
$olDefaultFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = New-Object -comobject Outlook.Application
$mapi = $outlook.GetNameSpace(“MAPI”)
$inbox = $mapi.GetDefaultFolder(6)
$FilePath= "c:\exceptions\"
$today = Get-Date -Format "MM/dd/yyyy"
$subfolder.Items | Where-Object {$_.receivedtime -match $today -and $($_.attachments).filename -match '.csv'} | foreach {
foreach($attachment in $($_.attachments | where filename -match '.csv'))
{
Write-Host Downloading $attachment.filename to $filepath -ForegroundColor green
$attachment.SaveAsFile((join-path $FilePath $attachment.filename))
}
}
答案1
您在引用附件时遇到了一些问题,并且$subfolder.Items
无法访问。注意 - 确保 Outlook 应用已关闭。尝试以下操作:
Add-type -assembly "Microsoft.Office.Interop.Outlook"
$olDefaultFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = New-Object -comobject Outlook.Application
$mapi = $outlook.GetNameSpace(“MAPI”)
$inbox = $mapi.getDefaultFolder($olDefaultFolders::olFolderInBox)
$FilePath= "c:\exceptions\"
$today = Get-Date -Format "MM/dd/yyyy"
$inboxitems = $inbox.Items | Where-Object {$_.receivedtime -ge $today -and $($_.attachments).filename -match '.csv'}
foreach ($inboxitem in $inboxitems) {
$name = $inboxitem.Attachments | Select Filename
Write-Host Downloading $name to $filepath -ForegroundColor green
$($inboxitem.Attachments).SaveAsFile((join-path $FilePath $name.FileName))
}