1. Get your script ready
Surprising as it might sound, your script might actually not be ready to run in a scheduled task as is. This happens if it uses cmdlets from a particular PowerShell module or snapin, and it worked for you interactively because you used a specialized shell (e.g. Exchange Management Shell) or a tool like PowerGUI Script Editor which loads the modules for you.
If you indeed are using using any non-default cmdlets, simply add Add-PSSnapin or Import-Module to the beginning of the script. For example:
2. Schedule the task
To schedule a task simply start Windows Task Scheduler and schedule powershell.exe executable passing the script execution command as a parameter. The -Fileparameter is the default one so simply specifying the script path as the argument would work in a lot of cases:
You can find powershell.exe in your system32\WindowsPowerShell\v1.0 folder.
4. Report task success or failure
If you want your script to report success or failure (or some sort of other numerical result) simply use the exit keyword in the script to pass the value, e.g.:
Then your Windows Task Scheduler will show the value in the Last Run Result (you might need to hit F5 to refresh the column in the task scheduler):
3. Passing parameters
If you need to pass parameters things get a little trickier. Say, you have a script which adds two numbers:
“Advanced calculations ahead”
exit $a + $b
To pass the numbers as parameters, you would want to use powershell.exe
-Command instead of powershell.exe
-File. This -Command argument will then have the script invocation operator &, path to the script, and the parameters. E.g.:
Program: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe Add argument (optional): -Command "& c:\scripts\hello.ps1 -a 2 -b 3"
If you want to also get your exit code from the script, you would need to re-transmit that by adding exit $LASTEXITCODE to the command (I learnt this tip from MoW). E.g.
Program: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe Add argument (optional): -Command "& c:\scripts\hello.ps1 -a 2 -b 3; exit $LASTEXITCODE"