如何安排batch file在启动或closures时运行?

我有两个batch file发送电子邮件旨在通知服务器关机或启动。 batch file调用带有单个参数的exe文件,要发送的消息。 该exe文件来自使用system.net.mail的vb.net程序。

batch file在命令提示符下正常工作并收到电子邮件。

现在,我希望这些batch file在操作系统启动时以及操作系统正在closures时自动运行,而无需任何用户login。

我试图在Win 8.1机器上testing这个,我相信它应该和Server 2012 R2一样。 如果这是一个错误的假设,请告知。

所以这是我的尝试:

1)任务计划程序(但仅用于启动,没有关机选项)

2)本地组策略编辑器>计算机configuration> Windows设置>脚本(启动/closures)

在这两种情况下,设置看起来非常简单,但电子邮件永远不会被发送。

有人能给我关于我明显没有想到的考虑的想法吗?

是问题的权限? 我怎么知道?

问题是“它看起来安排,但不是”?

batch file不能以这种方式使用的问题?

由于这是我第一次这样做,我很确定我错过了一些基本的东西。

这实际上不是一个答案,由于下面提到的两个限制,但它太长的评论,所以..

我做了一个简单的testing,有以下两个缺点:

  1. 脚本不发送电子邮件。 我需要ISP的smtp中继,但是find它太麻烦了。
  2. 我正在testing一个Win10预览,而不是Win8.1。 这是我今天晚上的一切。

Local Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown) ,我已经把startup目录中的一个启动powershell脚本和shutdown目录中的一个shutdown powershell脚本。

我特别注意在每个启动和closures策略节点内的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! 

我期望有相同的结果发送邮件,但是一个不能确定,直到一个实际上尝试..

学习和使用每个人的意见和答案实际上帮助解决了我的问题,但有时真实的问题有些不同。 所以,如果有人被同样的“陷阱”所困住,我觉得自己有义务发布对我来说真正的问题。

在脚本testing中,在我的Win 8.1机器上工作似乎更方便; 事实certificate,这不是。 我以为我的Win 8.1机器实际上与服务器2012 R2的工作方式相同; 我的假设是错误的。

我把所有的东西都转移到了我的2012 R2服务器上,这些脚本完美无缺地运行起来。 我无法解释为什么Win 8.1的机器反应不同,它只是。

所以我的解决scheme是不再使用Win 8或8.1机器来testing启动/closures脚本,只需在目标服务器上执行即可。

(对不起,迟到的回复,我出差了)

转到eventviewer,searchlogin和注销安全事件,右键单击它,并添加一个任务发送此电子邮件的事件。

它是最好的方法。