Group-Policy

如何安排批處理文件在啟動或關閉時執行?

  • June 8, 2015

我有 2 個批處理文件,它們發送旨在通知伺服器關閉或啟動的電子郵件。批處理文件使用單個參數呼叫 exe,即要發送的消息。該 exe 來自使用 system.net.mail 的 vb.net 程序。

批處理文件在命令提示符下正常工作並收到電子郵件。

現在我希望這些批處理文件在作業系統啟動和作業系統關閉時自動執行,而無需任何使用者登錄。

我嘗試在 Win 8.1 機器上進行測試,我認為它應該與 Server 2012 R2 上的工作相同。如果這是一個錯誤的假設,請提出建議。

所以這就是我嘗試過的:

1)任務計劃程序(但僅用於啟動,沒有關閉選項)

  1. 本地組策略編輯器 > 電腦配置 > Windows 設置 > 腳本(啟動/關閉)

在這兩種情況下,設置似乎都非常簡單,但從未發送過電子郵件。

有人可以就我顯然沒有考慮的考慮給我一些想法嗎?

是權限問題嗎?我怎麼會知道?

問題是“它看起來是預定的,但不是”?

是不是批處理文件不能這樣用的問題?

由於這是我第一次這樣做,我很確定我錯過了一些基本的東西。

研究和使用每個人的評論和答案實際上有助於解決我的問題,但有時實際問題會有所不同。所以,我覺得有義務發布對我來說是實際問題的東西,以防其他人被同樣的“陷阱”抓住。

在腳本測試期間,在我的 Win 8.1 機器上工作似乎更方便;事實證明不是。我曾假設我的 Win 8.1 機器實際上與 server 2012 R2 的工作方式相同;我的假設是錯誤的。

在我將所有內容移至我的 2012 R2 伺服器的那一刻,這些腳本完美無缺地執行,並且一直如此。我無法解釋為什麼 Win 8.1 機器的反應不同,它就是這樣。

所以我的解決方案是不再使用 Win 8 或 8.1 機器來測試啟動/關閉腳本,只需在目標伺服器上執行即可。

(抱歉回复晚了,我出差在外地)

由於下面提到的兩個限制,這確實不是一個答案,但是評論太長了,所以..

我做了一個簡單的測試,有以下兩個缺點:

  1. 腳本不發送電子郵件。我需要我的 ISP 的 smtp 中繼,但找到它太麻煩了。
  2. 我正在測試 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!

我希望它發送郵件會得到相同的結果,但是在實際嘗試之前,當然不能確定..

引用自:https://serverfault.com/questions/687041