Administration and Reporting

Use PowerShell object pipelines for account reports and bulk administration. First connect to your site with an identity allowed to read or change the resources involved. Reports contain only the data that identity can access in the selected site and Workspace.

The installed module includes complete task scripts. After importing it, find them with:

$examples = Join-Path (Get-Module FilesCom.PowerShell).ModuleBase 'examples'

Run Get-Help on a script's full path for its parameters. Run scripts under your organization's permitted execution policy; the examples do not change that policy.

Export a Complete Access Inventory

Export-UserAccessInventory.ps1 lists every available page of users, group memberships and folder permissions, then writes a CSV with direct and group-derived permissions. It replaces the output only when the export completes; a listing failure leaves the existing file intact.

& (Join-Path $examples 'Export-UserAccessInventory.ps1') -Path ./user-access.csv

List cmdlets normally stream all pages. -First, -Page or Select-Object -First deliberately limit a listing; leave those out when collecting a complete inventory. Pass -Connection to the script to select an explicit connection instead of the session default.

Provision Accounts and Folder Permissions

Add-FilesProjectMember.ps1 reads a CSV with these columns:

ColumnValue
UsernameUser to create or reuse.
EmailEmail for a new user.
FolderRemote project folder, including any missing parents.
PermissionPermission accepted by New-FilesPermission.

Preview first, then apply the reviewed batch without interactive prompts:

& (Join-Path $examples 'Add-FilesProjectMember.ps1') -Path ./members.csv -WhatIf

$results = & (Join-Path $examples 'Add-FilesProjectMember.ps1') -Path ./members.csv -Confirm:$false
$results | Where-Object Status -NE Provisioned

The preview contacts no Files.com service and cannot check what already exists. An applied run reuses existing users, folders and matching permissions. Rows are independent: earlier changes remain if a later row fails. Inspect Status and Error for each row, including Failed and Skipped; if you decline a confirmation, check which changes were applied. Fix failed rows before rerunning. Returning a Failed row does not itself give the PowerShell process a failing exit code; a scheduled caller must check results. Use -Confirm for an interactive run that should ask before changes.

Manage Group Membership from CSV

For a CSV containing GroupId and UserId, preview additions with the generated membership cmdlet:

Import-Csv -LiteralPath ./memberships.csv | ForEach-Object {
    New-FilesGroupUser -GroupId $_.GroupId -UserId $_.UserId -WhatIf
}

Replace -WhatIf with -Confirm after reviewing the target IDs. Use Get-FilesGroupUser to inspect memberships and Remove-FilesGroupUser for removals. For a batch that should continue past failures, use -ErrorAction Stop inside a per-row try/catch and retain a failed outcome for each row, as the installed provisioning script does. A bulk operation is not one transaction.

To copy every membership from an existing group instead of importing IDs, preview the destination changes:

Get-FilesGroupUser -GroupId 123 -ErrorAction Stop | ForEach-Object {
    New-FilesGroupUser -GroupId 456 -UserId $_.UserId -WhatIf
}

The source listing reads all pages; -WhatIf prevents additions but still reads that source group. Review existing destination memberships before applying, so already-present members are handled deliberately.

Review Inactive Accounts

The inventory CSV includes LastLoginAt and Disabled. For a 30-day inactivity review, compare the last login against that cutoff. For accounts that have never logged in, check their creation date too: an empty LastLoginAt does not establish that the account is old enough. Use your account-retention policy to review the selection before previewing a change to a chosen user:

Set-FilesUser -Id 123 -Disabled $true -WhatIf

Review the selection before applying with -Confirm. Use Set-FilesUser for supported account changes and pass an explicit -Connection and -WorkspaceScope when working across sites or Workspaces. A Workspace selection never grants additional permissions. Choosing a Connection shows the scope pattern; Automation and Scheduled Jobs covers unattended execution and failure reporting.