以下のコードが機能しない理由がわかりません。
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
スクリプトを経由せずにシェルから、名前を正しく表示します。
二重引用符で囲まれた文字列で使用すると、変数の評価は句読点で停止します。 $()
を使用して、次のように文字列内の部分式を示すことができます。
"TASK: $($task.name)"
次に、PowerShellは括弧内の式を評価し、結果を使用して文字列を展開します
タスクが存在しない場合にGet-ScheduledTaskでエラーが発生するのを防ぐために、次のことを検討することをお勧めします。
$taskName = "FireFoxMaint"
$taskExists = Get-ScheduledTask | Where-Object {$_.TaskName -like $taskName }
if($taskExists) {
# Do whatever
} else {
# Do whatever
}
これを試してください:
Get-ScheduledTask -TaskName "Task Name" -ErrorAction SilentlyContinue -OutVariable task
if (!$task) {
# task does not exist, otherwise $task contains the task object
}
V3.0を使用している場合は、Get-ScheduledTaskを使用してこれを行うことができます。例えば、
$task = Get-ScheduledTask -TaskName "FirefoxMaint" -TaskPath \
次に、$ taskの値を確認する必要があります。
次のコードを使用して、スケジュールされたタスクがPowerShellに存在するかどうかをテストできます。
if(Get-ScheduledTask FirefoxMaint -ErrorAction Ignore) { #found } else { #not found}