Adam The Automator

スケジュールされたタスクをたくさん作成するか、スケジュールされたタ もしそうなら、あなたは運がいいです。 この記事では、PowerShellを使用してスケジュールされたタスクを管理する方法を学習します。

単純なアクションを実行するスケジュールされたタスクは、タスクスケジューラアプリインターフェイス(GUI)を使用して繰り返すのに十分な速 しかし、システム管理者や開発者は、複数のスケジュール、トリガー、または引数を使用して、より複雑なタスクを展開する必要がある場合があります。幸いなことに、PowerShellを使用してスケジュールされたタスクを作成および管理できます。 PowerShellを使用したスケジュールされたタスクの管理は、Windowsに組み込まれているScheduledTasksモジュールを使用することで可能になります。

目次

前提条件

これは学習によるタイプの記事なので、いくつかの前提条件がありますので、従うことができます。 PowerShellを使用してPowerShellスケジュールされたタスクを作成するための要件を次に示します。

  • この記事の例では、Windows10を使用しています。 しかし、Windows Server2012以降でも同じことができます。
  • Windows PowerShell5.1またはPowerShell7。Visual Studio Code、Notepad++、Windows PowerShell ISEなどのスクリプトエディタがある場合に役立ちます。

新しいスケジュールされたタスクを作成する

スケジュールされたタスクを動作させるには、アクションとトリガーの二つのコンポーネ セキュリティコンテキストと関連する一連の設定を追加することは任意です。 理解を深めるために、以下の各スケジュールされたタスクコンポーネントの簡単な説明を参照してください。

  • Action–スケジュールされたタスクによって実行さ アクションは、通常、プログラムまたはスクリプトを実行することです。 スケジュールされたタスクには、複数のアクションを含めることができます。
  • Trigger–スケジュールされたタスクが実行されるタイミングを制御します。 トリガーは、毎日または時間ごとの繰り返しのスケジュールを設定するなど、時間ベースにすることができます。 トリガーは、コンピュータの起動、ユーザーのログイン、ログに記録されたイベントなどの検出されたアクティビティに基づいてタスクを実行するアクティ
  • Principal–スケジュールされたタスクの実行に使用されるセキュリティコンテキストを制御します。 特に、プリンシパルには、スケジュールされたタスクで使用されるユーザーアカウントと必要な権限が含まれます。
  • 設定–スケジュールされたタスクの動作をどのように制御するオプションと条件のセットです。 例として、タスクが使用されていない日数が連続した後に削除されるようにタスクをカスタマイズできます。

スケジュールされたタスクの作成中に、プリンシパルと設定は明示的に必要ではありません。 代わりにデフォルト値が使用されます。

タスクアクションの作成

スケジュールされたタスクに何かをさせたい場合は、新しいタスクアクションを作成します。 この例では、PowerShellを呼び出すタスクを作成します。exeを実行し、スクリプトを実行します。 スクリプトエディタを準備してください。p>

以下のスクリプトはランダムな例に過ぎず、使用する必要はないことに注意してください。 必要に応じて任意のスクリプトを使用できます。 ただし、以下のスクリプトを使用すると、スケジュールされたタスクが機能したかどうかを確認できる簡単に検証可能な結果が作成されます。

以下のスクリプト例は、実行されると、アプリケーションイベントログから最新の上位10件のイベントを取得します。 次に、イベントを新しいXMLファイルにエクスポートします。c:\temp フォルダ。 以下のコードをコピーし、スクリプトエディタに貼り付け、ファイル名Get-LatestAppLog.ps1を任意のフォルダに保存します。以下のコードは、New-ScheduledTaskAction$taskActionpowershell.exe実行可能ファイルを呼び出し、引数を渡して実行します。C:\scripts\Get-LatestAppLog.ps1.

上記のコマンドをコピーし、PowerShellで実行します。 $taskAction変数の結果のオブジェクトは、以下のスクリーンショットのようになります。

新しいスケジュールされたタスクアクションの作成

トリガーの追加

タスクアクション逃げろ トリガーの作成に使用するコマンドレットは、New-ScheduledTaskTriggerコマンドレットです。 以下のコマンドは、毎日午後3時に実行するトリガーを作成します。 PowerShellでコードをコピーして実行します。

# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger

$tasktrigger変数の結果のオブジェクトは、下の画像と同じようになります。

トリガーの作成(毎日午前3時)

タスクの登録

これまで、新しいスケジュールされたタスクを作成するための基本要件を作成しました。 次のステップは、スケジュールされたタスクを作成し、システムに登録することです。以下のコードは、Register-ScheduledTask-Action$taskAction-Trigger$taskTrigger変数の内容を渡すために必要です。上記のコードをコピーし、PowerShellで実行します。 その結果、以下に示すように、新しいスケジュールされたタスクが登録されます。

