# ジョブ: 最小構成 (Windows)

**想定読者:** Windowsエンドポイントへカスタム実行ファイルをデプロイする統合担当者。

本例では、Windows向けの最も単純で有効なジョブJSONを示します。インターバルスケジュールで1つのタスクを実行し、エージェントのサービスアカウントで動かし、`KeeperLogger` へのログパブリッシュを許可する構成です。デプロイ前にプレースホルダを実際の値に置き換え、出発点としてご利用ください。

## ジョブのJSON <a href="#the-job-json" id="the-job-json"></a>

```json
{
  "id": "my-tool",
  "name": "My Tool",
  "description": "Runs MyTool on a 60-minute interval.",
  "enabled": true,

  "schedule": {
    "intervalMinutes": 60
  },

  "osFilter": {
    "windows": true,
    "linux": false,
    "macOS": false
  },

  "mqttTopics": {
    "allowedPublications": ["KeeperLogger"],
    "allowedSubscriptions": []
  },

  "parameters": [],

  "tasks": [
    {
      "id": "run-tool",
      "name": "Run tool",
      "ExecutionType": "Service",
      "command": "MyTool",
      "executablePath": "C:\\Program Files\\KeeperPrivilegeManager\\Jobs\\bin\\MyTool\\MyTool.exe",
      "arguments": "--keeper-api-base={KeeperApiBaseUrl}",
      "timeoutSeconds": 3600,
      "continueOnFailure": false,
      "scriptType": "Auto"
    }
  ]
}
```

## 変更する箇所 <a href="#what-to-change" id="what-to-change"></a>

<table><thead><tr><th width="237.333251953125">フィールド</th><th>内容</th></tr></thead><tbody><tr><td><code>id</code></td><td>本ジョブを一意に識別する文字列。ハイフンを使い、アンダースコアは使いません。ファイル名は <code>id</code> と一致させます (例: <code>"id": "my-tool"</code> のときは <code>my-tool.json</code>)。</td></tr><tr><td><code>name</code></td><td>ログや管理画面に表示する名称</td></tr><tr><td><code>description</code></td><td>任意。後からデプロイを保守する担当者向けの注記として有用</td></tr><tr><td><code>schedule.intervalMinutes</code></td><td>実行間隔 (分)。<code>60</code> は1時間ごと。直前の実行が終わってから次回実行が始まるまでの待ち時間であり、時刻に揃えた周期ではありません。Cronやカレンダー方式の代替は、[スケジュールオプション](../custom-job-guide.md#schedule-options)をご参照ください。</td></tr><tr><td><code>tasks[0].command</code></td><td>パスや拡張子なしの実行ファイル名。エージェントは <code>Jobs\bin\{command}\{command}.exe</code> を自動解決</td></tr><tr><td><code>tasks[0].executablePath</code></td><td>エンドポイント上の実行ファイルのフルパス。例中の <code>MyTool</code> を実際の実行ファイル名に置き換え</td></tr><tr><td><code>tasks[0].arguments</code></td><td>実行ファイルが受け付けるフラグ。<code>{KeeperApiBaseUrl}</code> は削除せず残す。エージェントが実行時にローカルのHTTPS APIベースURLへ差し替え、実行ファイルからプラグイン設定APIを呼び出せるようにする</td></tr><tr><td><code>tasks[0].timeoutSeconds</code></td><td>エージェントがタスクを強制終了するまでの最大実行時間。<code>3600</code> は1時間。ツールに合わせた値を指定</td></tr></tbody></table>

`osFilter`、`mqttTopics`、`ExecutionType`、`continueOnFailure`、`scriptType` は、標準的なWindows向けバックグラウンドタスクでは、本例どおりのままにしてください。

## 動作の要点 <a href="#how-this-works" id="how-this-works"></a>

**`osFilter`** により、このジョブはWindowsエンドポイントでのみ実行されます。異種OSが混在するフリートへ配布した場合、LinuxおよびmacOS上のエージェントはこのジョブをスキップします。バリデータも、一致しないプラットフォームではバイナリ存在チェックを行わないため、Linux用パスを用意しなくてもWindowsマシンから本ジョブを登録できます。

**`ExecutionType: Service`** のとき、タスクはエージェントのサービスアカウントで実行されます。マシン全体へのアクセスが必要で対話ユーザーセッションは不要なバックグラウンドツール向けの設定です。起動直後にプロセスがエージェントの起動済みプロセス登録簿へ登録されるため、証明書チェックなしでMQTTやプラグイン設定へアクセスできます。

**`mqttTopics.allowedPublications`** は、`KeeperLogger` トピックへのパブリッシュをタスクに許可する設定です。MQTTブローカーはこの一覧に基づきパブリッシュを制御します。許可されていないトピックへは、ブローカーへの接続に成功していてもパブリッシュは拒否されます。MQTTへ一切パブリッシュしないツールなら `mqttTopics` ブロックごと省略できますが、その場合エージェントは環境変数 `KEEPER_JOB_ID` および `KEEPER_JOB_NAME` を注入しません。

**`{KeeperApiBaseUrl}`** は、実行時にエージェントがローカルのHTTPS APIベースURL (通常は `https://127.0.0.1:6889`) へ差し替えます。実行ファイルはコマンドライン引数からこれを読み取り、`GET /api/PluginSettings/KeeperPrivilegeManager` を呼び出してMQTTブローカーアドレスを取得します。

## デプロイ前に <a href="#before-you-deploy" id="before-you-deploy"></a>

1. **先にバイナリをデプロイする:** ジョブを登録する前に、エンドポイントの `executablePath` に `MyTool.exe` を配置します。バリデータは `POST /api/Jobs` の呼び出し時点でバイナリの存在を確認します。
2. **バイナリのパスを確認する:** Windowsでのエージェントのデフォルトインストールルートは `C:\Program Files\KeeperPrivilegeManager` です。別ルートで展開している場合は `executablePath` を合わせて更新します。
3. **ファイル名は `{id}.json` にする:** `id` フィールドを変えた場合はファイル名も一致させます。 `"id": "my-tool"` のジョブは `my-tool.json` として保存します。

## デプロイ <a href="#deploy" id="deploy"></a>

保存前に、稼働中のエージェントに対してJSONを検証します。

```powershell
Invoke-RestMethod -Method Post `
  -Uri "https://127.0.0.1:6889/api/Jobs/validate" `
  -ContentType "application/json" `
  -Certificate $adminClientCert `
  -Body (Get-Content -Raw .\my-tool.json)
```

続いてジョブを作成します。

```powershell
Invoke-RestMethod -Method Post `
  -Uri "https://127.0.0.1:6889/api/Jobs" `
  -ContentType "application/json" `
  -Certificate $adminClientCert `
  -Body (Get-Content -Raw .\my-tool.json)
```

手動トリガーで動作を確認します。

```powershell
Invoke-RestMethod -Method Post `
  -Uri "https://127.0.0.1:6889/api/Jobs/my-tool/trigger" `
  -ContentType "application/json" `
  -Certificate $adminClientCert `
  -Body "{}"
```

フリート全体への展開では、各エンドポイントでAPIを直接呼び出すのではなく、Keeper管理コンソール経由の `JobUpdate` ポリシーを使用してください。現行のポリシースキーマはKeeper管理者にお問い合わせください。


---

# 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/integrations/examples/job-minimal-windows.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.
