# ポリシーのコントロール (ジョブの作成、変更、削除)

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2Fplx6vEekek24CWRmMWRq%2Fimage.png?alt=media&#x26;token=6ca319a2-282f-40fb-a16c-a2a68896d2e1" alt=""><figcaption></figcaption></figure>

**対象読者:** IT管理者向けです。ジョブディレクトリ内の**ファイル**、または**ローカル管理API**を使ってジョブを**作成**、**変更**、**削除**する手順を説明します。

***

### 概要 <a href="#overview" id="overview"></a>

* **作成** — JobsディレクトリにJSONファイルを置く、リクエスト本文にジョブJSONを入れて**POST /api/Jobs**を呼ぶ、または**JobUpdate**ポリシーで **Action: "Add"** を使う。
* **変更** — ジョブJSONファイルを編集して保存 (ローダーが自動検知する場合あり)、更新済みJSONで**PUT /api/Jobs/{jobId}を呼ぶ、またはJobUpdate**ポリシーで **Action: "Update"** を使う。
* **削除** — Jobsディレクトリからジョブファイルを削除する、**DELETE /api/Jobs/{jobId}** を呼ぶ、または**JobUpdate**ポリシーで **Action: "Delete"** を使う。

ジョブの**id**は一意である必要があります。ファイルベースの場合、**ファイル名**は `{id}.json` である必要があります。[ジョブ: 定義と形式](/keeperpam/jp/endpoint-privilege-manager/reference/jobs-definition-and-format.md)および[プラグインとジョブの登録](/keeperpam/jp/endpoint-privilege-manager/reference/plugin-and-job-registration.md)をご参照ください。

***

### ジョブの作成 <a href="#create-a-job" id="create-a-job"></a>

#### 方法 1: ファイルベース (新しい JSON ファイルを追加)

1. **ジョブid**を決めます (例: `my-maintenance-job`)。ファイル名は `my-maintenance-job.json` になります。
2. 少なくとも `id`、`name`、`enabled`、および `events` または `schedule` (または両方)、`tasks` を含む**ジョブJSONを作成**します。最小構成の例:

   ```
   {
     "id": "my-maintenance-job",
     "name": "My maintenance job",
     "description": "Runs a script every hour",
     "enabled": true,
     "priority": 5,
     "schedule": {
       "intervalMinutes": 60
     },
     "events": [],
     "parameters": [],
     "tasks": [
       {
         "id": "run-script",
         "name": "Run script",
         "executionType": "Service",
         "command": "MyScript",
         "executablePath": "{jobroot}/bin/MyScript.exe",
         "arguments": ""
       }
     ]
   }
   ```
3. **ファイルを保存**します。アプリケーションルート配下の `Jobs/my-maintenance-job.json` (例: `C:\Program Files\KeeperPrivilegeManager\Jobs\my-maintenance-job.json`)。JSON内の**id**がファイル名 (`.json`なし) と一致していることを確認します。
4. **ジョブの読み込み** — ジョブサービスが Jobs ディレクトリを自動再スキャンする場合があります。そうでなければエージェントを再起動するか (製品が対応していれば) リロードをトリガーします。スケジュールまたはイベントに従いジョブが実行されます。

#### 方法 2: API (POST)

1. **事前検証 (任意):**\
   `POST /api/Jobs/validate`\
   本文: 完全なジョブ JSON。検証エラーを修正します。
2. **ジョブを作成:**\
   `POST /api/Jobs`\
   本文: 上記と同じ構造の完全なジョブ JSON。\
   認証: **Admin** (昇格済みスクリプトから、または必要な証明書で)。
3. サービスがジョブを登録します。実装によっては JSON を Jobs ディレクトリへ書き出すこともあります。その後、トリガーおよび実行でジョブが利用可能になります。

**例 (PowerShell、概念上):**

```
$job = @{
  id = "my-maintenance-job"
  name = "My maintenance job"
  enabled = $true
  schedule = @{ intervalMinutes = 60 }
  events = @()
  parameters = @()
  tasks = @(
    @{
      id = "run-script"
      executionType = "Service"
      command = "MyScript"
      executablePath = "{jobroot}/bin/MyScript.exe"
      arguments = ""
    }
  )
} | ConvertTo-Json -Depth 10

Invoke-RestMethod -Method Post -Uri "https://127.0.0.1:6889/api/Jobs" -Body $job -ContentType "application/json" -SkipCertificateCheck
```

***

### ジョブの変更 <a href="#modify-a-job" id="modify-a-job"></a>

#### 方法 1: ファイルベース (JSON ファイルを編集)