新しいスケジュールされたタスクの登録

タスクの実行

スケジュールされたタスクを作成した後、スケジュールされたタスクがシステムに存在することを確認する必要があります。 タスクスケジューラを開き、リストからスケジュールされたタスクを見つけます。 リストに登録されたタスクが表示されます。

タスクスケジューラアプリに表示される新しいスケジュールされたタスク

以下のPowerShellコマンドを実行して、登録されたスケジュールされたタスクが存在することを確認することもできます。p>

Get-ScheduledTaskInfo -TaskName ExportAppLog

以下の結果のスクリーンショットのように、同様の出力が表示されるはずです。

スケジュールされたタスク情報を取得します。最後に、新しいスケジュールされたタスクは、これまでに行ったことが成功したかどうかを判断するために作業している必要があります。 スケジュールされたタスクをテストするには、次の実行スケジュールを待つか、以下のコマンドを使用して手動でトリガーします。p>

Start-ScheduledTask -TaskName ExportAppLog

コードを実行すると、以下に示すものと同様の結果が表示されます。 ご覧のように、コードを実行するとXMLファイルが作成され、スケジュールされたタスクが期待どおりに機能したことを示します。

スケジュールされたタスクを実行する

既存のスケジュールされたタスクを更新する

スケジュールされたタスクを作成した後、それのいくつかの側面は、ある時点で更新する必要があるかもしれません。 おそらく、あなたはそれが時間前に実行するか、スクリプトファイルの場所を変更したいです。 これらは、スケジュールされたタスクへの変更の一部であり、必要になる可能性があります。

次のセクションでは、PowerShellを使用して既存の登録済みスケジュールされたタスクを変更する方法を学習します。

ユーザーアカウント、セキュリティオプション、および互換性設定の変更

前のセクションでは、スケジュールされたタスクは、それを作成したのと同じユーザーアカウントコンテキストで実行されます。 たとえば、サービスアカウントなどの別のユーザーアカウントを使用してタスクを実行する必要がある場合はどうなりますか。

