web-dev-qa-db-ja.com

スケジュールされたタスクがPowerShellに存在するかどうかを確認するためのテスト

以下のコードが機能しない理由がわかりません。

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スクリプトを経由せずにシェルから、名前を正しく表示します。

13
hax0r_n_code

二重引用符で囲まれた文字列で使用すると、変数の評価は句読点で停止します。 $()を使用して、次のように文字列内の部分式を示すことができます。

"TASK: $($task.name)"

次に、PowerShellは括弧内の式を評価し、結果を使用して文字列を展開します

4

タスクが存在しない場合にGet-ScheduledTaskでエラーが発生するのを防ぐために、次のことを検討することをお勧めします。

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

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

これを試してください:

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

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

V3.0を使用している場合は、Get-ScheduledTaskを使用してこれを行うことができます。例えば、

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

次に、$ taskの値を確認する必要があります。

4
Rick Rainey

次のコードを使用して、スケジュールされたタスクがPowerShellに存在するかどうかをテストできます。

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