在Windows启动时运行脚本而无需用户登录

时间:2009-03-05 13:33:40

标签: windows cron scheduled-tasks startup

这是一台每天早上都开机的Windows 2003计算机,但几个小时后才会登录。

我想用两者之间的时间来运行备份脚本c:\ script \ backup.cmd

如何在机器启动后无人值守启动?

我尝试了2个注册表项,但这导致脚本在用户登录后运行(为时已晚):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

最后我使用了Windows TaskScheduler,他有这样的选择,但我想知道是否还有其他可能性?

5 个答案:

答案 0 :(得分:19)

简短回答: GPEDIT.MSC (开始,运行,GPEdit.msc)

Windows 2000及更高版本[1]在策略编辑器中提供计算机启动脚本集合:

  • 计算机设置 - > Windows设置 - > 脚本(启动/关闭)

在用户配置位中有一个等效的登录脚本区域(即计算机启动后,用户登录时)。

<强>长:

GPEDIT.MSC是组策略编辑控制台,在直接使用本地计算机的组策略存储时运行,因此它对设置仅本地参数很有用。使用Active Directory时,相同的界面用于编辑林托管的组策略对象(GPO),因此可以在一堆计算机上使用相同的设置。

如您所述,计算机启动脚本在计算机上下文(即LocalSystem)中运行,因此它们通常无法访问需要某个用户或组成员身份才能工作的网络驱动器,等等。当计算机访问网络时,他们通常(有例外)使用他们的MACHINENAME $帐户。

启动脚本是一种在机器启动时让流程运行的快捷方式。

但是,计算机启动过程将受到运行程序所需时间的影响,因此您可能希望确保使用批处理文件中的START命令调用它,或者指定不等待可执行文件完成用你使用的任何脚本语言。 (关键点是:运行脚本异步,除非它是关键的,或者不需要异步运行,因为它总是需要没有时间。长靴子=不满意的用户)。

使用Win32服务是另一种选择 - 您可以使用Resource Kit中的 SRVANY 实用程序来“service-ify”几乎任何可执行文件。 VS.Net 2002及更高版本还允许您直接构建托管服务。

任务计划程序从Vista / 2008开始就能够更多,能够在启动时,空闲时和/或生成事件日志时运行脚本其他条件得到满足:非常酷!计划任务的优势在于能够指定运行任务的用户帐户(如果这对您很重要)。

警告: http://support.microsoft.com/kb/256320

异步运行启动脚本: http://msdn.microsoft.com/en-us/library/ms811602.aspx

Vista任务计划程序(新功能): http://technet.microsoft.com/en-us/appcompat/aa906020.aspx

[1] Windows XP,2003,Vista / 2008,Windows 7 / 2008R2,Windows 8/2012,Windows 8.1 / 2012R2,Windows 10 / Windows Server 2016.一切。但NT4没有!

答案 1 :(得分:8)

您已经概述了一个很好的解决方案:

将计划任务设置为在“启动”时运行,并允许在用户未登录时运行作业。

答案 2 :(得分:1)

您可以使用组策略gpedit.msc

在系统启动时运行脚本

答案 3 :(得分:0)

你这样做的方式对我来说似乎很好;但是,如果您想要一种替代方法,那么当计算机启动时服务就会启动,这样您就可以编写一个服务来检测它是否是新的一天(允许重新启动),然后运行备份。

如果这样做是作为一项服务,我会使用TCL,因为我知道并喜欢它,并且它有一个扩展名twapi,允许您将脚本作为服务运行。其他脚本语言可能也有类似的功能。

答案 4 :(得分:0)

如果您使用的是Active Directory。如果您可以将计算机与其自己的OU隔离或使用WMI筛选,则可以为计算机分配具有启动脚本的GPO。这将确保即使有人通过安全模式进入并禁用了任务计划程序,在启动并连接到域时,脚本也会运行。