测试以查看PowerShell中是否存在计划任务

时间:2013-07-17 15:18:58

标签: powershell foreach scheduled-tasks

我无法弄清楚为什么下面的代码不起作用:

Function createFirefoxTask() {
   $schedule = new-object -com Schedule.Service 
   $schedule.connect() 
   $tasks = $schedule.getfolder("\").gettasks(0)

   foreach ($task in ($tasks | select Name)) {
      echo "TASK: $task.name"
      if($task.equals("FirefoxMaint")) {
         write-output "$task already exists"
         break
      }
   }
} 
createFirefoxTask

我得到的输出是:

FirefoxMaint                                                                          

TASK: @{Name=FirefoxMaint}.name
TASK: @{Name=Task1}.name
TASK: @{Name=Task2}.name
TASK: @{Name=Task3}.name
TASK: @{Name=Task4}.name
TASK: @{Name=Task5}.name

如果我在不通过脚本的情况下从shell回显$task.name,它会正确显示名称。

5 个答案:

答案 0 :(得分:18)

为了防止Get-ScheduledTask出现错误,以防任务不存在 - 您可能需要考虑这样做:

$taskName = "FireFoxMaint"
$taskExists = Get-ScheduledTask | Where-Object {$_.TaskName -like $taskName }

if($taskExists) {
   # Do whatever 
} else {
   # Do whatever
}

答案 1 :(得分:9)

试试这个:

Get-ScheduledTask -TaskName "Task Name" -ErrorAction SilentlyContinue -OutVariable task

if (!$task) {
    # task does not exist, otherwise $task contains the task object
}

答案 2 :(得分:4)

在双引号字符串中使用时,变量评估将在标点符号处停止。您可以使用$()表示字符串中的子表达式,如下所示:

"TASK: $($task.name)"
然后,PowerShell将评估括号内的表达式,并使用结果展开字符串

答案 3 :(得分:4)

如果您使用的是v3.0,则可以使用Get-ScheduledTask执行此操作。 Forexample,

$task = Get-ScheduledTask -TaskName "FirefoxMaint" -TaskPath \

然后,只需要检查$ task的值。

答案 4 :(得分:1)

您可以使用以下代码进行测试,以查看PowerShell中是否存在计划任务:

if(Get-ScheduledTask FirefoxMaint -ErrorAction Ignore) { #found } else { #not found}