Leverage Microsoft Windows Task Scheduler
Most properties readily available via the Task Scheduler Wizard
May 23, 2011
Windows Task Scheduler is a well-known GUI utility tool for automating recurring tasks. Many people don't realize that Task Scheduler does more thanschedule scripts, programs, and documents to run at specific times. You can also use the tool to display message boxes and send out email messages. What'smore, you can schedule tasks to run based on a number of event triggers, including startup, logon, and even custom events. This article will highlightthese event triggers and explain how to get the most from the often overlooked Task Scheduler.
Times Have Changed
There was a time when Task Scheduler was thought to be quite basic and unconfigurable, compared with the cron jobs of UNIX and Linux systems. These days,Task Scheduler is both configurable and capable. So before looking at third-party utilities, determine whether Task Scheduler can already do what you want.
For the purposes of this article, I'll focus on the Windows Server 2008 OS. Although other OSs, such as Windows 7, might differ slightly, Task Schedulershould function in much the same way as described here.
Task Scheduler Basics
Just as you must learn the rules before you can break them, you must become familiar with the basic operation of Task Scheduler before delving into itsmore esoteric uses. It won't take long.
To open Task Scheduler, you need administrator access. You can use the Control Panel, the Manage command, or taskschd.msc for this task. Figure 1 showswhat Task Scheduler looks like when it first opens.
Figure 1: Task Scheduler
Creating a New Task
There are three ways to create a new task:
Create a basic task
Create a non-basic task
Import a task
The Create Basic Task menu item will do the job for those tasks that don't require advanced settings, such as task time limits or number of repetitions.Here's how to set up a scheduled task to launch Microsoft Outlook at startup:
1. Click Action from the menu bar, and then click Create Basic Task.
2. Type a name for the task (we'll use Launch Outlook in this example) and an optional description, and then click Next.
3. You now have the option of scheduling the task to run
on a calendar-based interval, such as Daily, Weekly, Monthly, or One Time only
at common recurring events, such as when the computer starts or when you log on
on specific events, such as when a specific event is logged
Select the Triggers tab and then click New.
4. From the Begin the task drop-down list, choose At log on.
5. Choose 1 minute or 2 minutes from the Delay task for drop-down list, to let your PC complete its startup tasks. (I'll explain more about thebenefits of this decision later.)
6. Make sure that the Enabled check box is checked, and then click OK to close the New Trigger dialog box.
7. The Action screen, which Figure 2 shows, gives you three actions to choose from:
Start a program
Send an e-mail
Display a message
Select Start a program and then click Next.
Figure 2: Starting a program action
8. On the Start a Program screen, click the Browse button to locate outlook.exe. In Windows 7, this file will be in one of the following locations:
For 64-bit Windows -- C:program filesmicrosoft officeoffice14
For 32-bit Windows -- C:program files (x86)microsoft officeoffice14
9. Click Next to proceed to the Finish screen.
10. The Finish screen shows the task summary and a check box to display more options after the task is created. Click Finish to create the task, which thenis added to the Active Tasks list.
Running the Task on Demand
From the Active Tasks window, you can double-click any scheduled task to open its properties. Any task can be run on demand so that you can manually run itfor convenience, testing, or debugging (although the latter can be built in to some extent). Here's how to run a task on demand:
1. In Task Scheduler's central pane, in the Active Tasks list, double-click an item to bring up its properties. The right-hand Actions pane shows optionsfor the Selected Item, as Figure 3 shows.
Figure 3: Run command
2. Click Run to start the task. You can click the Stop button to abort the process.
Modifying an Existing Task
You can disable a task from its Selected Item menu. To permanently remove the selected task, use the Delete button.
The center pane displays the properties for the selected task. However, these properties are read-only. To gain access to this information in an editableform, click Properties under Selected Item. This action opens a Properties window that provides more fine-grained control to the task's triggers, actions,conditions, and settings, as Figure 4 shows.
Figure 4: Task Settings tab
The remainder of this article focuses on these settings and how to use them to set up more intricate scheduled tasks:
Schedule a delayed startup script
Schedule shutdown after the server has been idle for a certain length of time
Execute a Windows PowerShell script
Schedule a task based on a specific event
Test your tasks
Fine-tune an event-triggered task via the Task Scheduler Developer API
How to Schedule a Delayed Startup Script
Delaying the launch of a startup script or application so that the server can finish booting is usually a good idea. There's an option for that in theAdvanced Settings section of the New Trigger dialog box.
Now, you might be wondering why you would need such a scheduled task trigger when the Startup folder offers the same functionality. There are a couple goodreasons. First, boot-up and logon already place a sizeable load on your computer. Starting processes directly at logon places an additional burden on yourcomputer and can render it unresponsive for quite some time. Using a delayed scheduled task allows you to wait until the computer has finished itsbusiness. The second (and more important) reason is that scheduled tasks can be run with more rights than items in the Startup folder, which run under thelogged-on user's credentials. User Account Control (UAC) requires an elevated token when attempting to perform certain tasks:
Backing up and restoring data
Changing group memberships
Setting user and group security
Creating administrative scripts
Creating logon scripts
Creating user and group accounts
Deploying and upgrading software
Let's create a task to perform a backup after logon. Because we want to configure advanced settings, we'll create a regular task rather than a basic one.The steps are much the same as the ones we used to create our Launch Outlook task, except that you'll start with the Create Task action (instead of CreateBasic Task).
On the Create Task dialog box, which Figure 5 shows, you'll set the account and privileges that the task will use. With UAC, users of the admin group havetwo tokens. The filtered token represents standard user rights. When you click an executable and select Run as administrator, the full token --which contains admin rights -- is used.
Figure 5: Task Security options
Likewise, when you select Run with highest privileges in the Security options area of the Create Task dialog box, the full token is used.This setting works only when the user is in the admin group, because only those users have two tokens. To run a program with admin rights from a standarduser account, you must select Run whether user is logged on or not and then select a user that is a member of the admin group.
Enter the username in the form computernameusername -- for instance, server01administrator. Enter the password as well.
On the Triggers tab, click the New button to open the New Trigger dialog box, which Figure 6 shows. The Delay task for drop-down list gives yousix choices, ranging from 30 seconds to 1 day. Unfortunately, you can't define your own delay time; you must make do with the selection that is closest towhat you're looking for. In our case, one minute should suffice. Click OK to close the dialog box.
Figure 6: New Trigger dialog box
On the Actions tab, click the New button. Click the Browse button and locate C:program filescwrsynccwrsync.cmd in the New Action dialog box. (Note thatseveral actions can be associated with the same task.) Click Next to proceed to the Finish screen, and then click Finish to create the task.
How to Schedule Server Shutdown
Here's a scheduled task that uses the Windows Sysinternals PsShutdown utility to shut down a server thathas been idle for a certain amount of time. This is a great way to conserve system resources while not in use.
1. Create a new task, as you did in the previous section.
2. In the Program/script text box, enter the following command:
C:AdminutilsPsShutdown.exe
3. Enter the following in the Add arguments text box:
-s -f -c -t 10
4. You can choose to delay the task so that it runs only after the PC has been idle for a certain amount of time. Select 30 minutes from the Delay task for drop-down box.
How to Execute a PowerShell Script as a Scheduled Task
PowerShell is the most powerful administrative tool in Windows, so it's only natural that Windows admins would want to use Task Scheduler to automate theirPowerShell scripts. It turns out that these two tools are a perfect match.
You’ll need to set the execution policy to execute PowerShell scripts. To execute a PowerShell command directly, specify the command parameter,and then use the ampersand (&), a pair of curly braces ({}), and the PowerShell command that you want to run:
powershell -NoLogo -executionpolicy RemoteSigned -command &{get-process>>C:fsomytestprocesses.txt}
I recommend using the Run command, as Figure 7 shows, to test your command syntax prior to scheduling your task.
Figure 7: Running a PowerShell script
To execute the script, simply replace the -command flag with -file flag:
powershell.exe -noprofile -executionpolicy RemoteSigned -file %public%myscript.ps1
Note that you can include environment variables in the paths by delimiting them with percentage characters (%), as with any Cmd.exe command.
How to Schedule a Task Based on an Event
Windows events are perhaps the most complicated of all the task triggers, one reason being that Windows events encompass a whole range of potentialtriggers. To open the Event Viewer, which is part of the Server 2008 Administrative Tools, click Start, Control Panel, System and Security, Event Viewer.
The Event Viewer, which Figure 8 shows, displays information about hardware, software, and system problems.
Figure 8: Event Viewer
Events are categorized by type:
Error -- a significant problem, such as loss of data or functionality (e.g., logged if a service fails to load during startup)
Warning -- not necessarily significant, but might indicate a future problem (e.g., logged when disk space is low)
Information -- information about the successful operation of an application, driver, or service (e.g., logged when a network driver loads successfully)
Success Audit -- a successful audited security access attempt (e.g., a user's successful attempt to log on to the system)
Failure Audit -- a failed audited security access attempt (e.g., a user's failed attempt to access a network drive)
You can bind an event to any of these event types by right-clicking the event in Event Viewer and selecting Attach Task To This Event in the pop-up menu.This action launches the Create Basic Task Wizard, in which you can configure task options.
Fine-Tuning an Event-Triggered Task
Since Windows Vista, Task Scheduler has contained new interfaces for C++ developers, scripting objects for VBScript developers, and a schema for definingtasks in XML. These avenues offer more flexibility than ever before for both task creation and fine-tuning.
Case in point: Suppose you want to run a task when a user is added to a specific domain local group. You'll need to hook into Audit system events, whichrelate to system security. Each event has a code to help identify it:
4730 -- A security-enabled global group was deleted.
4731 -- A security-enabled local group was created.
4732 -- A member was added to a security-enabled local group.
4733 -- A member was removed from a security-enabled local group.
4734 -- A security-enabled local group was deleted.
4735 -- A security-enabled local group was changed.
4737 -- A security-enabled global group was changed.
Open the Create Basic Task Wizard, and then follow these steps to schedule the task:
1. Select When a specific event is logged on the Task Trigger screen.
2. Code 4732 identifies the addition of a member to a security-enabled local group. Enter that code in the Event ID field on the When a Specific Event IsLogged screen, as Figure 9 shows.
Figure 9: Logged event trigger details
3. To find the Log and Source for an event, open Event Viewer; in the left pane, select Windows Logs, Security and open the Properties dialog box. TheGeneral tab contains both the Log Name and Source fields. The latter is liable to be truncated, but when you position the mouse pointer over the name, atooltip appears with the full text, as Figure 10 shows.
Figure 10: Determining Log and Source
4. On the Action screen, select Display a message.
5. Click Finish to create the new task.
By default, a message will be displayed every time a new local group is added. If you want to target a specific group, you need to edit the XML. To do so,you first need to export the task:
1. Double-click the new task in the Task Scheduler Active Tasks list, as Figure 11 shows.
Figure 11: Local Group Added task
2. Click Export in the Selected Item list, as Figure 12 shows, and save the XML file to a location of your choosing.
Figure 12: Exporting XML
3. Open the XML source in your favorite text editor. You'll see code that looks like Listing 1. Add the TargetUserName code to the EventTrigger section, ascallout A shows.
Now the scheduled task will respond to event 4732 only when the TargetUserName (i.e., the Local Security Group Name) is SECURE NETWORKS.
You can also filter on certain users, by using MemberName instead of TargetUserName. You can see more details about how the filter works in the XML view ofan event. Simply open the event properties, go to the Details tab, and choose the XML View option, as Figure 13 shows. The full code is shown in Figure 14.You can use the data from this event in the action. To allow the EventData parameter to pass the MemberName to the action, you need to add the code atcallout B in Listing 1 to the exported XML file, just before the line.
Figure 13: Local Group Added task in XML view
You can now use the $(MemberName) variable in an action. The following code displays this variable in the message box:
The $(MemberName) local group has been added.
When you've modified and saved the XML, delete the original task from Task Scheduler. You can then import the modified XML. In the right pane of the TaskScheduler window, under Actions, click Import Task. Your custom task is now ready to go!
More Than Capable
Through the manipulation of triggers, actions, and events, Server 2008 Task Scheduler offers more than ample flexibility to manage the most mundane oftasks to the most intricate. Moreover, most properties are readily available via the Task Scheduler Wizard. You can achieve more fine-grained controlthrough the Scheduled Task API and XML schema.
Listing 1: XML Code to Trigger Event on Specific Security Group Name and to Pass MemberName to Task
Action true *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4732]]# BEGIN CALLOUT Aand *[EventData[Data[@Name="TargetUserName"]=?SECURE NETWORKS?]]# END CALLOUT A # BEGIN CALLOUT B Event/EventData/Data[@Name='MemberName'] # END CALLOUT B
Read more about:
MicrosoftAbout the Author
You May Also Like