views:

6222

answers:

5

This is a Windows 2003 machine that gets switched on every morning, but no one logs on until some hours later.

I want to use the time in between to run a backup script c:\script\backup.cmd

How can I start this unattended after the machine has come up?

I tried 2 registry keys, but this resulted in the script being run after a user logs on (which is too late):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

In the end I used Windows TaskScheduler, who has such an option, but I was wondering if there is another possibility?

+4  A: 

You have already outlined a good solution:

Setup a scheduled task to run at Start Up and allow the job to run when the user isn't logged on.

GateKiller
Yes, this works fine. But I would like to disable Task Scheduler so I was looking for a different approach.
Karl Thorwald
A: 

You can run a script at system startup using group policy gpedit.msc

This seems fast and easy. As which user would the process run? LocalSystem`?
Karl Thorwald
A: 

The way you aleady do this seems fine to me; however if you want an alternative approach then services get started when the machine boots so you could write a service that detects if it's a new day (to allow for reboots) and if it is then run your backup.

If I was doing this as a service I'd use TCL because I know it and like it and it has an extension twapi that allows you to run a script as a service. Other scripting languages may well have similar facilities.

Jackson
Thank you this looks interesting. When I will have to write a service one day I'll have a look at TCl / twapi
Karl Thorwald
A: 

There is, if you're using Active Directory. If you can isolate the computer to its own OU or use WMI filtering, you could assign a GPO which has a startup script for the computer. This would ensure that even if someone went in via safe mode and disabled the Task Scheduler, upon startup and connection to the domain, the script would run.

K. Brian Kelley
Thank you, this is a great thing to know, I have some machines in AD and will try this one day.
Karl Thorwald
+1  A: 

The first and last answers (that's going to change; not yet sure how to refer to a particular one) are both correct, and are using the same mechanism.

GPEDIT.MSC runs against the local computer's Group Policy store when it's used directly, so it's useful for setting local-only parameters.

When using Active Directory, the same interface is used to edit policy objects, so the same settings are available across a bunch of machines.

Windows 2000 and above offer a "Startup Scripts" item in the policy editor:

Computer Settings -> Windows Settings -> Scripts (Startup/Shutdown)

There's an equivalent logon script area (once a user has logged on) in the User configuration bit.

The computer startup scripts run in the computer context, i.e. LocalSystem, as you noted, so they often can't access network drives and so on.

A startup script is a quick and easy way of getting a process running when the machine boots. The computer startup process will be affected by the time it takes to run the program, though, so you might want to ensure you call it with the START command from a batch file, or specifying not to wait for the executable to complete from whatever script language you use. (the key point there is: run the script asynchronously unless it's critical, or doesn't need to be run asynchronously cos it will always take no time at all. Long boots = unhappy users).

Using a Win32 Service is an alternative option - you can use the SRVANY utility from the Resource Kit to "service-ify" pretty much any executable. VS .Net and later also let you build a managed service directly.

And Task Scheduler gets much more capable as of Vista/2008, able to run scripts at startup, on idle, when certain other conditions are met; it's pretty cool. Task scheduler has the possible advantage of being able to specify the user account under which the task runs, if that's important to you.

Caveat Scriptor: http://support.microsoft.com/kb/256320

Run Startup Scripts Asynchronously: http://msdn.microsoft.com/en-us/library/ms811602.aspx

Vista Task Scheduler (what's new): http://technet.microsoft.com/en-us/appcompat/aa906020.aspx

Tristank
Thank you, it is obvious you answered it from any angle.
Karl Thorwald