1. ジョブファイル (例: `Jobs/my-maintenance-job.json`) をエディタで**開く**。
2. 必要なフィールドを**変更**する (例: `schedule.intervalMinutes`、`tasks`、`enabled`、`name`)。**id**は同じにし、ファイル名は `{id}.json`のままにする。
3. **保存**する。ジョブローダーが自動で変更を取り込む場合があります。そうでなければエージェントの再起動またはジョブのリロード (利用可能な場合) を行います。
4. **任意** — 製品がジョブ定義をキャッシュする場合、**POST /api/PluginSettings/revert-all**または文書化された「ジョブのリロード」手順を実行し、実行中のサービスが新しい定義を使うようにします。

#### 方法 2: API (PUT)

1. **現在のジョブを取得 (任意):**\
   `GET /api/Jobs/my-maintenance-job`\
   で完全な定義を確認。
2. JSON を**編集**する (スケジュールの変更、タスクの追加/削除、`enabled` を `false` にするなど)。
3. **更新:**\
   `PUT /api/Jobs/my-maintenance-job`\
   本文: **完全な**更新後ジョブJSON。\
   認証: **Admin**。
4. サービスがジョブを更新します。以降の実行は新しい定義を使います。

**例 (PowerShell、概念上):**

```
$updated = Invoke-RestMethod -Method Get -Uri "https://127.0.0.1:6889/api/Jobs/my-maintenance-job" -SkipCertificateCheck
$updated.schedule.intervalMinutes = 30
$updated | ConvertTo-Json -Depth 10 | Invoke-RestMethod -Method Put -Uri "https://127.0.0.1:6889/api/Jobs/my-maintenance-job" -ContentType "application/json" -SkipCertificateCheck
```

***

### ジョブの削除 <a href="#delete-a-job" id="delete-a-job"></a>

#### 方法 1: ファイルベース (ファイルを削除)

1. アプリケーションルートから `Jobs/{job-id}.json` (例: `Jobs/my-maintenance-job.json`) を**削除**する。
2. ファイルがなくなると (再スキャン後) ジョブサービスが実行を止める場合があります。そうでなければエージェントを再起動し、ジョブの登録を解除する。

#### 方法 2: API (DELETE)

1. **ジョブを削除:**\
   `DELETE /api/Jobs/my-maintenance-job`\
   認証: **Admin**。
2. サービスがジョブの登録を解除します。実装によっては Jobs ディレクトリからファイルも削除します。ジョブは以降実行されません。

**例 (PowerShell、概念上):**

```
Invoke-RestMethod -Method Delete -Uri "https://127.0.0.1:6889/api/Jobs/my-maintenance-job" -SkipCertificateCheck
```

***

### ポリシーでジョブを作成・変更・削除する (JobUpdate) <a href="#create-modify-or-delete-a-job-using-policy-jobupdate" id="create-modify-or-delete-a-job-using-policy-jobupdate"></a>

**JobUpdate**構成ポリシーを使うと、エンドポイント上でジョブを**作成**、**変更**、**削除**できます。ポリシーは追加・更新・削除するジョブを定義し、各エージェント上の**Process Configuration Policies**ジョブがこれらのポリシーを読み、Jobsディレクトリ配下のジョブファイルを書き込みまたは削除します。各マシンでファイルを編集したりAPIを呼ばずに、ダッシュボードまたはポリシーストアからジョブを展開・変更できます。

#### 動作の仕組み

1. **PolicyType**を `"JobUpdate"` とし、**Extension**に以下を含むポリシーを作成します。
   * **JobId** — ジョブ id (例: `my-maintenance-job`)。プロセッサは `Jobs/{JobId}.json` に書き込みまたは削除します。
   * **Action** — `"Add"` (作成)、`"Update"` (変更)、`"Delete"` (削除)。
   * **JobJson** — **Add**および**Update**のときのみ必須。完全なジョブJSON (ファイルまたはAPIと同じ構造)。**Delete**のときは省略。
2. 適切なコレクションまたはマシンへポリシーを展開します (例: **Keeper管理コンソール**またはポリシーストアから)。
3. 各エージェントで**Process Configuration Policies**ジョブが実行されます (スケジュール、または**POST /api/Jobs/{jobId}/run**でトリガー)。すべての**JobUpdate**ポリシーを検出し、それぞれに対応するジョブファイルを `Jobs/` 配下で追加、更新、または削除します。
4. エージェント上のジョブローダーが新規または変更されたファイルを取り込みます (削除後はジョブが見えなくなります)。多くの場合エージェントの再起動は不要です。ジョブ定義をキャッシュする場合は、リロードまたは再起動が必要になることがあります。

#### ポリシーでジョブを作成する (Action: Add)

**Extension**付きの**JobUpdate**ポリシーを作成します。

