スケジュールされたタスクの PowerShell スクリプトは、一部のサーバーでは電子メールを送信しますが、他のサーバーでは送信しません。

スケジュールされたタスクの PowerShell スクリプトは、一部のサーバーでは電子メールを送信しますが、他のサーバーでは送信しません。

ちょっと頭が混乱しているので、誰かがこれを理解するのを手伝ってくれるといいのですが。[私は初心者なので、優しくしてください :) ]

最近、起動時に Windows スケジュール タスクによって実行される PS スクリプトを、-ExecutionPolicy Bypass スイッチを使用してバッチ ファイル経由で設定しました。目的は、実行されていない自動サービスのリストをシステム管理者配布リストに送信し、必要に応じて介入できるようにすることです。

このタスクは、グループ ポリシー オブジェクトによって、多数の Windows 2008、2008 R2、および Windows 2012 R2 サーバーに展開されています。このタスクは、最高の権限を持つ SYSTEM として実行され、フォレスト/ドメインは Server 2012 R2 レベルで機能しています。このスクリプトは、SAN 上の UNC から実行され、C:\temp (単純な notepad.txt ファイル) への localhost 出力が含まれます。

スクリプトは次のとおりです: [確かに、私は PowerShell の初心者なので、あちこちのさまざまな記事から寄せ集めて、許容できる水準で動作するまで徹底的に調べました。]

#PowerScript task for reporting the name of any service with automatic startup mode that are not are running. 
$Results = @()
$hst = hostname
$msgbdy = "This machine has restarted.
Check the attached file for any services with Automatic startup configuration that are not running. 
[NB: Services configured to startup in Automatic (Delayed Start) are ignored]"
#GET AUTOMATIC (NOT DELAYED-START) SERVICES
$Results += Get-WmiObject -Class Win32_Service -Filter {State != 'Running' and StartMode = 'Auto'} |
ForEach-Object {Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$($_.Name)" |
Where-Object {$_.Start -eq 2 -and $_.DelayedAutoStart -ne 1}} |
Select-Object -Property @{label='ServiceName';expression={$_.PSChildName}}
#OUTPUT TO TXT
$Results | Out-File "c:\temp\$hst.txt"
#PAUSE FOR 2 SECONDS
Start-Sleep -s 2
#SEND OUTPUT FILE BY EMAIL
send-mailmessage -from "[email protected]" -to "[email protected]" -subject "$hst Automatic Services Check" -Attachments "c:\temp\$hst.txt" -body $msgbdy -priority High -smtpServer server.ourdomain.co.uk

現在、スクリプトは PowerShell プロンプトで直接実行された場合に機能します。また、スケジュールされたタスクの場合と同様に、バッチ ファイルを実行してトリガーした場合も機能します。さらに、スケジュールされたタスクとしてトリガーされた場合も機能します。ただし、これは当社のマシンの約 75% にのみ当てはまることが判明しました。

残りの 25% については、スクリプトで機能しないのは send-mailmessage の部分だけです。テキスト ファイルは C:\temp に作成され、どのマシンからのものかを識別するための 'hostname' などが含まれており、内容は正確です。ただ、ジョブを完了して電子メール レポートを送信しません (これがこの演習全体のポイントの 1 つです :)

さらにイライラするのは、自分のユーザー アカウントでサーバー デスクトップにログオンしたときに、バッチ ファイルまたは PowerShell スクリプトを直接実行してプロセスをトリガーすると、これらの「問題のあるマシン」が電子メールを送信することです。つまり、それが可能であることはわかっています。

ご助力やご検討に費やす時間をいただければ幸いです。

ありがとう、ジェームズ

答え1

修正できたようです。認証が必要でも、安全な接続でもありませんでした。問題を、Exchange 2013 Server ログの「アカウント 'DOMAIN\COMPUTER$' は有効な資格情報を提供しましたが、SMTP 受信コネクタ 'Default Frontend MAILSERVER; への送信権限がありません。認証に失敗しました。」というエラーに絞り込みました。サーバーは IP 範囲内でしたが、何らかの理由で、アクセス許可グループ/Exchange ユーザーのチェックボックスをオンにするだけで許可されました。なぜこれが一部のサーバーにのみ必要なのか、それがどのように関連しているのかはわかりませんが、機能しているので十分です。当社の Exchange 環境は移行の途中で、現在かなり混乱しているため、答えはそこにあるように思われます。

アドバイスをくれた@Todd Wilcoxに感謝します。乾杯

関連情報