
我有 2 個批次文件,用於發送旨在通知伺服器關閉或啟動的電子郵件。批次檔使用單一參數(即要傳送的訊息)呼叫 exe。該exe來自使用system.net.mail的vb.net程式。
批次檔可以在命令提示字元下正常工作並收到電子郵件。
現在我希望這些批次檔在作業系統啟動和關閉時自動運行,而無需任何使用者登入。
我嘗試在 Win 8.1 計算機上對此進行測試,我相信它應該與 Server 2012 R2 上的工作方式相同。如果這是一個錯誤的假設,請提出建議。
所以這就是我嘗試過的:
1)任務計劃程序(但僅用於啟動,沒有關閉選項)
2) 本機群組原則編輯器 > 電腦設定 > Windows 設定 > 腳本(啟動/關閉)
在這兩種情況下,設定似乎都非常簡單,但電子郵件從未發送。
有人可以給我關於我顯然沒有考慮的考慮因素的想法嗎?
是權限問題嗎?我怎麼知道呢?
問題是「看起來是預定的,但實際上並非如此」?
問題是批次檔不能這樣使用嗎?
因為這是我第一次這樣做,所以我很確定我錯過了一些基本的東西。
答案1
由於下面提到的兩個限制,這確實不是一個答案,但評論太長了,所以..
我做了一個簡單的測試,有以下兩個缺點:
- 這些腳本不發送電子郵件。我需要 ISP 的 smtp 中繼,但找到它太麻煩了。
- 我正在 Win10 預覽版上進行測試,而不是 Win8.1。這就是我今晚所擁有的一切。
在 的內部Local Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown)
,我在該目錄中放置了一個啟動 powershell 腳本startup
,在該目錄中放置了一個關閉 powershell 腳本shutdown
。
我特別注意在Powershell Scripts
每個啟動和關閉策略節點內的選項卡下新增腳本。
我已經確保我有一個名為的目錄,c:\temp
因為我懶得寫它的存在。
我還透過執行以下命令來確保允許使用 powershell 腳本:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
這是啟動腳本:
if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date
$string = "$timestamp UP!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber
這是關閉腳本:
if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date
$string = "$timestamp DOWN!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber
然後我重新啟動了計算機。這是文件的內容c:\temp\log.txt
:
06/01/2015 00:07:45 DOWN!
06/01/2015 00:08:10 UP!
我希望它發送郵件會得到相同的結果,但在實際嘗試之前,人們當然無法確定。
答案2
研究和使用每個人的評論和答案實際上有助於解決我的問題,但有時情況下,真正的問題有些不同。因此,我覺得有義務發布對我來說實際存在的問題,以防其他人遇到同樣的「陷阱」。
在腳本測試期間似乎在我的 Win 8.1 機器上工作更方便;事實證明並非如此。我有假定事實上,我的 Win 8.1 機器與伺服器 2012 R2 的工作方式相同;我的假設是錯的。
當我將所有內容轉移到我的 2012 R2 伺服器上時,腳本就完美地工作了,並且從那時起一直如此。我無法解釋為什麼 Win 8.1 機器的反應不同,它就是這樣。
所以我的解決方案是不再使用Win 8或8.1機器來測試啟動/關閉腳本,只需在目標伺服器上進行即可。
(由於我出差很遠,所以回覆晚了,抱歉)
答案3
前往事件檢視器,搜尋登入和登出安全事件,右鍵單擊它並為此事件新增一個發送電子郵件的任務。
這是最好的方法。