아래 스크립트는 새 전자 메일 만들기, Excel 파일 열기, 내용 복사, 새 전자 메일에 붙여 넣기 및 보내기 기능을 수행합니다.
스크립트가 테스트 된 PC가 2 대 있습니다. 이 스크립트는 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를 통해 PC1 (PowerShell 2 사용)에서 5-6 회 실행되었으며 각 테스트에서 전자 메일이 생성되었습니다. 그러나 몇 분 후에 마지막으로 성공적인 테스트를 실행하면 Outlook 2010에서 "응답하지 않음"대화 상자가 나타나고 다시 시작할 수있는 옵션이 나타납니다. Outlook을 다시 시작한 후 다시 동결 된 다음 프로세스를 종료하고 다시 시작해야했습니다.
PowerShell 3이 설치된 PC2 (ISE를 통해)에서 스크립트를 실행할 때마다 Outlook이 멈췄습니다. 항상 붙여 넣기 작업이 중단 된 것처럼 보였습니다. $newmail.GetInspector.WordEditor.Range().Paste()
을 사용하여 PC2에서 작업했습니다. 그러나 이메일이 성공적으로 전송 된 후 2 분이 지나면 Outlook이 다시 동결되었습니다.
Outlook에서 충돌/정지가 발생하는 경우 일관성이 없습니다 ... 이메일을 보내거나 저장하려고 시도 할 때 가끔씩 붙여 넣을 때가 있습니다.
흥미 롭습니다. 지금까지 나는 stop-process를 사용하여 스크립트가 끝날 때 실행중인 Excel 프로세스를 종료했습니다. 클립 보드를 지우고'$ excel.Quit(); [System.Runtime.Interopservices.Marshal] :: ReleaseComObject ($ excel)'이 프로세스를 닫습니다. – Ron
클립 보드가 지워졌지만 스크립트가 끝난 후에도 Excel 프로세스가 계속 실행 중입니다. 계속 실행중인 인스턴스를 종료하기 위해'Stop-Process'를 계속 사용해야합니다. – Ron