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

hax*_*ode 12 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
Run Code Online (Sandbox Code Playgroud)

我得到的输出是这样的:

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
Run Code Online (Sandbox Code Playgroud)

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

Joc*_*ick 19

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

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

if($taskExists) {
   # Do whatever 
} else {
   # Do whatever
}
Run Code Online (Sandbox Code Playgroud)


小智 10

试试这个:

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

if (!$task) {
    # task does not exist, otherwise $task contains the task object
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*sen 5

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

"TASK: $($task.name)"
Run Code Online (Sandbox Code Playgroud)

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