Скрипт PowerShell для запланированной задачи отправляет электронную почту на некоторые серверы, но не на другие

Скрипт PowerShell для запланированной задачи отправляет электронную почту на некоторые серверы, но не на другие

надеюсь, кто-нибудь поможет мне разобраться, так как это немного сбивает меня с толку! [Я новичок, так что, пожалуйста, будьте нежны :) ]

Недавно я настроил скрипт PS для запуска запланированной задачей Windows при запуске, через пакетный файл для запуска с параметром -ExecutionPolicy Bypass. Цель состоит в том, чтобы отправить список неработающих автоматических служб в наш список рассылки sysadmin, чтобы мы могли вмешаться при необходимости.

Задача была развернута Group Policy Oject на ряде серверов Windows 2008, 2008 R2 и Windows 2012 R2. Задача выполняется как SYSTEM с наивысшими привилегиями, а наш лес/домен функционирует на уровне Server 2012 R2. Скрипт запускается из UNC на нашем SAN и включает вывод localhost в 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% единственная часть скрипта, которая не работает, это часть send-mailmessage. Текстовый файл создается в C:\temp с 'hostname' и т. д., чтобы определить, с какой машины он пришел, и его содержимое является точным. Они просто не завершают работу и не отправляют отчет по электронной почте (что является своего рода смыслом всего упражнения :)

Еще больше раздражает то, что эти «проблемные машины» отправляют электронное письмо, если я запускаю процесс, либо запустив пакетный файл, либо скрипт PowerShell напрямую, войдя на рабочий стол сервера с помощью своей учетной записи пользователя, поэтому я знаю, что они способны на это!

Будем признательны за любую помощь или потраченное на размышления время!

Спасибо,Джеймс

решение1

Кажется, я исправил это. Это не требовало ни аутентификации, ни безопасного соединения. Я сузил проблему до ошибки «Учетная запись 'DOMAIN\COMPUTER$' предоставила действительные учетные данные, но у нее нет разрешений на отправку на SMTP Receive connector 'Default Frontend MAILSERVER; не пройдена аутентификация». в журналах сервера Exchange 2013. Хотя сервер находился в диапазоне IP-адресов, по какой-то причине простая установка флажка Группы разрешений/Пользователи Exchange позволяла это сделать. Я не знаю, почему это было необходимо только для некоторых серверов, насколько это актуально, но это работает, и этого достаточно! Наша среда Exchange находится в середине миграции и в настоящее время в ней довольно беспорядок, поэтому можно сказать, что ответ кроется там.

Спасибо @Todd Wilcox за подсказки. Ура

Связанный контент