> For the complete documentation index, see [llms.txt](https://docs.keeper.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keeper.io/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands/nsf-folders-commands.md).

# NSFフォルダコマンド

### 概要

**ロールベースのフォルダ権限を備えた階層型共有サブフォルダ**の導入に伴い、ボルトのフォルダ、共有、権限モデルを一から再構築し、すべてのユーザーとチームがより柔軟でスケールしやすい体験を得られるようになります。

### 利用可能な操作

NSF共有フォルダで利用できる操作の一覧です。

1. [NSF共有フォルダの一覧](/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands.md#list-command)
2. [NSF共有フォルダの取得](/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands.md#get-command)
3. [NSF共有フォルダの追加](#create-folder-command)
4. [NSF共有フォルダの編集](#update-folder-command)
5. [NSF共有フォルダの削除](#remove-folder-command)
6. [NSFの共有](#share-folder-command)
7. [フォルダからのレコードリンク解除](/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands.md#link-record-to-folder-command)
8. [レコードのフォルダへのリンク](/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands.md#link-record-to-folder-command)

{% hint style="info" %}
従来の権限モデルをお使いの場合は、[共有フォルダコマンド](/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/sharing-commands/shared-folder-commands.md)をご参照ください。
{% endhint %}

### フォルダ作成コマンド <a href="#create-folder-command" id="create-folder-command"></a>

v3 APIを使用してKeeper NSFに新しいフォルダを作成します。親フォルダの配下に配置、色の割り当て、親からの権限継承の有無を任意で制御できます。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-mkdir`

**パラメータ:**

| **パラメータ**      | **説明**                         |
| -------------- | ------------------------------ |
| `--name`       | 作成するフォルダ名 (必須)                 |
| `--parent`     | 親フォルダのUID。省略時はKeeper NSFルートに作成 |
| `--color`      | 任意のフォルダ色                       |
| `--no-inherit` | 指定時、新しいフォルダは親から権限を継承しない        |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-mkdir "a12" --parent MQ8GwV3F1sQvGmXt-4zv2A --color green --no-inherit
Folder 'a12' created successfully (UID: SDFAcBPpPETVmRKWyD-qHw).
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();
string rootFolderUid = await vault.CreateKeeperNSFFolder(folderName);
Console.WriteLine($"Created root folder: {rootFolderUid}");
string childFolderUid = await vault.CreateKeeperNSFFolder(
    folderName: folderName,
    parentFolderUid: parentFolderUid,
    color: color);
Console.WriteLine($"Created child folder: {childFolderUid}");
string isolatedFolderUid = await vault.CreateKeeperNSFFolder(
    folderName: folderName,
    parentFolderUid: parentFolderUid,
    color: null,
    inheritPermissions: false);
Console.WriteLine($"Created isolated folder: {isolatedFolderUid}");
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `New-KeeperNSFFolder`

**別名:** `nsf-mkdir`

**パラメータ:**

| **パラメータ**               | **説明**                         |
| ----------------------- | ------------------------------ |
| `-Name`                 | 作成するフォルダ名 (必須)                 |
| `-ParentFolderUid`      | 親フォルダのUID。省略時はKeeper NSFルートに作成 |
| `-Color`                | 任意のフォルダ色                       |
| `-NoInheritPermissions` | 指定時、新しいフォルダは親から権限を継承しない        |

**例:**

{% code expandable="true" %}

```ps1
PS >  New-KeeperNSFFolder -Name "KD12" -Color "red"
Folder 'KD12' created successfully (UID: cdfqw-SRqie3ZT9CdVB1ng).
cdfqw-SRqie3ZT9CdVB1ngqwe
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `nsf-mkdir`

**パラメータ**:

`folder` フォルダ名 (名前にリテラルの `/` を含める場合は `//` を使用)\
`--color` {none, red, orange, yellow, green, blue, gray} フォルダの色\
`--no-inherit` 親フォルダの権限を継承しない

**例**:

```shellscript
My Vault> nsf-mkdir "Test NSF New" --color red
NSF folder created: <folder_uid>
<folder_uid>
My Vault>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `create_nsf_folder`

```python
    FOLDER_PATH = "Projects/Demo"  # Use // for literal / in a name
    COLOR = None  # none, red, orange, yellow, green, blue, gray
    INHERIT_PERMISSIONS = True

    segments = [s.strip() for s in FOLDER_PATH.replace("//", "\x00").split("/") if s.strip()]
    if not segments:
        raise ValueError("Invalid folder path")

    parent_uid = None
    created_uid = None
    for idx, segment in enumerate(segments):
        segment = segment.replace("\x00", "/")
        is_leaf = idx == len(segments) - 1
        existing = nsf_management.find_nsf_child_folder(vault, segment, parent_uid)
        if existing:
            if is_leaf:
                print(f'Folder "{segment}" already exists: {existing}')
                return
            parent_uid = existing
            continue
        result = nsf_management.create_nsf_folder(
            vault,
            segment,
            parent_uid=parent_uid,
            color=COLOR if is_leaf else None,
            inherit_permissions=INHERIT_PERMISSIONS if is_leaf else True,
        )
        created_uid = result.folder_uid
        parent_uid = created_uid
```

</details>

### フォルダ更新コマンド <a href="#update-folder-command" id="update-folder-command"></a>

Keeper NSFフォルダの名前または色を変更します。フォルダはUIDまたは名前で指定できます。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-rndir`

**パラメータ:**

| パラメータ     | 説明                                                                    |
| --------- | --------------------------------------------------------------------- |
| `--name`  | 新しいフォルダ名                                                              |
| `--color` | 新しいフォルダ色: `none`、`red`、`orange`、`yellow`、`green`、`blue`、`gray`、`grey` |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-rndir MQ8GwV3F1sQvGmXt-4zv2A --color yellow         
Keeper NSF folder updated.
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();

if (vault.TryResolveKeeperNSFFolder(folderUidOrName, out var folder))
{
    var result = await vault.UpdateKeeperNSFFolder(
        folderUidOrName: folder.FolderUid,
        newName: newName,
        color: color);

    VaultOnline.ValidateFolderModifyResult(result);
    Console.WriteLine("Keeper NSF folder updated.");
}
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `Set-KeeperNSFFolder`

**別名:** `nsf-rndir`

**パラメータ:**

| パラメータ     | 説明                                                                    |
| --------- | --------------------------------------------------------------------- |
| `-Folder` | フォルダUIDまたは名前 (必須)                                                     |
| `-Name`   | 新しいフォルダ名                                                              |
| `-Color`  | 新しいフォルダ色: `none`、`red`、`orange`、`yellow`、`green`、`blue`、`gray`、`grey` |

**例:**

{% code expandable="true" %}

```ps1
PS > Set-KeeperNSFFolder -Folder cdfqw-SRqie3ZT9CdVB1ng -Name "Updated_name1"
Keeper NSF folder updated.
PS > Set-KeeperNSFFolder -Folder cdfqw-SRqie3ZT9CdVB1ng -Color red            
Keeper NSF folder updated.
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `nsf-rndir`

**パラメータ**:

`folder` フォルダパスまたはUID\
`-n, --name` NAME 新しいフォルダ名\
`--color` {none, red, orange, yellow, green, blue, gray} フォルダの色\
`-q, --quiet` 成功メッセージを表示しない

**例**:

```shellscript
My Vault> nsf-rndir <folder_uid> -n "New Name" --color gray
Folder "Name" has been renamed to "New Name"
My Vault>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `update_nsf_folder`

```python
    FOLDER_UID_OR_NAME = "Demo"
    NEW_NAME = "Demo Renamed"  # Set to None to only change color
    COLOR = None  # none, red, orange, yellow, green, blue, gray

    result = nsf_management.update_nsf_folder(
        vault,
        FOLDER_UID_OR_NAME,
        folder_name=NEW_NAME,
        color=COLOR,
    )
```

</details>

### フォルダ削除コマンド <a href="#remove-folder-command" id="remove-folder-command"></a>

1件以上のKeeper NSFフォルダを削除します。常にプレビューを実行し、影響を表示してから確認を求めます。`-Force` を指定した場合は確認をスキップします。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-rmdir`

**パラメータ:**

| パラメータ                 | 説明                                                            |
| --------------------- | ------------------------------------------------------------- |
| `-o` or `--operation` | `folder-trash` (既定、復元可能) または `delete-permanent` (不可逆のカスケード削除) |
| `-f` or `--force`     | プレビュー後の確認プロンプトをスキップ                                           |
| `--dry-run`           | プレビューのみ。フォルダは削除しない                                            |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-rmdir EhJ3-aznCbIAX9YzG8PIHg          

=== Keeper NSF Folder Remove Preview ===

Folder: EhJ3-aznCbIAX9YzG8PIHg
  Status: Success
  Impact:
    Folders:          1
    Records:          1
    Affected users:   1
    Affected teams:   0
Are you sure you want to remove the folder(s) above? (yes/No) y

Removing folders...

Keeper NSF folder removal completed.
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();

var removals = new List<KeeperNSFFolderRemoval>();
foreach (var name in folderUidsOrNames)
{
    if (vault.TryResolveKeeperNSFFolder(name, out var folder))
    {
        removals.Add(new KeeperNSFFolderRemoval
        {
            FolderUid = folder.FolderUid,
            Operation = KeeperNSFFolderRemoveOperation.FolderTrash,
        });
    }
}

var preview = await vault.RemoveKeeperNSFFolders(removals, dryRun: true);
VaultOnline.ValidateRemoveResponse(preview.PreviewResponse, throwOnWarnings: false);

var confirm = await vault.RemoveKeeperNSFFolders(removals, dryRun: false);
if (!confirm.Confirmed)
{
    throw new InvalidOperationException("Folder removal was not confirmed by the server.");
}

await vault.SyncDown(false);
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `Remove-KeeperNSFFolder`

**別名:** `nsf-rmdir`

**パラメータ:**

| パラメータ        | 説明                                                            |
| ------------ | ------------------------------------------------------------- |
| `-Folder`    | 1件以上のフォルダUIDまたは名前。パイプライン入力を受け付け                               |
| `-Operation` | `folder-trash` (既定、復元可能) または `delete-permanent` (不可逆のカスケード削除) |
| `-Force`     | プレビュー後の確認プロンプトをスキップ                                           |
| `-DryRun`    | プレビューのみ。フォルダは削除しない                                            |

**例:**

{% code expandable="true" %}

```ps1
PS > Remove-KeeperNSFFolder -Folder <folder_uid> -Force

=== Keeper NSF Folder Remove Preview ===

Folder: <folder_uid>
  Status: Success
  Impact:
    Folders:          1
    Records:          0
    Affected users:   1
    Affected teams:   0

Removing folders...

Keeper NSF folder removal completed.
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `Not implemented`

**パラメータ**:

`FOLDER` 削除するフォルダUIDまたは名前 (最大100件)\
`--operation, -o` {folder-trash, delete-permanent} 削除操作 (既定: folder-trash)\
`-q, --quiet` フォルダごとの影響詳細を表示しない\
`--force, -f` プレビュー後の確認をスキップ\
`--dry-run` プレビューのみ。削除しない

**例**:

```shellscript
My Vault> nsf-rmdir <folder_uid>

The following folder will be folder-trash:
  New Name [<folder_uid>]
  This will affect: 1 sub-folder(s), 1 user(s)
Do you want to proceed with the folder deletion? [y/n]: y
Folder removal completed.
My Vault>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `remove_nsf_folders`

```python
    FOLDER_IDENTIFIERS = ["Demo Renamed"]  # UIDs or names
    OPERATION = "folder-trash"  # folder-trash, delete-permanent
    FORCE = True
    DRY_RUN = False

    removals = []
    for identifier in FOLDER_IDENTIFIERS:
        folder_uid = nsf_management.resolve_nsf_folder_uid(vault, identifier)
        if not folder_uid:
            raise ValueError(f'Folder "{identifier}" not found')
        removals.append({"folder_uid": folder_uid, "operation_type": OPERATION})

    preview = nsf_management.remove_nsf_folders(vault, removals, dry_run=True)
    for pr in preview.preview_results:
        print(f"  {pr.item_uid}: {pr.error or 'ok to remove'}")
    if DRY_RUN:
        print("[Dry-run] No folders were deleted.")
        return
    if not FORCE:
        answer = input("Proceed with folder deletion? [y/N]: ").strip().lower()
        if answer not in ("y", "yes"):
            print("Aborted.")
            return
    result = nsf_management.remove_nsf_folders(vault, removals, dry_run=False)
```

</details>

### フォルダ共有コマンド <a href="#share-folder-command" id="share-folder-command"></a>

Keeper NSFフォルダのユーザーアクセスを付与または取り消します。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-share-folder`

**パラメータ:**

| パラメータ        | 説明                                                                                                         |
| ------------ | ---------------------------------------------------------------------------------------------------------- |
| `position 0` | 共有するフォルダのUID (必須)                                                                                          |
| `--action`   | `grant` (既定) または `remove`                                                                                  |
| `--email`    | アクセスを付与または取り消す1件以上のユーザーメールアドレス (必須)                                                                        |
| `--role`     | `grant` 用のアクセスロール: `viewer` (既定)、`shared-manager`、`content-manager`、`content-share-manager`、`full-manager` |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-share-folder MQ8GwV3F1sQvGmXt-4zv2A --action grant --email example@keepersecurity.com --role
 viewer
Granted 'viewer' access to 'example@keepersecurity.com' on folder 'MQ8GwV3F1sQvGmXt-4zv2A'.
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();

foreach (var entry in vault.GetKeeperNSFShortcuts())
{
    Console.WriteLine($"{entry.RecordUid}  {entry.Title}  [{entry.Folders.Count} folders]");
    foreach (var f in entry.Folders)
    {
        Console.WriteLine($"  - {f.Name} ({f.FolderUid})");
    }
}

var keepResult = await vault.KeepKeeperNSFRecordInFolder(recordUid, keepFolderUid);
foreach (var removal in keepResult.Removals)
{
    Console.WriteLine($"{(removal.Success ? "[OK]" : "[FAIL]")} {removal.FolderName} ({removal.FolderUid})");
}
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `Set-KeeperNSFFolderAccess`

**別名:** `nsf-share-folder`

**パラメータ:**

| パラメータ        | 説明                                                                                                         |
| ------------ | ---------------------------------------------------------------------------------------------------------- |
| `-FolderUid` | 共有するフォルダのUID (必須)                                                                                          |
| `-Action`    | `grant` (既定) または `remove`                                                                                  |
| `-Email`     | アクセスを付与または取り消す1件以上のユーザーメールアドレス (必須)                                                                        |
| `-Role`      | `grant` 用のアクセスロール: `viewer` (既定)、`shared-manager`、`content-manager`、`content-share-manager`、`full-manager` |

**例:**

{% code overflow="wrap" expandable="true" %}

```ps1
PS > Set-KeeperNSFFolderAccess -FolderUid wbxwceZdbPVcyuR-7IybjA -Email example1@keepersecurity.com  -Role viewer
Granted 'viewer' access to 'example1@keepersecurity.com' on folder 'wbxwceZdbPVcyuR-7IybjA'.
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `nsf-share-folder`

**パラメータ:**

`folder` フォルダUIDまたは名前\
`-a, --action` {grant, remove} アクセスの付与 (既定) または取り消し\
`-e, --email` ユーザーメール、チーム名/UID、またはフォルダのアクセサ全員の @existing\
`-r, --role` {viewer, share-manager, content-manager, content-share-manager, full-manager}\
`--expire-at` TIMESTAMP\
`--expire-in` PERIOD

**例:**

```
My Vault> nsf-share-folder -a grant -r full-manager -e user@keepersecurity.com <folder_uid>
user@keepersecurity.com: Access granted successfully
My Vault>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `grant_nsf_folder_access`

```python
    FOLDER_UID_OR_NAME = "Projects"
    RECIPIENT_EMAIL = "colleague@example.com"
    ACTION = "grant"  # grant or remove
    ROLE = "viewer"  # viewer, share-manager, content-manager, content-share-manager, full-manager
    EXPIRATION_TIMESTAMP = None  # Unix ms; optional for grant

    if ACTION == "remove":
        result = nsf_sharing.revoke_nsf_folder_access(
            vault, FOLDER_UID_OR_NAME, RECIPIENT_EMAIL
        )
    else:
        result = nsf_sharing.grant_nsf_folder_access(
            vault,
            FOLDER_UID_OR_NAME,
            RECIPIENT_EMAIL,
            role=ROLE,
            expiration_timestamp=EXPIRATION_TIMESTAMP,
        )
```

</details>

### レコードのフォルダリンクコマンド <a href="#link-record-to-folder-command" id="link-record-to-folder-command"></a>

Keeper NSFレコードをKeeper NSFフォルダにリンクします。レコードはコピーされず、元のフォルダと宛先フォルダの両方に表示されます (ハードリンクに類似)。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-ln`

**パラメータ:**

| パラメータ        | 説明                                       |
| ------------ | ---------------------------------------- |
| `position 0` | レコードUIDまたはタイトル (必須)                      |
| `position 1` | 配置先フォルダUID、名前、またはKeeper NSFルートの `/` (必須) |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-ln BZ--Sa17UztyFkh5JWWgBg  MQ8GwV3F1sQvGmXt-4zv2A                 
Keeper NSF record linked into folder.
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();

var result = await vault.LinkKeeperNSFRecordToFolder(
    recordUidOrTitle: recordUidOrTitle,
    folderUidOrName:  folderUidOrName);

VaultOnline.ValidateFolderRecordUpdateResult(result);
await vault.SyncDown(false);
Console.WriteLine("Keeper NSF record linked into folder.");
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `Link-KeeperNSFRecord`

**別名:** `nsf-ln`

**パラメータ:**

| パラメータ     | 説明                                       |
| --------- | ---------------------------------------- |
| `-Record` | レコードUIDまたはタイトル (必須)                      |
| `-Folder` | 配置先フォルダUID、名前、またはKeeper NSFルートの `/` (必須) |

**例:**

{% code overflow="wrap" expandable="true" %}

```powershell
PS > Link-KeeperNSFRecord -Record "0UWhXh5vjjlpaw9BpFR0mA" -Folder "ynvMwZsAU5JtTn5RSr1F0Q"
Keeper NSF record linked into folder.
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `nsf-ln`

**パラメータ**:

`src` レコードUIDまたはタイトル\
`dst` 配置先フォルダUIDまたは名前

**例**:

```shellscript
My Vault> nsf-ln <record_uid> <folder_uid>
Record <record_uid> linked to folder <folder_uid>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `link_nsf_record_to_folder`

```python
    RECORD_UID_OR_TITLE = "My NSF Login"
    FOLDER_UID_OR_NAME = "Archive"

    result = nsf_folder_records.link_nsf_record_to_folder(
        vault, RECORD_UID_OR_TITLE, FOLDER_UID_OR_NAME
    )
    print(f"Record {result.record_uid} linked to folder {result.folder_uid}")
```

</details>

### レコード削除/リンク解除コマンド <a href="#remove-unlink-record-command" id="remove-unlink-record-command"></a>

v3 remove APIを使用して1件以上のKeeper NSFレコードを削除します。常にプレビューを実行し、影響を表示してから確認を求めます。`-Force` を指定した場合は確認をスキップします。

<details>

<summary>DotNet CLI</summary>

**コマンド:** `nsf-rm`

**パラメータ:**

| パラメータ                 | 説明                                             |
| --------------------- | ---------------------------------------------- |
| `--folder`            | 操作の文脈となるフォルダUIDまたは名前 (`unlink` では必須)           |
| `-o` or `--operation` | `owner-trash` (既定)、`folder-trash`、または `unlink` |
| `-f` or `--force`     | プレビュー後の確認プロンプトをスキップ                            |
| `--dry-run`           | プレビューのみ。レコードは削除しない                             |

**例:**

{% code expandable="true" %}

```bash
My Vault> nsf-rm NBPPHWMkzjss3z_WacXoIA

=== Keeper NSF Remove Preview ===

Record: NBPPHWMkzjss3z_WacXoIA
  Folder context: AAAAAAAAAAAAAAAAAALjjA
  Status: Success
  Impact:
    Folders:          0
    Records:          1
    Affected users:   1
    Affected teams:   0
    Other locations:  1
    Warning: Record will be removed from all folders and moved to owner's trash
Are you sure you want to move the record(s) above to your trash? (yes/No) yes

Removing records...

Keeper NSF record removal completed.
```

{% endcode %}

</details>

<details>

<summary>DotNet SDK</summary>

**メソッド:**

```csharp
var vault = new VaultOnline(auth);
await vault.SyncDown();

var removals = new List<KeeperNSFRecordRemoval>();
foreach (var name in recordUidsOrTitles)
{
    if (!vault.TryResolveKeeperNSFRecord(name, out var record)) continue;

    vault.TryResolveKeeperNSFRecordRemovalFolder(
        record.RecordUid,
        folderUidOrName,
        KeeperNSFRecordRemoveOperation.FolderTrash,
        out var folderUid);

    removals.Add(new KeeperNSFRecordRemoval
    {
        RecordUid = record.RecordUid,
        FolderUid = folderUid,
        Operation = KeeperNSFRecordRemoveOperation.FolderTrash,
    });
}

var preview = await vault.RemoveKeeperNSFRecords(removals, dryRun: true);
VaultOnline.ValidateRemoveResponse(preview.PreviewResponse, throwOnWarnings: false);

var confirm = await vault.RemoveKeeperNSFRecords(removals, dryRun: false);
if (!confirm.Confirmed)
{
    throw new InvalidOperationException("Record removal was not confirmed by the server.");
}

await vault.SyncDown(false);
```

</details>

<details>

<summary>Power Commander</summary>

**コマンド:** `Remove-KeeperNSFRecord`

**別名:** `nsf-rm`

**パラメータ:**

| パラメータ        | 説明                                             |
| ------------ | ---------------------------------------------- |
| `-Record`    | 1件以上のレコードUIDまたはタイトル。パイプライン入力を受け付け              |
| `-Folder`    | 操作の文脈となるフォルダUIDまたは名前 (`unlink` では必須)           |
| `-Operation` | `owner-trash` (既定)、`folder-trash`、または `unlink` |
| `-Force`     | プレビュー後の確認プロンプトをスキップ                            |
| `-DryRun`    | プレビューのみ。レコードは削除しない                             |

**例:**

{% code expandable="true" %}

```ps1
PS > Remove-KeeperNSFRecord -Record LXU5SAWkCZMTnqeqNBWJNyGw

=== Keeper NSF Remove Preview ===

Record: LXU5SkCZMTnqeqNBWJNyGw
  Folder context: AA123424ASSGREGGBJYAAAAALjjA
  Status: Success
  Impact:
    Folders:          0
    Records:          1
    Affected users:   1
    Affected teams:   0
    Other locations:  1
    Warning: Record will be removed from all folders and moved to owner's trash
Are you sure you want to move the record(s) above to your trash? (yes/No): y

Removing records...

Keeper NSF record removal completed.
```

{% endcode %}

</details>

<details>

<summary>Python CLI</summary>

**コマンド:** `nsf-rm`

**パラメータ**:

`RECORD` 削除するレコードUIDまたはタイトル (最大500件)\
`--folder` FOLDER 操作コンテキスト用のフォルダUIDまたは名前\
`--operation, -o` {owner-trash,folder-trash,unlink}\
削除操作 (既定: owner-trash)\
`--force, -f` プレビュー後の確認をスキップ\
`--dry-run` プレビューのみ。削除しない

**例**:

```shellscript
My Vault> nsf-ln <record_uid> <folder_uid>
Record <record_uid> linked to folder <folder_uid>
```

</details>

<details>

<summary>Python SDK</summary>

**関数:** `remove_nsf_records`

```python
    RECORD_IDENTIFIERS = ["My NSF Login"]  # UIDs or titles
    OPERATION = "owner-trash"  # owner-trash, folder-trash, unlink
    FOLDER_UID_OR_NAME = None  # Required when OPERATION is unlink
    FORCE = True  # Skip confirmation after preview
    DRY_RUN = False  # Preview only

    if OPERATION == "unlink" and not FOLDER_UID_OR_NAME:
        raise ValueError('--folder is required when operation is "unlink"')

    removals = nsf_management.build_nsf_record_removals(
        vault,
        RECORD_IDENTIFIERS,
        operation_type=OPERATION,
        folder_uid=FOLDER_UID_OR_NAME,
    )
    preview = nsf_management.remove_nsf_records(vault, removals, dry_run=True)
    for pr in preview.preview_results:
        print(f"  {pr.item_uid}: {pr.error or 'ok to remove'}")
    if DRY_RUN:
        print("[Dry-run] No records were deleted.")
        return
    if not FORCE:
        answer = input("Proceed with deletion? [y/N]: ").strip().lower()
        if answer not in ("y", "yes"):
            print("Aborted.")
            return
    result = nsf_management.remove_nsf_records(vault, removals, dry_run=False)
    if result.confirmed:
        print("Record removal completed.")
    else:
        print("Record removal was not confirmed by the server.")
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-sdk/keeper-commander-sdks/sdk-command-reference/nested-shared-folder-commands/nsf-folders-commands.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
