# Record Commands

### Overview

This section lists all the commands in Keeper’s Commander (CLI) that are related to manipulating **records** in the vault. “Record commands” in this context are things like record add, edit, get etc. The commands cover creating, viewing, editing, organizing, and managing these records and related attachments.

The following commands are currently supported by SDK

* [Record Add Command](#record-add-command)
* [Record Update Command](#record-update-command)
* [Record Delete Command](#record-delete-command)
* [List Command](#list-command)
* [Record Get Command](#get-record-command)
* [Record History Command](#record-history-command-pending)
* [Clipboard Copy Command](#clipboard-copy-command)
* [Find Duplicates Command](#find-duplicates-command)
* [File Report Command](#file-report-command)

Along with record specific commands, SDK also supports record attachment functionalities. These can be found [here](https://docs.keeper.io/en/keeperpam/commander-sdk/keeper-commander-sdks/sdk-command-reference/record-commands/attachment-commands). These include

* [Attachment Add Command (upload)](https://docs.keeper.io/en/keeperpam/commander-sdk/keeper-commander-sdks/sdk-command-reference/attachment-commands#upload-attachments-command)
* [Attachment Delete Command(remove)](https://docs.keeper.io/en/keeperpam/commander-sdk/keeper-commander-sdks/sdk-command-reference/attachment-commands#remove-attachment-command)
* [Attachment Download Command(download)](https://docs.keeper.io/en/keeperpam/commander-sdk/keeper-commander-sdks/sdk-command-reference/attachment-commands#download-attachment-command)

### Record Add Command

This command is used to add records to Keeper Vault. The command supports all record types, custom types, standard fields and custom fields.

<details>

<summary>DotNet CLI</summary>

**Command :** `add-record`

**Parameters:**

| Parameter    | Description                                     |
| ------------ | ----------------------------------------------- |
| `-t, --type` | Record type (login, bankAccount, address, etc.) |
| `--title`    | Record title                                    |

**Options:**

| Option            | Description                                      |
| ----------------- | ------------------------------------------------ |
| `--folder`        | Folder name or UID where record will be created  |
| `-g, --generate`  | Generate random password                         |
| `--self-destruct` | Auto-delete after time period (5m, 2h, 1d, etc.) |

**Record Fields:**

Add fields using `fieldname=value` format:

```bash
login=username              # Username/login field
password=secret123          # Password field  
url=https://example.com     # URL field
notes="Additional info"     # Notes field
```

**Example**:

```bash
My Vault> add-record --folder="Example Folder"  --type=login --title="Login Credentials" --generate login=test_user
Record created: record_uid
```

</details>

<details>

<summary>DotNet SDK</summary>

**Function:**

```csharp
Task<KeeperRecord> CreateRecord(KeeperRecord record, string folderUid = null);
```

**Arguments:**

| Argument    | Type         | Required | Description                                                               |
| ----------- | ------------ | -------- | ------------------------------------------------------------------------- |
| `record`    | KeeperRecord | Yes      | Record data of type KeeperRecord containing all record information        |
| `folderUid` | string       | No       | UID of folder in which to create the record (default: null = root folder) |

**Returns:**

`Task<KeeperRecord>` - A task returning the created KeeperRecord with assigned UID

**Example usage**: [can be found here](https://github.com/Keeper-Security/keeper-sdk-dotnet/blob/d207b52b758c6e282653d63e71fbae0ebe931750/Sample/Program.cs#L88)

</details>

<details>

<summary>PowerCommander</summary>

**Command** : `Add-KeeperRecord`

**Aliases:** `kadd`

**Parameters**:

| Option        | Description                                |
| ------------- | ------------------------------------------ |
| `-RecordType` | Specifies the record type (default: login) |
| `-Title`      | Title of the record                        |

**Flags:**

| Option                                                                                                                            | Description                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `-Folder`                                                                                                                         | UID of the folder where the record will be created                                                                        |
| `-GeneratePassword`                                                                                                               | Generate random password. Uses default rules (Length=20, Upper=4, Lower=4, Digit=2, Special=2) when used alone.           |
| `-PasswordRules`                                                                                                                  | Custom password generation rules: Length, Upper, Lower, Digit, Special chars.                                             |
| <p><br>Example: <code>-PasswordRules 20,5,5,5,5</code></p><p>Requires exactly 5 values: Length, Upper, Lower, Digit, Special.</p> |                                                                                                                           |
| `-SpecialChars`                                                                                                                   | Include special characters in the generated password.                                                                     |
| <p><br>Format: Charset (charset is optional)</p>                                                                                  |                                                                                                                           |
| <p><br>Example: <code>-SpecialChars "!@#$"</code>.</p><p>default charset is <code>!@#$%()+;<>=?\[]{}^.,</code></p>                |                                                                                                                           |
| `-Notes`                                                                                                                          | Add notes to the record                                                                                                   |
| `-SelfDestruct`                                                                                                                   | Timeout for the shared record URL (format: m, h, or d. Max: 180 days/6 months). Record disappears 5 minutes after viewing |

**Example:**

```powershell
PS > Add-KeeperRecord -RecordType login -Folder folder_uid -Title "Login Crendentials PowerShell" -GeneratePassword login=<username>
Record created: record_uid

PS > kadd -RecordType login -Folder folder_uid -Title "Login Crendentials PowerShell" -GeneratePassword login=<username>
Record created: record_uid
```

Usage example samples can be found [here](https://github.com/Keeper-Security/keeper-sdk-dotnet/blob/d207b52b758c6e282653d63e71fbae0ebe931750/PowerCommander/RecordCommands.ps1#L526)

</details>

<details>

<summary>Python CLI</summary>

**Command**: `record-add`

**Parameters**:

`-t` `--title` Title of the record (required)

`-n` `--notes` Record Notes

`-rt` `--record-type` Record type (required)

`--folder` Folder in which record is to be added

`--self-destruct` Timeout of the share record url. Set in m, h or d. Max 180days (6 months). Record disappears in 5mins after viewing

`-f` `--force` Ignore warnings and skip prompts

`fields` \<field\_type>=\<value> List of fields with their values

**Example:**

```sh
My vault> record-add --title='New Record' --notes='Create self destructing record' --record-type='Login' --folder='Record folder UID' --self-destruct=180d login=<username> password=<password> url=https://keepersecurity.com/vault/login

Record self-destructs on 01/07/2025 00:00:00 or after being viewed once. Once the link is opened the recipient will have 5 minutes to view the record.
https://keepersecurity.com/vault/share#XX1X1XXXX_00_00x00X0xxx00Xx_X0xXXX-x0X0X0xx
```

</details>

<details>

<summary>Python SDK</summary>

**Function:** `add_record_to_folder`

```python
vault = keepersdk.vault.vault_online.VaultOnline #initialize upon login

#Create record object based on record type
if record_type in ('legacy', 'general'):
    record = vault_record.PasswordRecord
else:
    record = vault_record.TypedRecord

#Assign field values based on fields and record type
set_fields(record, fields)

record.title = title
record.notes = notes

if attachments:
    keepersdk.vault.attachment.upload_attachments(vault, record, attachments)

record_uid = keepersdk.vault.record_management.add_record_to_folder(vault, record, folder_uid)
```

</details>

### Record Update Command

This command is used to update existing records in Keeper Vault.

<details>

<summary>DotNet CLI</summary>

**Command:** `update-record`

**Parameters:**

| Parameter | Description                             |
| --------- | --------------------------------------- |
| `record`  | The path or UID of the record to update |

**Options:**

| Option           | Description                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------- |
| `--title`        | Updates the title of the record                                                             |
| `-t, --type`     | Record type (typed records only)                                                            |
| `-g, --generate` | Generates a random password and updates the existing record password field (Default: false) |
| `--help`         | Display help screen                                                                         |
| `--version`      | Display version information                                                                 |
| `fields`         | Record fields to add/update in format `fieldname=value`                                     |

**Example:**

```sh
My Vault> update-record record_uid --type=login --title="Login Credentials" --generate login
=test_users
```

</details>

<details>

<summary>DotNet SDK</summary>

**Functions:**

```csharp
Task<KeeperRecord> UpdateRecord(KeeperRecord record, bool skipExtra = true);
```

**Arguments:**

| Argument    | Type         | Required | Description                                               |
| ----------- | ------------ | -------- | --------------------------------------------------------- |
| `record`    | KeeperRecord | Yes      | Record object with updated data (must have valid UID)     |
| `skipExtra` | bool         | No       | Skip updating file attachment information (default: true) |

**Returns:**

`Task<KeeperRecord>` - A task returning the updated KeeperRecord

**Example:**

```csharp
// Load existing record
var record = await vault.LoadRecord("ABC123XYZ456");

// Update as PasswordRecord
if (record is PasswordRecord passwordRecord)
{
    passwordRecord.Password = "NewSecurePassword123!";
    passwordRecord.Notes = "Password updated on " + DateTime.Now.ToString();
    
    // Update the record
    var updatedRecord = await vault.UpdateRecord(passwordRecord);
    Console.WriteLine($"Record updated: {updatedRecord.Title}");
}
```

**Approach 2:**

If multiple records are to be updated at once, then all of them can be updated

**Function:**

```csharp
Task<IList<RecordUpdateStatus>> UpdateRecords(IEnumerable<KeeperRecord> records);
```

**Returns:**

`Task<IList<RecordUpdateStatus>>` - A task returning a list of update statuses for each record

**RecordUpdateStatus Properties:**

| Property    | Type   | Description                                |
| ----------- | ------ | ------------------------------------------ |
| `RecordUid` | string | UID of the record                          |
| `Status`    | string | Update status: "success" or error message  |
| `Message`   | string | Additional status message or error details |

**Example:**

```csharp
// Update multiple records at once
var recordsToUpdate = new List<KeeperRecord>();

var record1 = await vault.LoadRecord("ABC123") as PasswordRecord;
record1.Password = "NewPassword1!";
recordsToUpdate.Add(record1);

var record2 = await vault.LoadRecord("DEF456") as PasswordRecord;
record2.Password = "NewPassword2!";
recordsToUpdate.Add(record2);

var record3 = await vault.LoadRecord("GHI789") as PasswordRecord;
record3.Password = "NewPassword3!";
recordsToUpdate.Add(record3);

var statuses = await vault.UpdateRecords(recordsToUpdate);

foreach (var status in statuses)
{
    if (status.Status == "success")
    {
        Console.WriteLine($"✓ Record {status.RecordUid} updated successfully");
    }
    else
    {
        Console.WriteLine($"✗ Record {status.RecordUid} failed: {status.Message}");
    }
}
```

</details>

<details>

<summary>PowerCommander</summary>

**Command:** `Add-KeeperRecord`

**Aliases:** `kadd`

**Parameters:**

* `-Uid` : Record Uid of the record to be updated

**Flags**:

| Option              | Description                                                                 |
| ------------------- | --------------------------------------------------------------------------- |
| `-GeneratePassword` | Generate and update a new password for the record                           |
| `-Title`            | Updated title of the record                                                 |
| `-Notes`            | Update notes for the record                                                 |
| `-Verbose`          | Display detailed operation information                                      |
| `-Debug`            | Display debugging information during execution                              |
| `-ErrorAction`      | Specify how to respond to errors (Continue, Stop, SilentlyContinue, Ignore) |
| `-WhatIf`           | Show what would happen if the cmdlet runs without actually executing        |
| `-Confirm`          | Prompt for confirmation before executing the command                        |

**Requirement**:

This command updates record in current folder. so first change current directory to directory on which you want to create the folder. this can be done using `Set-KeeperFolder` command [here](https://github.com/Keeper-Security/keeper-sdk-dotnet/blob/d207b52b758c6e282653d63e71fbae0ebe931750/PowerCommander/VaultCommands.ps1#L34)

**Example:**

<pre class="language-powershell"><code class="lang-powershell"><strong>PS > Add-KeeperRecord -Uid "record_uid" -Title "Updated Title" login=newuser@example.com
</strong><strong>Record updated: record_uid
</strong>UID                    Type    Title           Info
---                    ----    -----           ----
record_uid             login   Updated Title   newuser@example.com

PS > kadd -Uid "record_uid" -Title "Updated Title" login=newuser@example.com
Record updated: record_uid
UID                    Type    Title           Info
---                    ----    -----           ----
record_uid             login   Updated Title   newuser@example.com
</code></pre>

</details>

<details>

<summary>Python CLI</summary>

**Command**: `record-update`

**Parameters**:

`-t` `--title` Modify record title (required)

`-rt` `--record-type` Modify record type (required)

`-n` `--notes` Append/modify notes

`-r` `--record` UID or path to be modified (required)

`fields` \<field type>=\<value> List of fields with their values

**Options:**

`-f` `--force` Ignore warnings

**Example:**

```sh
My Vault> record-update --record='record_uid' --title='New Record2' -f -rt='general' -n='Updated record through CLI' login='user123' passwords='new_password' url=https://keepersecurity.com
```

</details>

<details>

<summary>Python SDK</summary>

**Function:** `update_record`

**Example:**

```python
from keepersdk.vault import record_management, vault_record

vault = keepersdk.vault.vault_online.VaultOnline #initialize upon login

record = vault.vault_data.load_record(record_uid=uid)

if not isinstance(record, vault_record.PasswordRecord | vault_record.TypedRecord):
    raise ValueError('Record cannot be updated')
    
#Assign field values based on fields and record type
set_fields(record, fields)

if title:
    record.title = title
if notes:
    record.notes = notes

if attachments:
    keepersdk.vault.attaachment.upload_attachments(vault, record, attachments)

record_management.update_record(vault, record)
```

</details>

### Record Delete Command

Use this command to delete multiple records from your personal vault folders. The delete record will exist in the owner's vault and if all record instances are deleted, it remains in the trash can of owner's vault

<details>

<summary>DotNet CLI</summary>

**Command:** `rm`

**Flags:**

* `--help` : Display this help screen.
* `--version` : Display version information.
* `record title, uid, or pattern` : The UID/Title of the folder which will be deleted.

**Example:**

```sh
My Vault> rm record_uid
1 Record(s) will be removed from shared folders.  Access to these records will no longer be available to members of these shared folders.
Note: If the last reference to a record is removed, the record can be found in the owner's trash can. If the trash can is then emptied, the record is no longer recoverable.
Type "yes" to confirm, <Enter> to cancel
> yes
```

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** `DeleteRecords`

```csharp
Task DeleteRecords(RecordPath[] records);
```

**Arguments:**

`records` - an array of record paths.

**Exceptions:**

```csharp
Authentication.KeeperApiException
```

</details>

<details>

<summary>PowerCommander</summary>

**Command:** `Remove-KeeperRecord`

**Aliases:** `kdel`

**Parameters:**

* `Name` - Record name to delete

**Examples:**

```powershell
PS > Remove-KeeperRecord -Name "abc123xyz"
PS > kdel "RecordUID1", "RecordUID2"
```

</details>

<details>

<summary>Python CLI</summary>

**Command**: `rm`

**Parameters**:

* `records` Uid for records to be deleted (required)

**Options**:

* `-f` `--force` Delete without prompts

**Example:**

```sh
My Vault> rm record_uid
1 Record(s) will be removed from your personal folder.
Note: If the last reference to a folder is removed, it can be found in the owners trash can. If the trash can is then emptied, the record is no longer recoverable. (y/n): y

```

</details>

<details>

<summary>Python SDK</summary>

**Function:** `delete_vault_objects`

**Example:**

```python
record_management.delete_vault_objects(
            vault=context.vault,
            vault_objects=record_uids, #str
            confirm=confirm_fn #Optional - send a callable function for confirm deletion
        )
```

</details>

### List Command

This command displays a list of all records available in Keeper Vault in a tabular format. Each row contains Record UID, title, type, description and whether the record is shared with other users.

<details>

<summary>DotNet CLI</summary>

**Command**: `search`

**Parameters:**

* `argument 1` : pattern to match in search (Required).

**Flags**:

* `--verbose` : show all data
* `--limit` : number of records to show

**Example:**

```shell
My Vault> search demo
  #  Record UID              Title                      Type   Info                                         
---  ----------------------  -------------------------  -----  ---------------------------------------------
  1  record_uid              Demo Record 1              login  demo@email.com (at) https://demo.acmecorp.com
  2  record_uid              DemoRecordForWeakPassword  login  qsaSF@ASFD.CA                                

First 2 found records are shown.
```

</details>

<details>

<summary>DotNet SDK</summary>

**Function:** `vault.KeeperRecords`

To get similar functionality, we need to get records from Keeper Records list from vault context

```csharp
vault.KeeperRecords
                .Where(x => options.Verbose || x.Version == 2 || x.Version == 3)
```

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Get-KeeperRecord`

**Alias:** `kr`

**Options:**

`-Uid` - Filter with record uid.

`-Filter` - Filter with UID, title, type, description.

</details>

<details>

<summary>Python CLI</summary>

**Command:** `list`

**Alias:**`l`

**Options:**

`-t` `--type` Used to list records of certain types. Can be repeated by appending

`-v` `--verbose` Used to display long titles

`--format` Table, csv, json

`--output` Path to output file

`search_text` List criteria

**Example:**

```shell
My Vault> list

  #  Record UID              Type     Title                            Description                                Shared
---  ----------------------  -------  -------------------------------  -----------------------------------------  --------
  1  record_uid              login    abc                              abc@email.com                              True
```

</details>

<details>

<summary>Python SDK</summary>

**Function**: `find_records`

**Example:**

```python
records = [x for x in vault.vault_data.find_records(criteria=Optional[str], record_type=Optional[Union[str, Iterable[str]]], record_version=Optional[Union[int, Iterable[int]]])]
```

**Note:**

* `criteria` : Text to be present in the record
* `record_types` : Return record of given record types
* `record_version` : Return record of given record version

</details>

### Get Record Command

This command is used specifically for fetching records. The get command in DotNet and Python SDKs is listed under miscellaneous commands, which fetches record, team, folder and share folder.

<details>

<summary>DotNet CLI</summary>

**Command**: `get`

**Parameters:**

* `uid` : Uid of Record or Shared folder or Folder

**Example:**

```bash
My Vault> get record_uid                       

                    Record UID:  record_uid                
                          Type:  login                                 
                         Title:  Login Record                          
                         Notes:                                        
                      $passkey:                                        
                        $login:  example@example.com                   
                     $password:  random_password                  
                          $url:                                        
                      $fileRef:                                        
                 Last Modified:  Wednesday, August 13, 2025 12:04:28 PM
                                                                       
                   User Shares:                                        
       user@example.com  Can Edit                              
       user@example.com  Owner                                 
                                                                       
                Shared Folders:                                        
                New Test Folder  Read Only                             
```

</details>

<details>

<summary>DotNet SDK</summary>

The current implementation of the command in dotnet cli follows searching of the given UID among different categories

```csharp
vault.TryGetKeeperRecord(uid, out var record)
```

If UID is not found in record, then we move ahead to searching for UID among folders

```csharp
vault.TryGetSharedFolder(uid, out var sf)
```

If UID is not found in shared folder, then we check folders

```csharp
vault.TryGetFolder(uid, out var f
```

</details>

<details>

<summary>Power Commander</summary>

**Command:** `Get-KeeperRecord`

**Aliases:** `kr`

**Parameters:**

* `Uid` : returns record with matching Uid

**Flags**:

* `Filter` : Matches record content with what is given and returns matching ones

**Examples:**

<pre class="language-powershell"><code class="lang-powershell"># Get specific record
<strong>PS > Get-KeeperRecord -Uid "abc123xyz"
</strong>PS > kr -Uid "abc123xyz"

# Get all records
PS > Get-KeeperRecord
PS > kr

# Search records
PS > Get-KeeperRecord -Filter "gmail"
PS > kr -Filter "password"
</code></pre>

</details>

<details>

<summary>Python CLI</summary>

**Command:** `get <UID>`

**Parameters:**

* `uid` UID or title to search for (optional when using -f, -t, or -r flags)
* `-f`, `--folder` Folder UID or title to search for
* `-t`, `--team` Team UID or title to search for
* `-r`, `--record` Record UID or title to search for

**Options:**

`--format` Supported display types - json, details, fields or password

`--unmask` Show sensitive data in output such as passwords

`--legacy` Show typed records as legacy

**Example:**

```sh
My Vault> get record_uid

                 UID: record_uid
                Type: login               
               Title: test
               login: 134234           
            password: ********            
                 url: https://email.com   

User Permissions:

User: user@email.com
Shareable: Yes
Read-Only: No


Shared Folder Permissions:

Shared Folder UID: shared_folder_uid


Share Admins:
users@email.com
```

</details>

<details>

<summary>Python SDK</summary>

**Function:** `load_record`

**Example:**

```python
record = vault.vault_data.load_record(record_uid=uid)
```

The `load_record` returns the record details. There are 4 types of records:

* `PasswordRecord` - legacy or general
* `TypedRecord`
* `FileRecord`
* `ApplicationRecord`

These classes are defined in `keepersdk.vault.vault_record`

</details>

### Record History Command

This command is used to list (default action) revisions or changes in a record, view a particular revision, see differences in between revision and restore old revisions in a record. Here revision can be equated to a change version for a specific record

<details>

<summary>DotNet CLI</summary>

**Command:** `record-history`

**Parameters:**

* `recordUid` **:** UID of the record whose history has to be searched.

**Example:**

```sh
My Vault> record-history UTgy0U90whWp78sFAcsav
Version  Modification Date       Username                       Changed        
-------  ----------------------  -----------------------------  ---------------
V.2      9/30/2025 1:00:20 PM     user@email.com                  Login, Password
V.1      12/19/2024 12:23:45 PM   user@email.com               
```

</details>

<details>

<summary>DotNet SDK</summary>

**Functions:**`GetRecordHistory`

```csharp
public async Task<RecordHistory[]> GetRecordHistory(string recordUid)
```

**Arguments**:

`recordUid` : UID of the record whose history has to be shown

</details>

<details>

<summary>Power Commander</summary>

**Command**: `Get-KeeperRecordHistory`

**Parameters**:

`-Format` Table, csv, Json

`-Output` Path to resulting output file.

`-a` `-Action` Supported actions are list, diff, view, restore

`-r`, `-Revision` Revision of the record to be shown or restored to

`-Record` Record UID or path (required)

**Example:**

```
PS > Get-KeeperRecordHistory -Record "<recordUidOrName_here>"

Record History: Test1
UID: <recordUid_here>

Version ModifiedBy                    TimeModified
------- ----------                    ------------
Current test@gmail.com                2026-02-16 08:50:30
V.6     test@gmail.com                2026-02-16 08:48:37
V.5     test@gmail.com                2026-02-16 08:40:48
V.4     test@gmail.com                2026-02-16 08:39:27
V.3     test@gmail.com                2026-02-16 08:38:32
V.2     test@gmail.com                2026-02-06 17:39:52
V.1     test@gmail.com                2026-02-05 10:42:05

Total versions: 7
```

</details>

<details>

<summary>Python CLI</summary>

**Command**: `record-history`

**Parameters**:

`--format` Table, csv, Json

`--output` Path to resulting output file (ignored for "table" format)

`-a` `--action` Supported actions are list, diff, view, restore

`-r`, `--revision` Revision of the record to be shown or restored to

`record` Record UID or path (required)

**Options**:

* `-v`, `--verbose` Show Verbose output

**Example:**

```sh
My Vault> record-history -a='list' record_uid
Version    Modified By                      Time Modified
---------  -------------------------------  -------------------
Current    username@keepersecurity.com      2025-09-30 18:36:58
V.5        username@keepersecurity.com      2025-09-26 18:00:27
V.4        username@keepersecurity.com      2025-09-24 11:51:50
V.3        username@keepersecurity.com      2024-12-30 12:21:59
V.2        username@keepersecurity.com      2024-12-02 12:39:20
V.1        username@keepersecurity.com      2024-12-02 12:16:15
```

</details>

<details>

<summary>Python SDK</summary>

**Function:** Not Supported

</details>

### Clipboard Copy Command

This command retrieves data from a record (password, login, TOTP, custom fields) and outputs it to various destinations including clipboard, stdout, or environment variables.

{% hint style="info" %}
This command is also aliased as `find-password`
{% endhint %}

<details>

<summary>DotNet CLI</summary>

**Command:** `clipboard-copy`

**Alias:** `cc`, `find-password`

**Flags:**

* `record`: Record path or UID to retrieve data from
* `--username` : Match login name when multiple records exist with the same name
* `--output` : Output destination - values: `clipboard` (default), `stdout`, `stdouthidden`, `variable`
* `--name` : Variable name when output is set to `variable`
* `--copy-uid` : Output UID instead of password
* `-l`, `--login` : Output login name instead of password
* `-t`, `--totp` : Output TOTP code instead of password
* `--field` : Output specific custom field (use `field:property` for nested values)
* `-r`, `--revision` : Use specific record revision

**Examples:**

```
MyVault> clipboard-copy myrecord

MyVault> cc myrecord --output stdout

MyVault> find-password myrecord --login

MyVault> clipboard-copy myrecord --totp

MyVault> clipboard-copy myrecord --field notes

MyVault> clipboard-copy myrecord --field phone:number

MyVault> clipboard-copy myrecord --output variable --name MY_PASSWORD

MyVault> clipboard-copy myrecord --username john@example.com
```

</details>

<details>

<summary>Power Commander</summary>

There are two implementations for this command in PowerCommander.

1. Copy field and its data to clipboard.

**Command** : `Copy-KeeperToClipboard [-Record] [-Field] [-Output] [-Username] [-Login] [-Totp] [-CopyUid] [-Name] [-Revision]`

**Parameters**

| Parameter | Description                                                                                       |
| --------- | ------------------------------------------------------------------------------------------------- |
| Record    | Record UID, title, or any object containing property Uid.                                         |
| Field     | Record field to copy. Supports: Login, Password, URL, Notes, or any custom field name.            |
| Output    | Output destination: Clipboard, Stdout, StdoutHidden, Variable.                                    |
| Username  | Match login name to help select the correct record when multiple records have the same title.     |
| Login     | Copy login field instead of password. Alias: `-l`                                                 |
| Totp      | Copy TOTP code instead of password. Alias: `-t`                                                   |
| CopyUid   | Copy record UID instead of password.                                                              |
| Name      | Variable name when Output is set to Variable.                                                     |
| Revision  | Use specific record revision from history (1 = previous, 2 = two versions ago, etc.). Alias: `-r` |

**Examples**

```powershell
# Copy password to clipboard (default behavior)
Copy-KeeperToClipboard "Test"   
Copied to clipboard: Password for Test

# Copy login instead of password
Copy-KeeperToClipboard "Test" -Login   
Copied to clipboard: Login for Test

# Copy TOTP code
Copy-KeeperToClipboard "Test" -Totp   
Copied to clipboard: TOTP for Test

# Copy a custom field
Copy-KeeperToClipboard "Test" -Field "API Key"   
Record Test12 has no API Key

# Output to console
Copy-KeeperToClipboard "Test" -Output Stdout   
123456

# Store in variable
Copy-KeeperToClipboard "Test" -Output Variable -Name "myPassword"   
Password is set to variable "myPassword"

# Print the password which you stored in variable
$env:myPAssword
123456

# Copy previous version from history
Copy-KeeperToClipboard "Test" -Revision 1   
Copied to clipboard: Password for Test

Copy-KeeperToClipboard "Test" -Revision 2
Copied to clipboard: Password for Test

# Copy UID itself
copy-KeeperToClipboard "Test" -CopyUid
Copied to clipboard: UID for Test

# Select by username when multiple records have same title
Copy-KeeperToClipboard "Test" -Username "abc@example.com"
Copied to clipboard: Password for Test
```

2. Copy Keeper Attachment to a stream

**Command**: `Copy-KeeperFileAttachmentToStream`

downloads a single file attachment from a Keeper record. You choose one of two output modes:

* **`-Path`** – Write the attachment to a file. The parent directory is created if it does not exist. Best for saving attachments to disk.
* **`-Stream`** – Write the attachment data to an existing `System.IO.Stream` object. Best for in-memory processing, piping, or custom handling.

The record can be specified by **record UID** or by **record title**. If the record has more than one attachment, use `-Name` to identify the attachment by file name or attachment ID; if there is only one attachment, `-Name` can be omitted.

***

#### Parameters

<table><thead><tr><th width="111.15625">Parameter</th><th width="159.1640625">Type</th><th width="101.6123046875">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Record</strong></td><td><code>string</code></td><td>Yes</td><td>Keeper record UID or record title.</td></tr><tr><td><strong>Name</strong></td><td><code>string</code></td><td>No</td><td>Attachment file name or attachment ID. Omit when the record has only one attachment.</td></tr><tr><td><strong>Path</strong></td><td><code>string</code></td><td>Yes*</td><td>File path where the attachment will be saved. Creates the directory if needed. *Required when not using <code>-Stream</code>.</td></tr><tr><td><strong>Stream</strong></td><td><code>System.IO.Stream</code></td><td>Yes*</td><td>A writable stream to receive the attachment data. *Required when not using <code>-Path</code>.</td></tr></tbody></table>

You must supply either **`-Path`** or **`-Stream`** (they are mutually exclusive).

#### Examples

**Download attachment to a file**

Save an attachment to a specific path. The command creates the target directory if it does not exist.

```powershell
Copy-KeeperFileAttachmentToStream -Record "ABxzAJFeEd_pRAFbcqGCJA" -Name "download.png" -Path "C:\Downloads\file.png"
```

By record title and attachment name:

```powershell
Copy-KeeperFileAttachmentToStream -Record "My Server Config" -Name "config.json" -Path ".\config.json"
```

When the record has only one attachment, omit `-Name`:

```powershell
Copy-KeeperFileAttachmentToStream -Record "ABxzAJFeEd_pRAFbcqGCJA" -Path "C:\Downloads\attachment.bin"
```

**Download attachment to a stream (in-memory)**

Write the attachment into a `MemoryStream`, then read or process the data:

```powershell
$ms = [System.IO.MemoryStream]::new()
Copy-KeeperFileAttachmentToStream -Record "ABxzAJFeEd_pRAFbcqGCJA" -Name "data.txt" -Stream $ms
$ms.Position = 0
$reader = [System.IO.StreamReader]::new($ms)
$content = $reader.ReadToEnd()
$reader.Dispose()
$ms.Dispose()
```

Using the stream with a different reader (e.g., binary):

```powershell
$ms = [System.IO.MemoryStream]::new()
Copy-KeeperFileAttachmentToStream -Record "My Record" -Stream $ms
$ms.Position = 0
# Process $ms as needed (e.g. [System.IO.BinaryReader])
$ms.Dispose()
```

</details>

<details>

<summary>Python CLI</summary>

**Command** : Coming Soon

</details>

<details>

<summary>Python SDK</summary>

**Function:** Not Supported

</details>

### Find Duplicates Command

This command searches for duplicate records in your vault based on various matching criteria. It can display duplicates or automatically merge/remove them.

<details>

<summary>DotNet CLI</summary>

**Command:** `find-duplicates`

**Flags:**

* `--title` : Match duplicates by title
* `--login` : Match duplicates by login
* `--password` : Match duplicates by password
* `--url` : Match duplicates by URL (also displays URL in results)
* `--shares` : Match duplicates by share permissions
* `--full` : Match duplicates by all fields including custom fields
* `-m`, `--merge` : Consolidate duplicate records (removes all but first in each group)
* `--ignore-shares-on-merge` : Ignore share permissions when grouping duplicates to merge
* `-f`, `--force` : Delete duplicates without confirmation (valid only with `--merge`)
* `-n`, `--dry-run` : Simulate removing duplicates without actually removing them (valid only with `--merge`)
* `-q`, `--quiet` : Suppress screen output (valid only with `--force`)
* `-s`, `--scope` : Search scope - values: `vault` (default), `enterprise`
* `-r`, `--refresh-data` : Populate local cache with latest data (valid only with `--scope=enterprise`)

**Examples:**

```
MyVault> find-duplicates --title --login

MyVault> find-duplicates --password --url

MyVault> find-duplicates --full

MyVault> find-duplicates --title --login --merge

MyVault> find-duplicates --title --login --merge --force

MyVault> find-duplicates --title --login --merge --dry-run

MyVault> find-duplicates --shares --scope vault
```

</details>

<details>

<summary>Power Commander</summary>

**Command** : `Find-KeeperDuplicateRecords [-Title] [-Login] [-Password] [-Url] [-Shares] [-Full] [-Merge] [-Force] [-DryRun] [-Quiet] [-IgnoreSharesOnMerge] [-Scope ] [-RefreshData] [-Format ] [-Output ]`

**Parameters**

| Parameter           | Description                                                               |
| ------------------- | ------------------------------------------------------------------------- |
| Title               | Match duplicates by title field.                                          |
| Login               | Match duplicates by login field.                                          |
| Password            | Match duplicates by password field.                                       |
| Url                 | Match duplicates by URL field.                                            |
| Shares              | Match duplicates by share permissions.                                    |
| Full                | Match by all fields (title, login, password, url, custom fields, shares). |
| Merge               | Remove duplicates (keeps first record in each group).                     |
| Force               | Delete without confirmation (requires -Merge).                            |
| DryRun              | Simulate removal without deleting (requires -Merge).                      |
| Quiet               | Suppress output (requires -Force).                                        |
| IgnoreSharesOnMerge | Ignore share permissions when matching for merge.                         |
| Scope               | Search scope: vault or enterprise.                                        |
| RefreshData         | Refresh cache (requires -Scope enterprise).                               |
| Format              | Output format: table, csv, json.                                          |
| Output              | Export results to file.                                                   |

**Examples**

```powershell
# Find all records with duplicate titles
Find-KeeperDuplicateRecords -Title
Find duplicated records by: Title

Duplicates Found:
Group Title Login       UID                    RecordOwner                   SharedTo
----- ----- -----       ---                    -----------                   --------
    1 Test1 a@gmail.com a3sADrCdf-E_nmO5M_wGNg test@gmail.com                test2@gmail.com                     
      Test1 a@gmail.com lyzT2qwFYJdvuuOJlwKNjw test@gmail.com                test2@gmail.com                     
      Test1 a@gmail.com nZHx5lJnft4nC3dM32IWxQ test@gmail.com                test2@gmail.com                     

Total: 1 duplicate groups, 3 records


# Find duplicates by specific fields (title, login, password, url, shares)
Find-KeeperDuplicateRecords -Title -Login -Password -Url -Shares
Find duplicated records by: Title, Login, Password, URL, Shares

Duplicates Found:
Group Title Login       Url               UID                    RecordOwner                   SharedTo      
----- ----- -----       ---               ---                    -----------                   --------      
    1 Test1 a@gmail.com https://agoda.com a3sADrC1R-E_nmO5M_wGNg test@gmail.com                test2@gmail.com                 
      Test1 a@gmail.com https://agoda.com lyzT2gZFYJdvuuOJlwKNjw test@gmail.com                test2@gmail.com                 

Total: 1 duplicate groups, 2 records


# Find duplicates by all fields and export to file (supports table, csv, json formats)
Find-KeeperDuplicateRecords -Full -Format csv -Output duplicates.csv
Find duplicated records by: All Fields

Duplicates Found:
Results exported to: duplicates.csv

Group       : 1
Title       : Test1
Login       : a@gmail.com
UID         : a3sADrC1R-E_nmO5M_wGNg
RecordOwner : test@gmail.com                
SharedTo    : test2@gmail.com                

Group       : 
Title       : Test1
Login       : a@gmail.com
UID         : lyzT2gZFYJqwvuuOJlwKNjw
RecordOwner : test@gmail.com                
SharedTo    : test2@gmail.com 


# Simulate merging duplicates with dry run, then merge with force and quiet
Find-KeeperDuplicateRecords -Full -Merge -DryRun
Find duplicated records by: All Fields

DRY RUN MODE: No records will be removed
The following 1 duplicate record(s) will be removed:

Title UID                    Login
----- ---                    -----
Test1 lyzT2gZFYJdqwuOJlwKNjw a@gmail.com

DRY RUN: No records were removed.


# Merge duplicates ignoring share permissions (useful when records have different shares)
Find-KeeperDuplicateRecords -Merge -IgnoreSharesOnMerge
Find duplicated records by: All Fields (ignoring shares for merge)

The following 2 duplicate record(s) will be removed:

Title UID                    Login
----- ---                    -----
Test1 a3sADrC1R-E_nmO5M_wGNg a@gmail.com
Test1 h4wCKmKj1euJALxPBGTxAw a@gmail.com

Removing duplicate records...
Successfully removed 2 duplicate record(s).
Syncing vault...
Vault synced.

```

</details>

<details>

<summary>Python CLI</summary>

**Command** : Coming Soon

</details>

<details>

<summary>Python SDK</summary>

**Function:** Not Supported

</details>

### File Report Command

This command details report of all files that you can access in the vault. Report include Title, Record UID, and File ID

<details>

<summary>DotNet CLI</summary>

**Command:** Coming Soon

</details>

<details>

<summary>Power Commander</summary>

**Command**: `Get-KeeperFileReport`

**Parameters**:

`-Format` Table, csv, Json

`-Output` Path to resulting output file (ignored for "table" format)

`-d` , `-TryDownload` Try downloading every attachment you have access to.

**Example:**

```sh
PS > Get-KeeperFileReport
Scanning vault for file attachments...

Title Record UID             Record Type File ID                File Name     File Size
----- ----------             ----------- -------                ---------     ---------
Test1 2lAzF6Ok4xAfA-DYd6LQVQ login       QxYVAc4F5ezY7H294zoVDA download1.jpg      7151
Test1 xrJ-GWKvgJtyLgIR6Tnqjg login       uLodKnuDXFxzfvLo_XuSDQ download.jpg       4961


PS > Get-KeeperFileReport -TryDownload
Scanning vault for file attachments and verifying download accessibility...

Title Record UID             Record Type File ID                File Name     File Size Downloadable
----- ----------             ----------- -------                ---------     --------- ------------
Test1 2lAzF6Ok4xAfA-DYd6LQVQ login       QxYVAc4F5ezY7H294zoVDA download1.jpg      7151 OK
Test1 xrJ-GWKvgJtyLgIR6Tnqjg login       uLodKnuDXFxzfvLo_XuSDQ download.jpg       4961 OK

```

</details>

<details>

<summary>Python CLI</summary>

**Command**: `file-report`

**Parameters**:

`--format` Table, csv, Json

`--output` Path to resulting output file (ignored for "table" format)

`-d` `--try-download` Try downloading every attachment you have access to.

**Example:**

```sh
My Vault> file-report
Title                   Record UID              Record Type    File ID                 File Name              File Size    
----------------------  ----------------------  -------------  ----------------------  -------------------  -----------    
Commander Service Mode  <RecordUID>                 login          <File_ID>               service_config.yaml          604    
SM Docker Config File   <RecordUID>                 login          <File_ID>           config.json                  262
```

</details>

<details>

<summary>Python SDK</summary>

**Function:**

```python
def prepare_attachment_download(vault: vault_online.VaultOnline,
                                record_uid: str,
                                attachment_name: Optional[str]=None) -> Iterator[AttachmentDownloadRequest]:
    record = vault.vault_data.load_record(record_uid)
    if not record:
        utils.get_logger().warning('Record UID \"%s\" not found.', record_uid)
        return
```

</details>
