Public/Storage/Add-VmsStorage.ps1
function Add-VmsStorage { <# .SYNOPSIS Adds a new Recording Storage configuration to a Recording Server .PARAMETER RecordingServer Specifies the Recording Server to which the storage configuration should be added. This should be a RecordingServer object such as that returned by the Get-RecordingServer cmdlet. .PARAMETER Name Specifies the name of the storage configuration. .PARAMETER Description Specifies the optional description of the storage configuration. .PARAMETER Path Specifies the path under which the new storage folder will be created on the Recording Server or UNC path. .PARAMETER Retention Specifies the retention, as a [timespan], after which the recordings will be deleted, or archived if you choose to add an archive storage to the new storage configuration after it is created. The minimum timespan is 60 minutes, and the maximum is 2147483647 minutes. .PARAMETER MaximumSizeMB Specifies the maximum size for the live storage before data should be archived or deleted. .PARAMETER Default Specifies whether this storage should become the default storage for all devices added to the Recording Server in the future. .PARAMETER EnableSigning Specifies whether digital signatures should be used to sign recordings on the storage configuration. .PARAMETER EncryptionMethod Specifies which encryption method should be used. If no encryption is desired, omit this parameter. .PARAMETER Password Specifies the password used to create the encryption key to use when EncryptionMethod is specified. .EXAMPLE PS C:\> <example usage> Explanation of what the example does #> [CmdletBinding(DefaultParameterSetName = 'WithoutEncryption', SupportsShouldProcess)] [OutputType([VideoOS.Platform.ConfigurationItems.Storage])] param( [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = 'WithoutEncryption')] [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = 'WithEncryption')] [VideoOS.Platform.ConfigurationItems.RecordingServer] $RecordingServer, [Parameter(Mandatory, ParameterSetName = 'WithoutEncryption')] [Parameter(Mandatory, ParameterSetName = 'WithEncryption')] [ValidateNotNullOrEmpty()] [string] $Name, [Parameter(ParameterSetName = 'WithoutEncryption')] [Parameter(ParameterSetName = 'WithEncryption')] [string] $Description, [Parameter(Mandatory, ParameterSetName = 'WithoutEncryption')] [Parameter(Mandatory, ParameterSetName = 'WithEncryption')] [ValidateNotNullOrEmpty()] [string] $Path, [Parameter(ParameterSetName = 'WithoutEncryption')] [Parameter(ParameterSetName = 'WithEncryption')] [ValidateScript({ if ($_ -lt [timespan]::FromMinutes(60)) { throw "Retention must be greater than or equal to one hour" } if ($_ -gt [timespan]::FromMinutes([int]::MaxValue)) { throw "Retention must be less than or equal to $([int]::MaxValue) minutes." } $true })] [timespan] $Retention, [Parameter(Mandatory, ParameterSetName = 'WithoutEncryption')] [Parameter(Mandatory, ParameterSetName = 'WithEncryption')] [ValidateRange(1, [int]::MaxValue)] [int] $MaximumSizeMB, [Parameter(ParameterSetName = 'WithoutEncryption')] [Parameter(ParameterSetName = 'WithEncryption')] [switch] $Default, [Parameter(ParameterSetName = 'WithoutEncryption')] [Parameter(ParameterSetName = 'WithEncryption')] [switch] $EnableSigning, [Parameter(Mandatory, ParameterSetName = 'WithEncryption')] [ValidateSet('Light', 'Strong', IgnoreCase = $false)] [string] $EncryptionMethod, [Parameter(Mandatory, ParameterSetName = 'WithEncryption')] [securestring] $Password ) process { $storageFolder = $RecordingServer.StorageFolder if ($PSCmdlet.ShouldProcess("Recording Server '$($RecordingServer.Name)' at $($RecordingServer.HostName)", "Add new storage named '$($Name)' with retention of $($Retention.TotalHours) hours and a maximum size of $($MaximumSizeMB) MB")) { try { $taskInfo = $storageFolder.AddStorage($Name, $Description, $Path, $EnableSigning, $Retention.TotalMinutes, $MaximumSizeMB) if ($taskInfo.State -ne [videoos.platform.configurationitems.stateenum]::Success) { Write-Error -Message $taskInfo.ErrorText return } } catch { Write-Error $_ return } $storage = [VideoOS.Platform.ConfigurationItems.Storage]::new((Get-ManagementServer).ServerId, $taskInfo.Path) } if ($PSCmdlet.ParameterSetName -eq 'WithEncryption' -and $PSCmdlet.ShouldProcess("Recording Storage '$Name'", "Enable '$EncryptionMethod' Encryption")) { try { $invokeResult = $storage.EnableEncryption($Password, $EncryptionMethod) if ($invokeResult.State -ne [videoos.platform.configurationitems.stateenum]::Success) { throw $invokeResult.ErrorText } $storage = [VideoOS.Platform.ConfigurationItems.Storage]::new((Get-ManagementServer).ServerId, $taskInfo.Path) } catch { [void]$storageFolder.RemoveStorage($taskInfo.Path) Write-Error $_ return } } if ($Default -and $PSCmdlet.ShouldProcess("Recording Storage '$Name'", "Set as default storage configuration")) { try { $invokeResult = $storage.SetStorageAsDefault() if ($invokeResult.State -ne [videoos.platform.configurationitems.stateenum]::Success) { throw $invokeResult.ErrorText } $storage = [VideoOS.Platform.ConfigurationItems.Storage]::new((Get-ManagementServer).ServerId, $taskInfo.Path) } catch { [void]$storageFolder.RemoveStorage($taskInfo.Path) Write-Error $_ return } } if (!$PSBoundParameters.ContainsKey('WhatIf')) { Write-Output $storage } } } |