```
{
  "PolicyId": "deploy-my-maintenance-job",
  "PolicyName": "Deploy my maintenance job",
  "PolicyType": "JobUpdate",
  "Status": "enabled",
  "Extension": {
    "JobId": "my-maintenance-job",
    "Action": "Add",
    "JobJson": {
      "id": "my-maintenance-job",
      "name": "My maintenance job",
      "description": "Runs a script every hour",
      "enabled": true,
      "priority": 5,
      "schedule": { "intervalMinutes": 60 },
      "events": [],
      "parameters": [],
      "tasks": [
        {
          "id": "run-script",
          "name": "Run script",
          "executionType": "Service",
          "command": "MyScript",
          "executablePath": "{jobroot}/bin/MyScript.exe",
          "arguments": ""
        }
      ]
    }
  }
}
```

**JobJson**は上記のような完全なジョブオブジェクトでも、JSONを格納した文字列でも構いません。JobJson内の**id**は**JobId**と一致させます。ポリシーを展開し、エージェントで**Process Configuration Policies**を実行するとジョブファイルが作成されます。

#### ポリシーでジョブを変更する (Action: Update)

同じ**PolicyType** `"JobUpdate"` と**Extension**で**Action**を `"Update"`、同じ**JobId**、**JobJson**に**完全な更新後**のジョブJSON (変更していないフィールドも含む) を設定します。プロセッサはジョブファイル全体を**置換**します。ポリシーを展開してProcess Configuration Policiesを実行するとジョブファイルが更新されます。

#### ポリシーでジョブを削除する (Action: Delete)

**Extension**付きの**JobUpdate**を使います。

```
"Extension": {
  "JobId": "my-maintenance-job",
  "Action": "Delete"
}
```

**Delete**では**JobJson**は不要です。ポリシーを展開してProcess Configuration Policiesを実行すると `Jobs/my-maintenance-job.json` が削除されます。ジョブ**process-configuration-policies**は保護されており、JobUpdateポリシーでは削除できません。

#### まとめ (ポリシー方式)

| アクション  | 拡張 (Extension)                                              | 結果                         |
| ------ | ----------------------------------------------------------- | -------------------------- |
| **作成** | **JobId**、**Action: "Add"**、**JobJson** (完全なジョブ JSON)       | `Jobs/{JobId}.json` を書き込み。 |
| **変更** | **JobId**、**Action: "Update"**、**JobJson** (完全な更新後ジョブ JSON) | `Jobs/{JobId}.json` を上書き。  |
| **削除** | **JobId**、**Action: "Delete"** (JobJson なし)                 | `Jobs/{JobId}.json` を削除。   |

構成ポリシーとプロセッサの実行方法の詳細は、[ポリシーで設定を適用または変更する](/keeperpam/jp/endpoint-privilege-manager/policies/policy-examples/advanced-examples/policy-create-a-policy-to-set-settings.md)をご参照ください。

***

### クイックリファレンス <a href="#quick-reference" id="quick-reference"></a>

| アクション    | ファイルベース                                                   | API                                               | ポリシーによる適用                                                                                           |
| -------- | --------------------------------------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| **作成**   | 完全なジョブJSONで `Jobs/{id}.json` を追加。JSONの `id` をファイル名と一致させる。 | 本文にジョブJSONを入れた**POST /api/Jobs** (Admin)。         | **JobUpdate**ポリシー:**Action "Add"**、**JobId**、**JobJson**。Process Configuration Policiesを実行。         |
| **変更**   | `Jobs/{id}.json` を編集。`id` とファイル名はそのまま。保存。                 | \*\*PUT /api/Jobs/{jobId}\*\*に完全な更新JSON (Admin)。  | **JobUpdate**ポリシー:**Action "Update"**、**JobId**、**JobJson** (完全)。Process Configuration Policiesを実行。 |
| **削除**   | `Jobs/{id}.json` を削除。                                     | **DELETE /api/Jobs/{jobId}** (Admin)。             | **JobUpdate**ポリシー:**Action "Delete"**、**JobId**。Process Configuration Policiesを実行。                  |
| **検証**   | —                                                         | 作成/更新前に本文へジョブJSONを入れた**POST /api/Jobs/validate**。 | —                                                                                                   |
| **1回実行** | —                                                         | **POST /api/Jobs/{jobId}/run** (Admin)。           | —                                                                                                   |

APIには**HTTPS** (例: `https://127.0.0.1:6889`) と**Admin**認証を使います。エンドポイント一覧は[ローカルエンドポイント](/keeperpam/jp/endpoint-privilege-manager/reference/local-endpoints.md)をご参照ください。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/endpoint-privilege-manager/policies/policy-examples/advanced-examples/policy-create-modify-or-delete-job.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
