排程任務上的 PowerShell 腳本會在某些伺服器上傳送電子郵件,但在其他伺服器上則不傳送電子郵件

排程任務上的 PowerShell 腳本會在某些伺服器上傳送電子郵件,但在其他伺服器上則不傳送電子郵件

希望有人能幫助我理解這一點,因為它讓我有點頭痛! [我是新人,所以請溫柔點:)]

我最近設定了一個 PS 腳本,在啟動時由 Windows 排程任務運行,透過批次檔使用 -ExecutionPolicy Bypass 開關運行。目的是將未運行的自動服務列表發送到我們的系統管理員分發列表,以便我們可以在必要時進行幹預。

此任務已由群組原則物件部署到許多 Windows 2008、2008 R2 和 Windows 2012 R2 伺服器。該任務以具有最高權限的 SYSTEM 身份運行,並且我們的林/網域在 Server 2012 R2 層級上運行。該腳本從 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 中建立的,帶有「主機名稱」等以識別它來自哪台計算機,並且內容是準確的。他們只是不會完成工作並發送電子郵件報告(這就是整個練習的重點:)

更令人沮喪的是,如果我使用我的使用者帳戶登入伺服器桌面時直接執行批次檔或PowerShell 腳本來觸發該過程,這些「問題機器」將發送電子郵件,所以我知道他們有能力做到這一點!

任何幫助或花時間考慮將不勝感激!

謝謝,詹姆斯

答案1

我好像已經修好了。它既不需要身份驗證,也不需要安全連線。我將問題範圍縮小到錯誤“帳戶‘DOMAIN\COMPUTER$’提供了有效的憑證,但它沒有對 SMTP 接收連接器‘預設前端 MAILSERVER;身份驗證失敗’的提交權限。”在 Exchange 2013 Server 日誌中。儘管伺服器位於 IP 範圍內,但出於某種原因,只需勾選「權限群組/Exchange 使用者」複選框即可允許它。我不知道為什麼這對某些伺服器來說是必要的,也不知道它是如何相關的,但它有效,這就足夠了!我們的 Exchange 環境正處於遷移中期,目前相當混亂,因此答案就在那裡。

感謝@Todd Wilcox 的指點。乾杯

相關內容