PowerShell を使ってメールを送信することは、適切な状況下でデータを配信する優れた方法です。ファイルをエクスポートするよりも多少の手間はかかりますが、適切な参照があればプロセスはシンプルになります。
コンソールから
PowerShell では、必要な結果がコンソールウィンドウにのみ表示される場合が多くありますが、スクリプトの結果を保存するための出力ファイルや set-content の場所を指定することもできます。多くの場合これで十分ですが、PowerShell スクリプトをメールで送信すると、データを配信する優れた方法になります。
定義する必要があるプロパティと変数がいくつかあります。まず、メールを中継するサーバーのIPアドレスまたはホスト名です。例えば、スクリプトをメールサーバーから実行する場合は、localhostアドレスを使用できます。
$smtpServer = "127.0.0.1"
また、添付するファイルも参照します。このファイルはスクリプト内ですでに作成されている可能性があり、定期的に置き換えられる静的なファイル名である場合もあれば、ニーズに基づいて動的である場合もあります。
$file = "C:\folder\file.csv" $att = 新しいオブジェクト Net.Mail.Attachment($file)
次に、必要な .NET オブジェクトをインポートします。
$msg = 新しいオブジェクト Net.Mail.MailMessage $smtp = 新しいオブジェクト Net.Mail.SmtpClient($smtpServer)
次に、メールのその他のプロパティを入力します。「送信元」アドレスは、組織のメールフィルタリングやスパムポリシーによっては特に重要になる場合があります。以下の値は変数を使用して入力できます。
$msg.From = "[email protected]"
電子メールに複数の受信者を追加するには、次の行を必要な数だけ追加できます。
$msg.To.Add("[email protected]") $msg.To.Add("[email protected]")
この行で電子メールの件名を設定します。
$msg.Subject = "メールサーバーからの通知"
複数行の文字列は、開始には「@」、終了には「@」を使用します。メール本文は複数行になる可能性が高いですが、そうでない場合は通常の二重引用符を使用できます。
$msg.Body = @"これは例ですメッセージ
体"@
ここで、上記で定義したファイルを添付します。
$msg.添付ファイル.追加($att)
次の2行はメッセージを送信し、添付ファイルをメモリから削除します。添付ファイルを削除しないと、システムメモリが不必要に使用され、最終的にはシステムパフォーマンスに影響を与える可能性があります。
$smtp.Send($msg) $att.Dispose()
例
Exchange 2007/2010 Serverのスクリプトでこの機能を使用する例を以下に示します。このスクリプトの目的は、メールボックスの統計情報に関する.csvレポートを作成し、管理者にメールで送信することです。以下のスクリプトを使用する場合は、サンプルの値をご自身の正当な情報に置き換えてください。
Add-PSSnapin Microsoft.Exchange.Management.Powershell.Admin -erroraction をサイレントで続行します$file = "C:\folder\file.csv"
$mailboxdata = (Get-MailboxStatistics | DisplayName、TotalItemSize、TotalDeletedItemSize、ItemCount、LastLoggedOnUserAccount、LastLogonTime を選択)
$mailboxdata | エクスポート-csv "$file"
$smtpServer = "127.0.0.1"
$att = 新しいオブジェクト Net.Mail.Attachment($file)
$msg = 新しいオブジェクト Net.Mail.MailMessage
$smtp = 新しいオブジェクト Net.Mail.SmtpClient($smtpServer)
$msg.From = "[email protected]"
$msg.To.Add("[email protected]")
$msg.To.Add("[email protected]")
$msg.Subject = "メールサーバーからの通知"
$msg.Body = "メールサーバーのメールボックスレポートを添付します"
$msg.添付ファイル.追加($att)
$smtp.Send($msg)
$att.Dispose()