1

I'm working on a script and want to check, if a taskname is existing. It looks so far like this:

try {
    Get-ScheduledTaskInfo -TaskName "taskname"
}
catch {
    echo "doesn't exist"
}

When I run the code, it prints me the error message and not "doesn't exist":

PS C:\Windows\system32> try {
    Get-ScheduledTaskInfo -TaskName "taskname"
}
catch {
    echo "doesn't exist"
}
Get-ScheduledTaskInfo : The system cannot find the file specified.
At line:2 char:5
+     Get-ScheduledTaskInfo -TaskName "taskname"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Get-ScheduledTaskInfo], CimException
    + FullyQualifiedErrorId : HRESULT 0x80070002,Get-ScheduledTaskInfo

Does anybody has an idea why the catch phrase is not triggered?

Thanks for any help!

Best regards

Paul
  • 15
  • 1
  • 5

2 Answers2

6

try/catch only catches terminating errors:

Use Try, Catch, and Finally blocks to respond to or handle terminating errors in scripts

Use -ErrorAction Stop to turn your non-terminating error into a terminating error:

Get-ScheduledTaskInfo -TaskName "taskname" -ErrorAction Stop
G42
  • 9,791
  • 2
  • 19
  • 34
0

You can set global variable parameter $ErrorActionPreference to stop (détail : here). Not necessary to put -Erroraction on all commands with this method ;)

$ErrorActionPreference= "Stop"

try {
    Get-ScheduledTaskInfo -TaskName "taskname"
}
catch {
    echo "doesn't exist"
}
Esperento57
  • 16,521
  • 3
  • 39
  • 45