我无法弄清楚为什么下面的代码不起作用:
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
,它会正确显示名称。
答案 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}