16

我不知道为什么下面的代码不起作用:

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

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

4

5 回答 5

32

为了防止在任务不存在的情况下 Get-ScheduledTask 出错 - 您可能需要考虑这样做:

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

if($taskExists) {
   # Do whatever 
} else {
   # Do whatever
}
于 2015-01-13T10:21:41.957 回答
17

试试这个:

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

if (!$task) {
    # task does not exist, otherwise $task contains the task object
}
于 2015-01-23T13:55:24.290 回答
5

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

"TASK: $($task.name)"

然后,PowerShell 将计算括号内的表达式并使用结果展开字符串

于 2013-07-17T15:24:35.563 回答
4

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

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

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

于 2013-07-17T18:25:19.827 回答
2

您可以使用以下代码来测试 PowerShell 中是否存在计划任务:

if(Get-ScheduledTask FirefoxMaint -ErrorAction Ignore) { #found } else { #not found}
于 2018-10-10T16:00:32.973 回答