예약된 작업의 PowerShell 스크립트는 일부 서버에서는 전자 메일을 보내지만 다른 서버에서는 보내지 않습니다.

예약된 작업의 PowerShell 스크립트는 일부 서버에서는 전자 메일을 보내지만 다른 서버에서는 보내지 않습니다.

조금 있으면 내 머리가 복잡해지기 때문에 누군가가 내가 이것을 이해하도록 도와줄 수 있기를 바랍니다! [저는 초보라서 조심해주세요 :) ]

최근에는 -ExecutionPolicy Bypass 스위치로 실행되는 배치 파일을 통해 시작 시 Windows 예약 작업에 의해 실행되도록 PS 스크립트를 설정했습니다. 목표는 실행되지 않는 자동 서비스 목록을 sysadmin 배포 목록으로 보내 필요한 경우 개입할 수 있도록 하는 것입니다.

이 작업은 그룹 정책 개체에 의해 여러 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%의 경우 스크립트에서 유일하게 작동하지 않는 부분은 메일 보내기 부분입니다. 텍스트 파일은 어느 컴퓨터에서 왔는지 식별하기 위해 '호스트 이름' 등을 사용하여 C:\temp에 생성되며 내용이 정확합니다. 그들은 작업을 끝내지 않고 이메일 보고서를 보내지 않을 뿐입니다(이것이 전체 연습의 핵심입니다 :)

더 실망스러운 점은 내 사용자 계정으로 서버 데스크톱에 로그온했을 때 배치 파일이나 PowerShell 스크립트를 직접 실행하여 프로세스를 트리거하면 이러한 "문제 컴퓨터"가 이메일을 보내므로 그들이 가능하다는 것을 알고 있다는 것입니다. !

고려하는 데 도움이나 시간을 투자하시면 감사하겠습니다!

고마워요, 제임스

답변1

고쳐진 것 같네요. 인증이 필요하지도 않았고 보안 연결도 필요하지 않았습니다. 문제의 범위를 "'DOMAIN\COMPUTER$' 계정이 유효한 자격 증명을 제공했지만 SMTP 수신 커넥터 'Default Frontend MAILSERVER에 대한 제출 권한이 없습니다. 인증에 실패했습니다."라는 오류로 범위를 좁혔습니다. Exchange 2013 Server 로그에 있습니다. 서버가 IP 범위에 있었지만 어떤 이유로든 권한 그룹/Exchange 사용자 확인란을 선택하면 허용되었습니다. 나는 왜 이것이 일부 서버에만 필요한지, 그것이 어떻게 관련되는지에 대해 현명하지 못하지만 작동하고 그것으로 충분합니다! 우리의 Exchange 환경은 마이그레이션이 진행 중이고 현재 상당히 혼란스럽기 때문에 답이 거기에 있다고 보냅니다.

조언을 주신 @Todd Wilcox에게 감사드립니다. 건배

관련 정보