# KEPM Deployment Commands

### Overview

This section covers all the Keeper Commander commands for managing KEPM agent deployments. Deployments represent agent deployment configurations and provide the tokens needed to install and register KEPM agents on endpoints. These commands allow administrators to create, view, update, and delete deployment configurations.

This section supports the following commands:

[**Deployment List Command**](#deployment-list-command)

[**Deployment Add Command**](#deployment-add-command)

[**Deployment Edit Command**](#deployment-edit-command)

[**Deployment Delete Command**](#deployment-delete-command)

[**Deployment Download Command**](#deployment-download-command)

### Usage

`pedm deployment command [--options]` OR `pedm d command [--options]`

**Alias:** `d`

***

### Deployment List Command

View all KEPM deployments with their details including deployment UID, name, status, creation date, and associated agent count. Useful for monitoring and managing multiple deployment configurations across the organisation.

<details>

<summary>DotNet CLI</summary>

**Command:** `epm-deployment list`&#x20;

**Alias:** `epm-dep list`

**Examples**:

{% code expandable="true" %}

```bash
My Vault > epm-deployment lists
```

{% endcode %}

Get Particular deployment details

**Command:** `epm-deployment view`

**Alias:** `epm-dep view`&#x20;

**Parameters:**

<table><thead><tr><th width="211">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><em>(positional)</em></td><td>Deployment UID or name (case-insensitive).</td></tr><tr><td><code>--name</code></td><td>Alternative: deployment name.</td></tr></tbody></table>

**Example:**

{% code expandable="true" %}

```bash
My Vault > epm-deployment view "My Deployment"
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**Function:**&#x20;

{% code expandable="true" %}

```csharp
IEnumerable<EpmDeployment> allDeployments = plugin.Deployments.GetAll();

// Get a single deployment by UID
EpmDeployment deployment = plugin.Deployments.GetEntity(deploymentUid);
```

{% endcode %}

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Get-KeeperEpmDeploymentList`&#x20;

**Alias**: `kepm-deployment-list`

**Example**:

{% code expandable="true" %}

```ps1
PS > Deployment UID         Name              Disabled Created                Modified            Agent Count
--------------              ----              -------- -------                --------            -----------
hXdaU89PDvdMxhT2oMpmTw     DEP 1                False    2026-05-04 12:13:10 2026-05-04 12:13:10           2
evd5VHCeD66VgjrGLQWj9A     DEP 2                False    2026-04-30 10:32:55 2026-04-30 10:32:55           0
VXj_WRD8Lg9JXyMDHnFODA     DEP 3                False    2026-04-22 08:40:16 2026-04-30 13:39:43           0
vvpOO8FihzHCeg4CZ-_bwA     DEP 4                False    2026-03-17 07:17:39 2026-03-17 07:17:39           0
NXpB2cmMj1D1q30U5taghg     DEP 5                False    2026-03-12 15:32:44 2026-03-12 15:32:44           0
```

{% endcode %}

Get Particular Deployment Full details&#x20;

**Command:** `Get-KeeperEpmDeployment`

**Alias:** `kepm-deployment-view`&#x20;

**Parameter**:

<table><thead><tr><th width="223">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>-DeploymentUidOrName</code></td><td>Deployment UID or deployment name (case-insensitive).</td></tr></tbody></table>

**Example**:

{% code expandable="true" %}

```ps1
PS > Get-KeeperEpmDeployment  hXdaU89PDvdMxhT2oMpmTw
Deployment: DEP 1
  UID: hXdaU89PDvdMxhT2oMpmTw
  Status: Active
  Created: 2026-05-04 12:13:10
  Modified: 2026-05-04 12:13:10
```

{% endcode %}

</details>

<details>

<summary>Python SDK</summary>

**Function:**

```python
from keepersdk.plugins.pedm import admin_plugin

plugin = admin_plugin.PedmPlugin(enterprise_loader)
deployments = plugin.deployments.get_all_entities()
```

</details>

### Deployment Add Command

Create a new KEPM deployment configuration. This command generates a unique deployment token that can be used to install and register KEPM agents on endpoints. The deployment serves as a logical grouping for agents.

<details>

<summary>DotNet CLI</summary>

**Command:** `epm-deployment add`&#x20;

**Alias**: `epm-dep add`&#x20;

**Parameters**:

<table><thead><tr><th width="182.00006103515625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>--name</code></td><td>Deployment display name.</td></tr><tr><td><code>--spiffe-cert</code></td><td>SPIFFE certificate file path (<code>.cer</code>, <code>.der</code>, <code>.pem</code>) or base64url-encoded string.</td></tr><tr><td><code>-f</code>, <code>--force</code></td><td>Allow adding a deployment whose name already exists.</td></tr></tbody></table>

**Example:**

{% code expandable="true" %}

```bash
My Vault> epm-deployment add --name "Test Servers"      
Deployment 'Test Servers' added.
  Added: v1V-I5PrHXwvK82epoP_Yw
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** `ModifyDeployments`

**Example**:

{% code expandable="true" %}

```csharp
public async Task<ModifyStatus> ModifyDeployments(
    IEnumerable<DeploymentDataInput> addDeployments = null,
    IEnumerable<DeploymentDataInput> updateDeployments = null,
    IEnumerable<string> removeDeployments = null)
```

{% endcode %}

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Add-KeeperEpmDeployment`&#x20;

**Alias**: `kepm-deployment-add`&#x20;

**Parameters**:

<table><thead><tr><th width="259">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>-Name</code></td><td>Deployment display name.</td></tr><tr><td><code>-Force</code></td><td>If set, allow adding a deployment whose name already exists.</td></tr></tbody></table>

**Example:**

{% code expandable="true" %}

```ps1
PS > Add-KeeperEpmDeployment -Name "Example Servers"                                     
Deployment 'Example Servers' added.
  Added: QNRf1KWsxDg6YkLxJaZTbA
```

{% endcode %}

</details>

<details>

<summary>Python SDK</summary>

**Function:**

```python
from keepersdk.plugins.pedm import admin_plugin

deployment_name = 'deployment name'
plugin = admin_plugin.PedmPlugin(enterprise_loader)

ec_public_key = crypto.unload_ec_public_key(enterprise_data.enterprise_info.ec_public_key)
agent_info = pedm_shared.DeploymentAgentInformation(hash_key=plugin.agent_key, peer_public_key=ec_public_key)
spiffe_cert = cert.public_bytes(serialization.Encoding.DER)

add_rq = admin_types.AddDeployment(name=deployment_name, spiffe_cert=spiffe_cert, agent_info=agent_info)
response = plugin.modify_deployments(add_deployments=[add_rq])
```

</details>

### Deployment Edit Command

Modify an existing KEPM deployment's settings such as name or enabled/disabled status. This command allows administrators to update deployment configurations without recreating them.

<details>

<summary>DotNet CLI</summary>

**Command:** `epm-deployment update`&#x20;

**Alias**: `epm-dep update`&#x20;

**Parameters**:

<table><thead><tr><th width="211">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><em>(positional)</em></td><td>Deployment UID or name (case-insensitive).</td></tr><tr><td><code>--name</code></td><td>New deployment display name.</td></tr><tr><td><code>--disabled</code></td><td><code>true</code> or <code>false</code> — disable or enable the deployment.</td></tr><tr><td><code>--spiffe-cert</code></td><td>SPIFFE certificate file path (<code>.cer</code>, <code>.der</code>, <code>.pem</code>) or base64url-encoded string.</td></tr></tbody></table>

**Example**:

{% code expandable="true" %}

```bash
My Vault > epm-deployment update "Test Servers" --name "Test1 Servers"      
Deployment 'v1V-I5PrHXwvK82epoP_Yw' updated.
  Updated: v1V-I5PrHXwvK82epoP_Yw
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** `ModifyDeployments`

**Example**:

{% code expandable="true" %}

```csharp
public async Task<ModifyStatus> ModifyDeployments(
    IEnumerable<DeploymentDataInput> addDeployments = null,
    IEnumerable<DeploymentDataInput> updateDeployments = null,
    IEnumerable<string> removeDeployments = null)
```

{% endcode %}

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Update-KeeperEpmDeployment`&#x20;

**Alias**: `kepm-deployment-edit`

**Parameters**:

<table><thead><tr><th width="263.00006103515625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>-DeploymentUidOrName</code></td><td>Deployment UID or deployment name (case-insensitive).</td></tr><tr><td><code>-Name</code></td><td>New deployment display name.</td></tr><tr><td><code>-Enable</code></td><td>Use <code>on</code> or <code>off</code> to enable or disable the deployment.</td></tr></tbody></table>

**Example**:

{% code expandable="true" %}

```ps1
PS > Update-KeeperEpmDeployment -DeploymentUidOrName "Example Servers" -Name "Renamed Deployment"
Deployment 'QNRf1KWsxDg6YkLxJaZTbA' updated.
  Updated: QNRf1KWsxDg6YkLxJaZTbA
```

{% endcode %}

</details>

<details>

<summary>Python SDK</summary>

**Function:**

```python
from keepersdk.plugins.pedm import admin_plugin

deployment_name = 'deployment name'
plugin = admin_plugin.PedmPlugin(enterprise_loader)

deployment = plugin.deployments.get_entity(deployment_name)
spiffe_cert = cert.public_bytes(serialization.Encoding.DER)

name= 'new name'
disable = True ## or false
update_rq = admin_types.UpdateDeployment(
            deployment_uid=deployment.deployment_uid, name=name, disabled=disabled, spiffe_cert=spiffe_cert)
response = plugin.modify_deployments(update_deployments=[update_rq])
```

</details>

### Deployment Delete Command

Remove one or more KEPM deployments from the system. This command permanently deletes deployment configurations and should be used with caution, especially when agents are still associated with the deployment.

<details>

<summary>DotNet CLI</summary>

**Command:** `epm-deployment remove`&#x20;

**Alias**: `epm-dep remove`, `epm-deployment delete`&#x20;

**Parameters**:

<table><thead><tr><th width="168.00006103515625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><em>(positional)</em></td><td>Deployment UID or name (case-insensitive).</td></tr><tr><td><code>-f</code>, <code>--force</code></td><td>Skip confirmation prompt before delete.</td></tr></tbody></table>

**Example**:

{% code expandable="true" %}

```bash
My Vault> epm-deployment remove "Test1 Servers"
Do you want to delete 1 deployment(s)? [y/n]: y
  Removed: v1V-I5PrHXwvK82epoP_Yw
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** `ModifyDeployments`

**Example**:

{% code expandable="true" %}

```csharp
public async Task<ModifyStatus> ModifyDeployments(
    IEnumerable<DeploymentDataInput> addDeployments = null,
    IEnumerable<DeploymentDataInput> updateDeployments = null,
    IEnumerable<string> removeDeployments = null)
```

{% endcode %}

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Remove-KeeperEpmDeployment`&#x20;

**Alias**: `kepm-deployment-delete`&#x20;

**Parameters**:

<table><thead><tr><th width="236.99993896484375">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>-DeploymentUidOrName</code></td><td>Deployment UID or deployment name (case-insensitive).</td></tr><tr><td><code>-Force</code></td><td>Skip confirmation prompt before delete.</td></tr></tbody></table>

**Example:**

{% code expandable="true" %}

```ps1
PS > Remove-KeeperEpmDeployment "Renamed Deployment"

Confirm
Are you sure you want to perform this action?
Performing the operation "Delete" on target "deployment 'Renamed Deployment'".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
Deployment 'QNRf1KWsxDg6YkLxJaZTbA' deleted.
  Removed: QNRf1KWsxDg6YkLxJaZTbA
```

{% endcode %}

</details>

<details>

<summary>Python SDK</summary>

**Function:**

```python
from keepersdk.plugins.pedm import admin_plugin

deployment_name = 'deployment name'
plugin = admin_plugin.PedmPlugin(enterprise_loader)

deployment = plugin.deployments.get_entity(deployment_name)
response = plugin.modify_deployments(remove_deployments=[deployment.uid])
```

</details>

### Deployment Download Command

Retrieve the deployment token needed for KEPM agent installation. This command can display the token on screen or save it to a file, and optionally show download URLs for agent installation packages for Windows, MacOS, and Linux platforms.

<details>

<summary>DotNet CLI</summary>

**Command:** `epm-deployment download`&#x20;

**Alias**: `epm-dep download`&#x20;

**Parameters**:

<table><thead><tr><th width="231.00006103515625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><em>(positional)</em></td><td>Deployment UID or name (case-insensitive).</td></tr><tr><td><code>--file</code></td><td>File path to write deployment token and download URLs (tab-separated, UTF-8).</td></tr><tr><td><code>--verbose</code></td><td>Verbose output.</td></tr></tbody></table>

**Example**:

{% code expandable="true" %}

```bash
My Vault > epm-deployment download "Production Servers"
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Not Supported

</details>

<details>

<summary>Power Commander</summary>

**Command:**`Get-KeeperEpmDeploymentDownload`&#x20;

**Alias**: `kepm-deployment-download`&#x20;

**Parameters**:

<table><thead><tr><th width="238">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>-DeploymentUidOrName</code></td><td>Deployment UID or deployment name (case-insensitive).</td></tr><tr><td><code>-File</code></td><td>Optional path to write token and download URLs (tab-separated) as UTF-8.</td></tr></tbody></table>

**Example:**

{% code expandable="true" %}

```
PS > Get-KeeperEpmDeploymentDownload "EPMTEST"
WARNING: The deployment token contains a private key. Treat it as a secret and do not share it insecurely.
Windows download URL    https://keepersecurity.com/pam/pedm/core/1.2.0.291/KeeperPrivilegeManagerWindows.zip
MacOS download URL      https://keepersecurity.com/pam/pedm/core/1.2.0.291/KeeperPrivilegeManagerMacOS.zip
Linux download URL      https://keepersecurity.com/pam/pedm/core/1.2.0.291/KeeperPrivilegeManagerLinux.zip
Deployment Token        keepersecurity.com:vvpOOn80jdyb8FihzHCeg4CZ-_bwA:f34Ull-C_Fqwerraoykg78012lh2O2tJOjONaE1YvNRoKU2lHy60J8090w6k
```

{% endcode %}

</details>

<details>

<summary>Python SDK</summary>

**Function:** Not Supported

</details>


---

# 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/commander-sdk/keeper-commander-sdks/sdk-command-reference/pedm-commands/pedm-deployment-commands.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.