この例では、スケジュールされたタスクのセキュリティオプションを以下の設定に変更します。

  • スケジュールされたタスクを実行するには、ユーザーアカウントを変更する必要があります。
  • ユーザーがログインしているかどうかにかかわらず、タスクの実行を許可します。
  • 最高レベルの特権で実行します。
  • タスクの互換性をWindows10に設定します。以下のコードの最初の行は、新しいユーザーアカウントを持つプリンシパルオブジェクトを作成し、タスクを最高の権限で実行するように設定します。 必要に応じて、-UserIDパラメータの値を変更してください。 2行目は、Windows10とのタスクの互換性を構成します。最後に、3行目はExportAppLogthe $taskPrincipal$taskSettings変数に格納されている値を使用して更新します。 以下のコードをコピーし、PowerShellで実行します。p>
    # Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings

    -CompatibilityWin8です。 混乱させてはいけない。 MicrosoftはWindows8以降、「最新」バージョンの選択を更新していないようです。 それにもかかわらず、Win8値を指定すると、Windows10との互換性が得られます。次に、次のコマンドはSet-ScheduledTaskExportAppLog-Passwordパラメータのパスワード値を変更してください。

    # Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'

    上記のコマンドを実行すると、スケジュールされたタスクが更新されます。 スケジュールされたタスクを確認すると、セキュリティオプションが変更されたことを確認できます。

    セキュリティオプション、ユーザーアカウント、および互換性設定

    トリガーの変更

    たぶん、いくつかの操作上の調整やリソースの最適化のために。 いずれの場合でも、PowerShellを使用して、スケジュールされたタスクにトリガーを置き換えたり追加したりすることもできます。

    現在、スケジュールされたタスクExportAppLogは毎日午後3時にトリガーされます。 トリガースケジュールを毎日午後4時30分と午前1時00分に変更する必要があるとします。 最初に、2つのスケジュールに対して2つの新しいタスクトリガーオブジェクトを作成する必要があります。

    $taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM

    次に、スケジュールされたタスクのトリガーを更新するには、以下のコマンドを使用します。 -Trigger$taskTrigger1$taskTrigger2-User-Passwordの値を再度指定する必要があp>

    Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'

    以下は、コードを実行した後の期待される結果です。

    スケジュールされたタスクを複数のトリガーで更新する

    以下に示すように、ExportAppLogスケジュールされたタスクに

    複数のトリガーを持つスケジュールされたタスク

    スケジュールされたタスクの削除と復元

    スケジュールされたタ ある時点で、スケジュールされたタスクのハウスキーピングを実行する必要がある場合があります。 このセクションでは、PowerShellでスケジュールされたタスクの削除を管理する方法を学習します。

    スケジュールされたタスクのバックアップ

    スケジュールされたタスクを削除する前に、まずバックアップを作成することをお勧めします。 スケジュールされたタスクをバックアップすると、物事がうまくいかないときのための復元ポイ

    スケジュールされたタスクのバックアップを作成するための組み込みのコマンドレットはありません。 しかし、PowerShellのすべてがオブジェクトであり、オブジェクトをファイルにエクスポートすることは可能です。 オブジェクトをファイルにバックアップする必要がある場合は、Import-Clixmlコマンドレットを使用します。

    次のコード例は、ExportAppLogという名前のスケジュールされたタスクをファイルにエクスポートします。 あなたの好みに応じてファイル名と場所を変更することができます。

    次の画像は、期待される出力XMLファイルを表示します。

    スケジュールされたタスクのバックアップ

    スケジュールされたタスクの削除

    スケジュールされたタスクのバックアップを保護したら、そのスケジュールされたタスクを削除できるようになりました….. 以下のコードは、ExportAppLogという名前のスケジュールされたタスクを削除します。 以下のコードをコピーし、PowerShellで実行します。

    # Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false

    必須ではありませんが、スケジュールされたタスクの削除の結果を確認することは常に良いことです。 以下のコマンドを使用して、スケジュールされたタスクが存在しないことを確認します。

    Get-ScheduledTask -TaskName 'ExportAppLog'

    スケジュールされたタスクが存在しなくなった場合は、以下に示すような出力を取得する必要があります。

    スケジュールされたタスクがもはや存在しないかどうかのチェック

    スケジュールされたタスクのバックアップは行われないことに注意してくださいパスワードは含まれません。p>

    スケジュールされたタスクを復元する

    スケジュールされたタスクを削除したので、あなたはすることになっていなかったこと 今はどうする? このような状況では、バックアップの概念をさらに理解できます。

    PowerShellでXMLバックアップファイルを使用して、スケジュールされたタスクを再作成できます。 そして、ここでは、復元を行う方法です。

    まず、XMLバックアップをPowerShellセッションにインポートします。 以下のコードは、ファイルをインポートしますc:\temp\ExportAppLog…..xml。 その結果、$stBackupLogOnTypeInteractiveにリセットします。 LogonType値をリセットすることは、スケジュールされたタスクの復元を成功させるために重要です。

    # Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'

    次のステップは、新しいスケジュールされたタスクオブジェクトを作成することです。 次のコードは、新しいスケジュールされたタスクを作成します。 $restoreTask変数は、結果のスケジュールされたタスクオブジェクトを格納します。

    パラメータに渡される値は、backupからインポートされた値であることがわかります。 インポートされた値は$restoreTaskActionTriggerSettingsPrincipal.

    スケジュールされたタスクオブジェクトを作成した後、スケジュー 復元されたスケジュールされたタスクを登録するには、以下のコードを使用します。この例では、タスク名は’Exportapplog_Restored’です。’InputObject$restoreTaskuserpassword値を使用してください。これで、コードは完了です。

    これで、コードは完了です。

    owerShellでコードをコピーして実行し、削除されたスケジュールされたタスクを復元します。 以下のスクリーンショットは、コードを実行した後に期待される出力を示しています。

    XMLバックアップから削除されたスケジュールされたタスクを復元する

    スケジュールされたタスク 以下のスクリーンショットは、復元されたスケジュールされたタスクを示しています。

    復元されたスケジュールされたタスクを見つける

    概要

    Windowsのスケジュールされたタスク機能は、タ 最も基本的なタスクからより複雑なタスクを作成できます。 設定とオプションは柔軟です。

    PowerShell Scheduled Tasksモジュールを使用すると、PowerShellコマンドを使用してスケジュールされたタスクを設定できます。 このモジュールは、ローカルコンピュータとリモートコンピュータ上でプログラム的にスケジュールされたタスクを作成して展開する機会と手段を提供します。

    MicrosoftはScheduledTasksモジュールを更新しておらず、一部の高度な設定はPowerShellコマンドレットとして簡単に公開されていません。 一例として、”on workstation unlock”のトリガーを作成することがあります。”しかし、既存のタスクスケジューラCIMクラスを使用することで、これらの高度な設定を実現できます。

    それにもかかわらず、PowerShell Scheduled Tasksモジュールは、PowerShellの武器に追加できる優れた有能なツールです。

コメントを残す

メールアドレスが公開されることはありません。