Public/New-MITFolderAcl.ps1
function New-MITFolderAcl { <# .SYNOPSIS Create a MOVEit Transfer Folder Acl .LINK Set the Access Controls for a given folder https://docs.ipswitch.com/MOVEit/Transfer2023/Api/Rest/#operation/POSTapi/v1/folders/{Id}/acls-1.0 #> [CmdletBinding()] param ( [Parameter(Mandatory, Position=0, ValueFromPipelineByPropertyName)] [Alias('Id')] [string]$FolderId, [Parameter(Mandatory)] [ValidateSet('None','User','Group','Email')] [string]$Type, [Parameter(Mandatory)] [string]$TypeId, [Parameter()] [string]$NotificationMessage, # The caller can pass-in a hashtable that will be passed straight # to the REST API... [Parameter(Mandatory, ParameterSetName='HashTable')] [hashtable]$Permissions, # ...or, the caller can pass-in a StringArray [Parameter(Mandatory, ParameterSetName = 'StringArray')] [ValidateSet('ReadFiles','WriteFiles','DeleteFiles','ListFiles', 'Notify','AddDeleteSubfolders','Share','Admin','ListUsers')] [string[]]$FolderPermissions, # ...or, the caller can use switches to specify the permissions [Parameter(ParameterSetName='Switches')] [switch]$ReadFiles, [Parameter(ParameterSetName='Switches')] [switch]$WriteFiles, [Parameter(ParameterSetName='Switches')] [switch]$DeleteFiles, [Parameter(ParameterSetName='Switches')] [switch]$ListFiles, [Parameter(ParameterSetName='Switches')] [switch]$Notify, [Parameter(ParameterSetName='Switches')] [switch]$AddDeleteSubfolders, [Parameter(ParameterSetName='Switches')] [switch]$Share, [Parameter(ParameterSetName='Switches')] [switch]$Admin, [Parameter(ParameterSetName='Switches')] [switch]$ListUsers ) try { # Build up the permissions hashtable from the switches. Use -Permissions to set share permissions. switch ($PSCmdlet.ParameterSetName) { 'Switches' { $Permissions = [ordered]@{ readFiles = "$ReadFiles" writeFiles = "$WriteFiles" deleteFiles = "$DeleteFiles" listFiles = "$ListFiles" notify = "$Notify" addDeleteSubfolders = "$AddDeleteSubfolders" share = "$Share" admin = "$Admin" listUsers = "$ListUsers" } } 'StringArray' { $Permissions = [ordered]@{ readFiles = "$($FolderPermissions -contains 'ReadFiles')" writeFiles = "$($FolderPermissions -contains 'WriteFiles')" deleteFiles = "$($FolderPermissions -contains 'DeleteFiles')" listFiles = "$($FolderPermissions -contains 'ListFiles')" notify = "$($FolderPermissions -contains 'Notify')" addDeleteSubfolders = "$($FolderPermissions -contains 'AddDeleteSubfolders')" share = "$($FolderPermissions -contains 'Share')" admin = "$($FolderPermissions -contains 'Admin')" listUsers = "$($FolderPermissions -contains 'ListUsers')" } } } # Build the body for this request. $body = [ordered]@{ type = $Type id = $TypeId notificationMessage = $NotificationMessage permissions = $Permissions } # Setup the params to splat to IRM $irmParams = @{ Resource = "folders/$FolderId/acls" Method = 'Post' ContentType = 'application/json' Body = ($body | ConvertTo-Json) } # Send the request and output the response Invoke-MITRequest @irmParams | Write-MITResponse -TypeName 'MITFolderAcl' } catch { $PSCmdlet.ThrowTerminatingError($PSItem) } } |