# PEDM Collection Commands

### Overview

This section covers all the Keeper Commander commands for managing PEDM collections. Collections group resources such as users, machines, applications, and other entities that can be used in policy filters. These commands allow administrators to create, view, update, delete, and manage links between collections and other PEDM entities.

This section supports the following commands:

* [**Collection List Command**](#collection-list-command)
* [**Collection View Command**](#collection-view-command)
* [**Collection Add Command**](#collection-add-command)
* [**Collection Update Command**](#collection-update-command)
* [**Collection Delete Command**](#collection-delete-command)
* [**Collection Connect Command**](#collection-connect-command)
* [**Collection Disconnect Command**](#collection-disconnect-command)
* [**Collection Wipe Out Command**](#collection-wipe-out-command)

### Usage

`pedm collection command [--options]` OR `pedm c command [--options]`

**Alias:** `c`

***

### Collection List Command

View all PEDM collections with optional filtering by type or search pattern. Collections can represent various resource types including OS builds, applications, user accounts, group accounts, and custom collections.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection list`

**Aliases:** `pedm c l`, `pedm c list`

**Flags:**

| Flag            | Description                          |
| --------------- | ------------------------------------ |
| `-v, --verbose` | Show detailed collection information |
| `--type`        | Filter by collection type (integer)  |
| `--pattern`     | Search pattern for collection names  |
| `--format`      | Output format - json, csv, or table  |
| `--output`      | Save output to specified file        |

**Example:**

```
My Vault> pedm collection list --type 101

Collection UID: coll_abc123
Value: Name=Windows Servers
Link Count: 5
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

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

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

</details>

### Collection View Command

Display detailed information about specific collections including their type, values, and associated links to agents, policies, or other collections.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection view <collection> [collection...]`

**Aliases:** `pedm c v`, `pedm c view`

**Flags:**

| Flag            | Description                                           |
| --------------- | ----------------------------------------------------- |
| `-v, --verbose` | Show verbose information                              |
| `--link`        | Show details for specific link UIDs - can be repeated |
| `--format`      | Output format - json, csv, or table                   |
| `--output`      | Save output to specified file                         |
| `collection`    | Collection UID (required, can specify multiple)       |

**Example:**

```
My Vault> pedm collection view coll_abc123

Collection UID: coll_abc123
Collection Type: MACHINE (101)
Collection Value: Name=Windows Servers
Link Count: 5
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)
plugin.collections.get_entity(uid)
```

</details>

### Collection Add Command

Create new custom collections for grouping resources. Collections can be used in policy filters to target specific sets of users, machines, or applications.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection add <collection_name> [collection_name...]`

**Aliases:** `pedm c a`, `pedm c add`

**Flags:**

| Flag         | Description                                      |
| ------------ | ------------------------------------------------ |
| `--type`     | Collection type (required, integer)              |
| `collection` | Collection name (required, can specify multiple) |

**Example:**

```
My Vault> pedm collection add "Finance Users" "HR Users" --type 103

Collection created successfully
Collection UID: coll_new123
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)

collection: Any = ['Collection names']
collection_type = int #'Collection type'

if isinstance(collection, str):
    collection = [collection]

collections: Dict[str, admin_types.CollectionData] = {}
for c in collection:
    collection_uid = utils.generate_uid()
    collection_data = {
        'Name': c,
        'IsCustom': True
    }
    collections[collection_uid] = admin_types.CollectionData(
        collection_uid=collection_uid, collection_type=collection_type,
        collection_data=json.dumps(collection_data))

status = plugin.modify_collections(add_collections=collections.values())
```

</details>

### Collection Update Command

Modify the name of an existing collection. This command allows administrators to update collection names without recreating them or affecting their links.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection update <collection>`

**Aliases:** `pedm c u`, `pedm c update`

**Flags:**

| Flag         | Description                                    |
| ------------ | ---------------------------------------------- |
| `--name`     | New collection name (required)                 |
| `--type`     | Collection type (optional, for disambiguation) |
| `collection` | Collection UID or name (required)              |

**Example:**

```
My Vault> pedm collection update coll_abc123 --name "Updated Server Group"

Collection updated successfully
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**&#x20;

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)

new_name = 'rename collection'
collection_id = 'collection name or uid'
collection = plugin.collections.get_entity(collection_id)
collection_info = collection.collection_data
collection_info['Name'] = new_name
collection_data = admin_types.CollectionData(
    collection_uid=collection.collection_uid, collection_type=collection.collection_type,
    collection_data=json.dumps(collection_info))

status = plugin.modify_collections(update_collections=[collection_data])
```

</details>

### Collection Delete Command

Remove one or more collections from the system. This command supports deleting specific collections or using special values like @orphan\_resource to clean up orphaned resource collections.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection delete <collection> [collection...]`

**Aliases:** `pedm c delete`

**Flags:**

| Flag          | Description                                                                   |
| ------------- | ----------------------------------------------------------------------------- |
| `-f, --force` | Do not prompt for confirmation                                                |
| `collection`  | Collection UID or name, or @orphan\_resource (required, can specify multiple) |

**Examples:**

```
My Vault> pedm collection delete coll_old123 --force

Collection deleted successfully
```

```
My Vault> pedm collection delete @orphan_resource

Do you want to remove 3 collection(s)? (y/N): y
Collections deleted successfully
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)

collection_id = 'collection name or uid'
collection = plugin.collections.get_entity(collection_id)

uids = [collection.uid]
status = plugin.modify_collections(remove_collections=uids)
```

</details>

### Collection Connect Command

Link entities (agents, policies, or other collections) to a collection. This command establishes relationships between collections and PEDM entities for policy filtering and organisation.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection connect <links> [links...]`

**Aliases:** `pedm c connect`

**Flags:**

| Flag               | Description                                            |
| ------------------ | ------------------------------------------------------ |
| `-c, --collection` | Parent collection UID or name (required)               |
| `--link-type`      | Type of link - agent, policy, or collection (required) |
| `links`            | Link UIDs or names (required, can specify multiple)    |

**Example:**

```
My Vault> pedm collection connect agent_abc123 agent_def456 --collection coll_servers --link-type agent

Links created successfully
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**&#x20;

```python
from keepersdk.plugins.pedm import admin_plugin, admin_types
from keepersdk.proto import pedm_pb2

plugin = admin_plugin.PedmPlugin(enterprise_loader)

collection_id = 'collection name or uid'
collection = plugin.collections.get_entity(collection_id)


link_types = ['agent', 'policy', 'collection']
link_type = link_types[0]
link_name = 'link name or uid'

links: List[str] = []
collection_link_type: int
if link_type == 'collection':
    coll_links = plugin.collections.get_entity(link_name)
    links.extend((x.collection_uid for x in coll_links))
    collection_link_type = pedm_pb2.CLT_COLLECTION
elif link_type == 'agent':
    agent = plugin.agents.get_entity(link_name)
    links.append(agent.agent_uid)
    collection_link_type = pedm_pb2.CLT_AGENT
elif link_type == 'policy':
    pol_links = plugin.policies.get_entity(link_name)
    links.extend((x.policy_uid for x in pol_links))
    collection_link_type = pedm_pb2.CLT_POLICY

to_add = [admin_types.CollectionLink(
    collection_uid=collection.collection_uid, link_uid=x, link_type=collection_link_type) for x in links]

status = plugin.set_collection_links(set_links=to_add)
```

</details>

### Collection Disconnect Command

Remove links between a collection and its associated entities. This command unlinks agents, policies, or collections from a parent collection without deleting the entities themselves.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection disconnect <links> [links...]`

**Aliases:** `pedm c disconnect`

**Flags:**

| Flag               | Description                                     |
| ------------------ | ----------------------------------------------- |
| `-c, --collection` | Parent collection UID or name (required)        |
| `-f, --force`      | Do not prompt for confirmation                  |
| `links`            | UIDs to unlink (required, can specify multiple) |

**Example:**

```
My Vault> pedm collection disconnect agent_abc123 --collection coll_servers --force

Links removed successfully
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)

collection_id = 'collection name or uid'
collection = plugin.collections.get_entity(collection_id)

existing_links= list(x for x in plugin.storage.collection_links.get_links_by_subject(collection.collection_uid))
links: Any = ['UIDs to unlink']
to_unlink: Set[str] = set(links)

to_remove: List[admin_types.CollectionLink] = []
for link in existing_links:
    link_uid = link.link_uid
    if link_uid in to_unlink:
        to_remove.append(admin_types.CollectionLink(
            collection_uid=collection.collection_uid,
            link_uid=link_uid,
            link_type=link.link_type)
        )

status = plugin.set_collection_links(unset_links=to_remove)
```

</details>

### Collection Wipe Out Command

Remove all collections of a specified type from the system. This command is useful for bulk cleanup operations but should be used with caution as it permanently deletes multiple collections.

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Python CLI</summary>

**Command:** `pedm collection wipe-out`

**Aliases:** `pedm c wipe-out`

**Flags:**

| Flag     | Description                           |
| -------- | ------------------------------------- |
| `--type` | Collection type to wipe out (integer) |

**Example:**

```
My Vault> pedm collection wipe-out --type 102

All collections of type 102 deleted
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**&#x20;

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

plugin = admin_plugin.PedmPlugin(enterprise_loader)

collection_type = 10 #collection type upto 100
if isinstance(collection_type, int):
    collection_type = [collection_type]
collections: List[str] = []
for coll in plugin.storage.collections.get_all_entities():
    if collection_type and coll.collection_type not in collection_type:
        continue
    collections.append(coll.collection_uid)

plugin.modify_collections(remove_collections=collections)
```

</details>
