下面的腳本執行以下操作 - 創建一個新的電子郵件,打開一個Excel文件,從複製的內容,粘貼到新郵件併發送。
我有兩臺PC上的腳本進行了測試。該腳本是使用PowerShell 2.0 64位ISE在PC1上開發的。 PC1- Windows 7 64位SP1,Office 2010 32位和PowerShell 2.0。
PC2- Windows 7 64位SP1,Office 2010 32位和PowerShell 3.0。PowerShell腳本來發送電子郵件崩潰的Outlook 2010
我已經在兩臺機器上使用PowerShell ISE運行腳本。這兩臺機器的主要區別在於PowerShell版本。
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = new-object -comobject Outlook.Application
$namespace = $outlook.GetNameSpace("MAPI")
$InboxFolder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
$InboxItems = $InboxFolder.items
$newmail = $outlook.CreateItem(0)
$newmail.Display()
$newmail.Recipients.Add("[email protected]")
$newMail.Subject = "Report"
$excel = New-Object -comobject Excel.Application
$FilePath = "D:\Report.xlsx"
$ReportWorkBook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $true
$ws = $ReportWorkBook.Worksheets.Item(1)
$SelectedRange = $ws.UsedRange
$SelectedRange.Copy()
# PasteExcelTable works on PC1 but Fails on PC2 consistently (with PowerShell 3.0)
#$newmail.HTMLBody +=$newmail.GetInspector.WordEditor.Range().PasteExcelTable($false,$false,$true)
# Paste() worked on both PCs
$newmail.GetInspector.WordEditor.Range().Paste()
$newMail.Send()
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Remove-Variable excel
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook)
Remove-Variable outlook
一個一致的問題是 - 由powershell啓動的Excel.exe進程永遠不會在腳本運行完成後退出。我必須通過任務管理器手動完成任務。 (我打算單獨發佈問題以獲得解決方案。)
但是,主要的問題是Outlook 2010的一致性崩潰,但它崩潰的點是不一致的。
腳本是通過ISE 5-6倍PC1上運行(使用PowerShell 2)和各試驗後而產生的電子郵件。但是,在最後一次成功的測試運行後的幾分鐘後,我在Outlook 2010中收到了「無響應」對話框,它讓我有選擇重新啓動它。重新啓動後,Outlook再次凍結,然後我不得不殺死該進程並重新啓動。
在使用PowerShell 3(通過ISE)每次我跑的腳本的Outlook凍結PC2。它似乎總是崩潰粘貼操作。在PC2上使用$newmail.GetInspector.WordEditor.Range().Paste()
。但是,在成功發送電子郵件幾分鐘後,Outlook再次凍結。
正如你所看到的 - 存在時,Outlook將崩潰沒有一致性/凍結......有時它同時粘貼,有時想有時發送電子郵件後,發送或保存電子郵件時是!
有趣。到目前爲止,我一直在使用stop-process來終止腳本末尾的運行excel進程。我會嘗試清除剪貼板,看看是否調用'$ excel.Quit(); [System.Runtime.Interopservices.Marshal] :: ReleaseComObject($ excel)'現在將關閉該進程。 – Ron
我清除了剪貼板,但是腳本結束後,excel進程仍在運行。我仍然需要繼續使用'Stop-Process'來結束正在運行的實例。 – Ron