0

パブリック フォルダの添付ファイルからファイル拡張子を取得する方法があるのだろうか?

バックグラウンド: 私たちは、電子メールからすべての添付ファイルをパブリック フォルダー構造で抽出し、ファイル システムに保存するソフトウェア (AttachmentsProcessor) を使用しています。ソフトウェアは、ファイル システム内の場所を指す .lnk を電子メールに挿入します。したがって、ダブルクリックで添付ファイルを開くことができます。

最近、パブリック フォルダー構造を内部 Exchange から Office365 / Exchange Online に移動しました。このプロセス中に、抽出したすべての添付ファイルを電子メールに戻そうとしました。いくつかのテストを行った後、一部の電子メールではこれが機能しないことに気付きました。添付ファイルとして .lnk がまだ残っています。

それで、私は何を探していますか? .lnk ファイルが添付されているすべての電子メールと対応するフォルダー (Identites) のリストを表示するスクリプトを powershell で作成したいと考えています。

私の検索では、メールボックスでは機能するものを見つけましたが、パブリックフォルダーでは何も見つかりませんでした.

-> メールボックスを取得 | Export-Mailbox -AttachmentFilenames "*.PDF"

-> メールボックスを取得 | New-MailboxExportRequest -ContentFilter {添付ファイルのような "*.PDF"}

どんな助けでもとてもいいでしょう。;-)

ご清聴ありがとうございました

4

1 に答える 1

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
于 2014-09-15T15:40:04.890 に答える