Mengunduh lampiran .xlsx dari Outlook Tanggal Tertentu menggunakan Powershell

Saya memiliki skrip di bawah ini. $Tests ini menampilkan daftar lampiran .xlsx pada tanggal tertentu tetapi tidak dapat diunduh dan menimbulkan kesalahan. Silakan temukan skrip di bawah ini.

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:\temp\Test\"
$subfolder = $inbox.Folders | Where-Object {$_.Name -eq “Test”}
$mail=$subfolder.Items |Select-Object -Property "ReceivedTime",@{name="Attachments";expression={$_.Attachments|%{$_.DisplayName}}} | Where-Object{$_.attachments -match ".xlsx" -and ($_.receivedtime -match "9/15/2020")} | Select-Object "attachments"
$Test = $mail.attachments
foreach ($out in $test) {$_.attachments|foreach {
Write-Host $_.filename
$Filename = $_.filename
If ($out.Contains("xlsx")) {
$_.saveasfile((Join-Path $FilePath "$out")) }}}

Saya dapat memfilter Lampiran .xlsx dengan Tanggal Tertentu. Tapi setelah ini, saya tidak tahu cara menyimpan/mengunduhnya.


person Sai Yeshwanth    schedule 15.09.2020    source sumber
comment
Silakan tempel kode Anda di pertanyaan Anda daripada menambahkannya seperti tangkapan layar. Jika ada yang ingin menggunakan kode untuk mengeditnya harus berupa teks dan bukan sebagai gambar. Saat dimasukkan ke dalam pertanyaan Anda, tandai kodenya dan tekan CTRL+K untuk memformatnya sebagai kode.   -  person Adis1102    schedule 15.09.2020
comment
di loop for Anda, Anda merujuk ke $email tetapi di baris sebelumnya Anda menggunakan $mail? mungkin itu masalahnya? dan tolong - seperti yang dikatakan @ Adis1102 - tempelkan kode Anda di pertanyaan.   -  person Guenther Schmitz    schedule 15.09.2020
comment
Hai, Kode telah diperbarui. Silakan lihat ke dalamnya   -  person Sai Yeshwanth    schedule 15.09.2020
comment
jadi apa output dari skrip Anda saat ini?   -  person Guenther Schmitz    schedule 15.09.2020
comment
Anda tidak dapat memanggil metode pada ekspresi bernilai nol. Pada baris:17 char:5 + $_.saveasfile((Join-Path $FilePath $out)) }}} + ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + Info Kategori : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull   -  person Sai Yeshwanth    schedule 15.09.2020


Jawaban (1)


Bekerja dengan objek com bisa membuat frustasi di PowerShell. Saya menyarankan Anda untuk sangat memahami Get-Member. Anda benar-benar harus menginterogasi setiap objek. Saya telah menyederhanakan skrip Anda dan mengujinya secara menyeluruh. Ini akan mengunduh setiap lampiran yang cocok (nama) dari setiap email yang cocok (tanggal diterima)

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:\temp\Test\"
$subfolder.Items | Where-Object {$_.receivedtime -match "9/20/2020" -and $($_.attachments).filename -match '.xlsx'} | foreach {
    $filename = $($_.attachments | where filename -match '.xlsx').filename
    foreach($file in $filename)
    {
        Write-Host Downloading $file to $filepath -ForegroundColor green
        $outpath = join-path $filepath $file
        $($_.attachments).saveasfile($outpath)
    }
}

Anda dapat menggunakan ini untuk pendekatan yang lebih in-line.

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:\temp\Test\"
$subfolder.Items | Where-Object {$_.receivedtime -match "9/20/2020" -and $($_.attachments).filename -match '.xlsx'} | foreach {
    foreach($attachment in $($_.attachments | where filename -match '.xlsx'))
    {
        Write-Host Downloading $attachment.filename to $filepath -ForegroundColor green
        $attachment.SaveAsFile((join-path $FilePath $attachment.filename))
        
    }
}
person Doug Maurer    schedule 20.09.2020