我想知道是否有办法从公用文件夹附件中获取文件扩展名?
背景: 我们使用的是一个软件(AttachmentsProcessor),它从公共文件夹结构中的电子邮件中提取所有附件,并将其保存到文件系统中。该软件将.lnk放入电子邮件中,该电子邮件指向文件系统中的位置。因此,我们可以通过双击打开附件。
最近我们将公共文件夹结构从内部Exchange移动到Office365 / Exchange Online。在此过程中,我们尝试将所有提取的附件放回电子邮件中。在我们完成一些测试后,我们注意到这对某些电子邮件不起作用。我们仍然将.lnk作为附件。
那我在找什么? 我想在powershell中编写一个脚本,它向我显示所有电子邮件列表和相应的文件夹(Identites),它们附有.lnk文件。
在我的搜索中,我发现了一些适用于邮箱但不适用于公共文件夹的内容。
- > Get-Mailbox | Export-Mailbox -AttachmentFilenames“* .PDF”
- > Get-Mailbox | New-MailboxExportRequest -ContentFilter {Attachment -like“* .PDF”}
任何帮助都会非常好。 ; - )
感谢您的关注 彼得
答案 0 :(得分:0)
我无法公开为您编写所有代码。但我有一些东西可以让你开始。此脚本将递归遍历您的公用文件夹并查找包含附件的项目。循环中的最后一段代码当前将文件保存到磁盘,但是你可以用一些逻辑替换它来做你需要它做的事情(即通过附件过滤,提取链接信息等等)。 )。
$TargetDirectory = "C:\temp\PublicFolders"
function process-folders-recursive($folder, $path) {
if($folder.DefaultMessageClass -ne "IPM.Appointment" -and $folder.DefaultMessageClass -ne "IPM.Contact")
{
$path = (Join-Path $path $folder.name)
write-host $folder.class $path
if($folder.Items.Count -gt 0 ){
foreach($item in $folder.Items){
if($item.MessageClass -ne "IPM.Appointment")
{
#Write-Host $item.name
if($item.Attachments.Count -gt 0 ) {
if(!(Test-Path -path $path)){
New-Item -ItemType directory -Path $path
}
foreach($attch in $item.Attachments){
try
{
Write-Host $attch.FileName
$fileName = $attch.FileName
$fileNameAndPath = (Join-Path $path $fileName)
$attch.saveasfile($fileNameAndPath)
}
catch [System.Exception]
{
Write-Host $path $fileName # $_.Exception.ToString()
}
}
}
}
}
}
$folder.Folders | ForEach { process-folders-recursive $_ $path}
}
}
$objOutlook = New-Object -comobject outlook.application
$objNamespace = $objOutlook.GetNamespace(“MAPI”)
#Get Outlook folder with name Public Folders
$publicFolders = $objNamespace.Folders | Where { $_.name.StartsWith("Public Folders") } | Select -f 1
#Go into the "All Public Folders" folder
$AllPublicFolders = $publicFolders.Folders | Where { $_.name -eq "All Public Folders" } | Select -f 1
#Recurse through the Public Folders
process-folders-recursive $AllPublicFolders $TargetDirectory