2016-12-20 13 views
2

リモートマシンから最新のイベントログを取得しているスクリプトがあります。 Outlookを使用して特定のグループのユーザーにイベントログの詳細を送信します。このスクリプトはPowershell ISEを実行してもうまく動作していますが、タスクスケジューラを使用して電子メールを送信していません。 ご協力いただければ幸いです。おかげPowershellスクリプトがタスクスケジューラを使用してOutlook経由で電子メールを送信できない

スクリプトは以下のとおり:

$Recipients="[email protected]","[email protected]" 

Foreach ($name in $Recipients) { 
    $Outlook = New-Object -ComObject Outlook.Application 

    $Mail = $Outlook.CreateItem(0) 
    $Mail.Recipients.Add($name) 
    $Mail.Subject ="Testing" 
    $Mail.Body ="Demo" 
    Write-Host "Sending Email" 
    $Mail.Send() 
} 
+0

cmd 'powershell-file'。\ your-script.ps1''でスクリプトを手動で実行すると、どのようなエラーメッセージが表示されますか? – n01d

+0

タスクスケジューラは、おそらくコマンドラインユーザーとは異なるユーザーを使用します。スケジューラユーザーが適切なOutlookメールプロファイルを持っていることを確認します。 –

+0

@ n01dタスクスケジューラの時点で正常に動作していることを示すエラーはありません。 – Vishal

答えて

0

あなたはこのためだけに展望COMオブジェクトを使用しようとするのではなく、-はMailMessageを送信し使用する必要があります。 この方法では、メールプロファイルとその他の設定(タスクを実行するために使用するユーザーの下にOutlookで設定する必要があります)には依存しません。 また、コード内に奇妙なことがいくつかあります。受信者ごとに新しいCOM Outlook COMオブジェクトを作成し、メールを送信しようとします。Forループをトリガするように移動します。Outlook COMオブジェクトの作成がより論理的です。

2

タスクスケジューラはサービスとして実行され、Officeアプリケーション(Outlookを含む)はサービスで使用できません。

+0

あなたは、outlook..whileから電子メールを送ることはできません。タスクスケジューラのpowershellスクリプトを実行します。 – Vishal

+0

Send MailMessage、.NET MailMessageクラス、またはEWS API(Exchangeサーバを使用する場合)を使用してください。これはスケジュールされたタスクで実行されます。正直言って、このためにOutlook COMオブジェクトを使用することは、この目標に達するために利用可能な他のオプションと比較して、間違ったアプローチです。 – bluuf

+0

@Vishal - はい、それは私の言いたいことです。 –

2

マイクロソフトでは現在、オフィスで発生する可能性があるため、無人で非対話型のクライアントアプリケーションまたはコンポーネント(ASP、ASP.NET、DCOM、およびNTサービスを含む)からMicrosoft Officeアプリケーションのオートメーションを推奨しません。この環境でOfficeを実行すると不安定な動作やデッドロックが発生する可能性があります。

サーバー側のコンテキストで実行されるソリューションを構築する場合は、無人で実行するために安全にされたコンポーネントを使用するようにしてください。または、コードの少なくとも一部がクライアント側で実行できるようにする代替手段を見つけようとする必要があります。サーバー側のソリューションからOfficeアプリケーションを使用する場合、アプリケーションには正常に実行するために必要な機能が不足しています。さらに、全体的なソリューションの安定性でリスクを冒すことになります。詳細については、Considerations for server-side Automation of Officeの記事をご覧ください。

$From = "[email protected]" 
$To = "[email protected]" 
$Cc = "YourBoss[email protected]" 
$Attachment = "C:\temp\Some random file.txt" 
$Subject = "Email Subject" 
$Body = "Insert body text here" 
$SMTPServer = "smtp.gmail.com" 
$SMTPPort = "587" 
Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject ` 
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl ` 
-Credential (Get-Credential) -Attachments $Attachment 

また、あなたはより多くの情報のためEWS Managed API, EWS, and web services in Exchangeを参照して、EWSを使用して検討することができます。

関連する問題