15

这是一台 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,谁有这样的选择,但我想知道是否还有另一种可能?

4

5 回答 5

19

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

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

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

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

更长:

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

计算机启动脚本在计算机上下文中运行,即作为 LocalSystem,如您所述,因此它们通常无法访问需要特定用户或组成员身份才能工作的网络驱动器。当域成员计算机访问网络资源时,他们通常(有例外)使用他们的 MACHINENAME$ 帐户进行身份验证 - 这允许您设置共享/NTFS 权限以允许计算机访问这些资源。

启动脚本是在机器启动时让进程运行的一种快速简便的方法。

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

使用 Win32 服务是另一种选择 - 您可以使用资源工具包中的SRVANY实用程序来“服务化”几乎任何可执行文件。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没有!

于 2009-03-06T00:32:09.990 回答
8

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

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

于 2009-03-05T13:36:19.643 回答
1

您可以使用组策略 gpedit.msc 在系统启动时运行脚本

于 2009-03-05T13:40:50.913 回答
0

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

如果将其作为服务执行,我会使用 TCL,因为我了解并喜欢它,并且它具有扩展twapi,允许您将脚本作为服务运行。其他脚本语言可能也有类似的功能。

于 2009-03-05T13:43:37.397 回答
0

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

于 2009-03-05T14:10:35.333 回答