web-dev-qa-db-ja.com

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

うまくいけば、誰かが私がこれを理解するのを手伝ってくれるでしょう。 [私は新しいので、優しくしてください:)]

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

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

スクリプトは次のとおりです。[確かに、私は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%の場合、スクリプトの機能しない部分は、メールメッセージの送信部分だけです。テキストファイルは、C:\ tempに「hostname」などを使用して作成され、どのマシンからのものであるかを識別し、内容は正確です。彼らは仕事を終えて電子メールレポートを送信しません(これは演習全体のポイントのようなものです:)

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

助けや検討に費やした時間はありがたいです!

ありがとう、ジェームズ

1
user485706

直したようです。認証は必要なく、安全な接続でもありませんでした。問題を「アカウント 'DOMAIN\COMPUTER $'は有効な資格情報を提供しましたが、SMTP受信コネクタ 'のデフォルトのフロントエンドメールサーバーに対する送信権限がありません。認証に失敗しました。」というエラーに絞り込みました。 Exchange2013サーバーのログ。サーバーはIP範囲内にありましたが、何らかの理由で、[アクセス許可グループ/ Exchangeユーザー]チェックボックスをオンにするだけで許可されました。なぜこれが一部のサーバーにのみ必要なのか、どのように関連するのかについては賢明ではありませんが、機能し、それで十分です!私たちのExchange環境は移行の途中であり、現時点ではかなり混乱しているため、答えはそこにあると送信されます。

ポインタをありがとう@ToddWilcox。乾杯

1
user485706