en-US/MilestonePSTools-help.xml

<?xml version="1.0" encoding="utf-8"?>
<helpItems schema="maml" xmlns="http://msh">
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Add-VmsArchiveStorage</command:name>
      <command:verb>Add</command:verb>
      <command:noun>VmsArchiveStorage</command:noun>
      <maml:description>
        <maml:para>Adds a new Archive Storage configuration to an existing live recording storage configuration.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Adds a new Archive Storage configuration to an existing live recording storage configuration. Note that you cannot add archives with a shorter retention than an existing archive on the same storage configuration.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Add-VmsArchiveStorage</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Storage</maml:name>
          <maml:description>
            <maml:para>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.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
          <dev:type>
            <maml:name>Storage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the storage configuration.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies the optional description of the storage configuration.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path under which the new storage folder will be created on the Recording Server or UNC path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
          <maml:name>Retention</maml:name>
          <maml:description>
            <maml:para>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.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
          <dev:type>
            <maml:name>TimeSpan</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="5" aliases="none">
          <maml:name>MaximumSizeMB</maml:name>
          <maml:description>
            <maml:para>Specifies the maximum size for the live storage before data should be archived or deleted.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="6" aliases="none">
          <maml:name>TargetFramerate</maml:name>
          <maml:description>
            <maml:para>Specifies the desired framerate for recordings stored in this archive storage area. WARNING: Framerate reduction when the codec is anything besides MJPEG results in keyframes only, which is usually 1 FPS.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>5</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ReduceFramerate</maml:name>
          <maml:description>
            <maml:para>Specifies that the framerate should be reduced when taking recordings from the previous live/archive storage area WARNING: Framerate reduction when the codec is anything besides MJPEG results in keyframes only, which is usually 1 FPS.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies the optional description of the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="5" aliases="none">
        <maml:name>MaximumSizeMB</maml:name>
        <maml:description>
          <maml:para>Specifies the maximum size for the live storage before data should be archived or deleted.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path under which the new storage folder will be created on the Recording Server or UNC path.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ReduceFramerate</maml:name>
        <maml:description>
          <maml:para>Specifies that the framerate should be reduced when taking recordings from the previous live/archive storage area WARNING: Framerate reduction when the codec is anything besides MJPEG results in keyframes only, which is usually 1 FPS.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
        <maml:name>Retention</maml:name>
        <maml:description>
          <maml:para>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.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
        <dev:type>
          <maml:name>TimeSpan</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Storage</maml:name>
        <maml:description>
          <maml:para>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.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
        <dev:type>
          <maml:name>Storage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="6" aliases="none">
        <maml:name>TargetFramerate</maml:name>
        <maml:description>
          <maml:para>Specifies the desired framerate for recordings stored in this archive storage area. WARNING: Framerate reduction when the codec is anything besides MJPEG results in keyframes only, which is usually 1 FPS.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>5</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ArchiveStorage</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer | Get-VmsArchiveStorage -Name '90 Day Retention' | Add-VmsArchiveStorage -Name 'Last 80 Days' -Path C:\MediaDatabase\ -Retention (New-Timespan -Days 90) -MaximumSizeMB (10TB/1MB)</dev:code>
        <dev:remarks>
          <maml:para>Adds an archive to every storage configuration on every recording server where the name is '90 Day Retention'. The storage and archive names imply that the first 10 days are in the live drive, and the archive contains the last 80 days. The retention of the archive is set to 90 days because that value specifies how old the recordings in that container must be before they are eligible for deleting or archiving to the next archive in the chain. We use the helpful TB and MB multipliers to specify the maximum size of 10TB.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/add-vmsarchivestorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Add-VmsFailoverGroup</command:name>
      <command:verb>Add</command:verb>
      <command:noun>VmsFailoverGroup</command:noun>
      <maml:description>
        <maml:para>Adds a failover group in the current Milestone XProtect VMS site.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The `Add-VmsFailoverGroup` cmdlet adds a new failover group which can contain one or more failover recording servers.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Add-VmsFailoverGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the failover group name.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Optional description for the failover group to display in Management Client.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Optional description for the failover group to display in Management Client.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the failover group name.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.FailoverGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
 
Add-VmsFailoverGroup -Name 'FO Group 1' -Description 'First failover group'
Add-VmsFailoverGroup -Name 'FO Group 2' -Description 'Second failover group'</dev:code>
        <dev:remarks>
          <maml:para>Prompts user to login to a Milestone VMS, then creates two failover groups.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/add-vmsfailovergroup/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Add-VmsHardware</command:name>
      <command:verb>Add</command:verb>
      <command:noun>VmsHardware</command:noun>
      <maml:description>
        <maml:para>Adds a new hardware device, typically a camera, to a Milestone XProtect Recording Server.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Adds a new hardware device, typically a camera, to a Milestone XProtect Recording Server. Capable of adding multiple cameras in a group if a collection of hardware scan results from the Start-VmsHardwareScan command are provided in the HardwareScan parameter. Otherwise one camera will be added at a time.</maml:para>
      <maml:para>Each successfully added hardware device will be returned to the pipeline in a fully resolved Hardware object. With that object you can continue to set properties on the hardware or child camera, microphone, speaker and other child device types that are present.</maml:para>
      <maml:para>IMPORTANT: This command does not add any devices to a device group like the Management Client does. You must put devices into device groups yourself.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Add-VmsHardware</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Credential</maml:name>
          <maml:description>
            <maml:para>Specifies an admin username and password to use with the camera at the given address.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
          <dev:type>
            <maml:name>PSCredential</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DriverNumber</maml:name>
          <maml:description>
            <maml:para>Specifies the driver number for the Milestone device pack driver to use with the camera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the camera(s) should be added even if they already exist on another Recording Server on the site.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="Address">
          <maml:name>HardwareAddress</maml:name>
          <maml:description>
            <maml:para>Specifies the IP or hostname of the hardware to be added. This should be in URI format. Example: http://192.168.1.100</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Uri</command:parameterValue>
          <dev:type>
            <maml:name>Uri</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>HardwareDriverPath</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone Configuration API path value for the driver to use. DriverNumber is more user-friendly but if you have the path, you can use that instead. Example: HardwareDriver[ada01bd5-fc87-4bcb-8e7e-145cc755f502]</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name to be assigned to the hardware after it has been added. The default behavior is to use the camera make, model and IP.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies the RecordingServer object (from Get-RecordingServer for example) to which the camera should be added. This is only relevant for the manual parameter set. If using hardware scan results as input to Add-VmsHardware, the Recording Server is retrieved from the scan result object.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SkipConfig</maml:name>
          <maml:description>
            <maml:para>Specifies that no additional configuration should be performed once the hardware has been added. This means the hardware and devices will keep their default names, and will be disabled until you enable them yourself. You might do this if you plan to make several of your own configuration changes once the device is added and that might save some time especially when working with a large number of devices.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Add-VmsHardware</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the camera(s) should be added even if they already exist on another Recording Server on the site.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>HardwareScan</maml:name>
          <maml:description>
            <maml:para>The results of Start-VmsHardwareScan which contain all the required information to add hardware including the address, username, password, and driver.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">VmsHardwareScanResult[]</command:parameterValue>
          <dev:type>
            <maml:name>VmsHardwareScanResult[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name to be assigned to the hardware after it has been added. The default behavior is to use the camera make, model and IP.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SkipConfig</maml:name>
          <maml:description>
            <maml:para>Specifies that no additional configuration should be performed once the hardware has been added. This means the hardware and devices will keep their default names, and will be disabled until you enable them yourself. You might do this if you plan to make several of your own configuration changes once the device is added and that might save some time especially when working with a large number of devices.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Credential</maml:name>
        <maml:description>
          <maml:para>Specifies an admin username and password to use with the camera at the given address.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
        <dev:type>
          <maml:name>PSCredential</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DriverNumber</maml:name>
        <maml:description>
          <maml:para>Specifies the driver number for the Milestone device pack driver to use with the camera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Specifies that the camera(s) should be added even if they already exist on another Recording Server on the site.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="Address">
        <maml:name>HardwareAddress</maml:name>
        <maml:description>
          <maml:para>Specifies the IP or hostname of the hardware to be added. This should be in URI format. Example: http://192.168.1.100</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Uri</command:parameterValue>
        <dev:type>
          <maml:name>Uri</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>HardwareDriverPath</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone Configuration API path value for the driver to use. DriverNumber is more user-friendly but if you have the path, you can use that instead. Example: HardwareDriver[ada01bd5-fc87-4bcb-8e7e-145cc755f502]</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>HardwareScan</maml:name>
        <maml:description>
          <maml:para>The results of Start-VmsHardwareScan which contain all the required information to add hardware including the address, username, password, and driver.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">VmsHardwareScanResult[]</command:parameterValue>
        <dev:type>
          <maml:name>VmsHardwareScanResult[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name to be assigned to the hardware after it has been added. The default behavior is to use the camera make, model and IP.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies the RecordingServer object (from Get-RecordingServer for example) to which the camera should be added. This is only relevant for the manual parameter set. If using hardware scan results as input to Add-VmsHardware, the Recording Server is retrieved from the scan result object.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>SkipConfig</maml:name>
        <maml:description>
          <maml:para>Specifies that no additional configuration should be performed once the hardware has been added. This means the hardware and devices will keep their default names, and will be disabled until you enable them yourself. You might do this if you plan to make several of your own configuration changes once the device is added and that might save some time especially when working with a large number of devices.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Hardware</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Hardware</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>This command does not add any cameras or other devices to a camera group. It is expected that you will do this yourself if you wish.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>$recorder = Get-RecordingServer | Out-GridView -OutputMode Single
$recorder | Add-VmsHardware -HardwareAddress 10.1.1.100 -Name 'Parking' -DriverNumber 806 -Credential (Get-Credential)</dev:code>
        <dev:remarks>
          <maml:para>Prompts to enter a username and password (thanks to Get-Credential) and then adds the Axis camera at 10.1.1.100 to the Recording Server in $recorder. Once added, the new hardware will be returned to the pipeline and in this case shown in the terminal like you see below.</maml:para>
          <maml:para>Name Address Model Enabled LastModified Id ---- ------- ----- ------- ------------ -- Parking http://10.1.1.100/ AXIS M1065-L Network Camera True 10/5/2021 9:50:21 PM A833F561-7830-41B4-BEEF-C1F868939D17</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>$recorder = Get-RecordingServer | Out-GridView -OutputMode Single
$credential = [pscredential]::new('root', ('pass' | ConvertTo-SecureString -AsPlainText -Force))
$recorder | Add-VmsHardware -HardwareAddress 10.1.1.100 -Name 'Parking' -DriverNumber 806 -Credential $credential</dev:code>
        <dev:remarks>
          <maml:para>Exactly the same as Example #1 however in this example we create the credential from code. This uses plain text and is generally frowned upon for security reasons. Ideally you can prompt the user to enter credentials, or you store credentials in a safe place such as a secret store of some kind. Microsoft have provided a handy secret management framework with plugin support called "Microsoft.PowerShell.SecretManagement" enabling you to easily access secret management tools like KeePass and others.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>$newHardware = Add-VmsHardware -HardwareScan (Start-VmsHardwareScan -RecordingServer (Get-RecordingServer) -Express)</dev:code>
        <dev:remarks>
          <maml:para>This one-liner will get all recording servers in the site, and start an express hardware scan on them all. The completed hardware scans will be passed into Add-VmsHardware, and all the newly added hardware from all recording servers will be saved in the $newHardware variable.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/add-vmshardware/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Add-VmsStorage</command:name>
      <command:verb>Add</command:verb>
      <command:noun>VmsStorage</command:noun>
      <maml:description>
        <maml:para>Adds a new live Recording Storage configuration to a Recording Server</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Adds a new live Recording Storage configuration to a Recording Server</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Add-VmsStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Default</maml:name>
          <maml:description>
            <maml:para>Specifies whether this storage should become the default storage for all devices added to the Recording Server in the future.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies the optional description of the storage configuration.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EnableSigning</maml:name>
          <maml:description>
            <maml:para>Specifies whether digital signatures should be used to sign recordings on the storage configuration.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EncryptionMethod</maml:name>
          <maml:description>
            <maml:para>Specifies which encryption method should be used. If no encryption is desired, omit this parameter.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Light</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Strong</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>MaximumSizeMB</maml:name>
          <maml:description>
            <maml:para>Specifies the maximum size for the live storage before data should be archived or deleted.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the storage configuration.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Password</maml:name>
          <maml:description>
            <maml:para>Specifies the password used to create the encryption key to use when EncryptionMethod is specified.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">SecureString</command:parameterValue>
          <dev:type>
            <maml:name>SecureString</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path under which the new storage folder will be created on the Recording Server or UNC path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>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.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Retention</maml:name>
          <maml:description>
            <maml:para>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.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
          <dev:type>
            <maml:name>TimeSpan</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Default</maml:name>
        <maml:description>
          <maml:para>Specifies whether this storage should become the default storage for all devices added to the Recording Server in the future.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies the optional description of the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EnableSigning</maml:name>
        <maml:description>
          <maml:para>Specifies whether digital signatures should be used to sign recordings on the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EncryptionMethod</maml:name>
        <maml:description>
          <maml:para>Specifies which encryption method should be used. If no encryption is desired, omit this parameter.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>MaximumSizeMB</maml:name>
        <maml:description>
          <maml:para>Specifies the maximum size for the live storage before data should be archived or deleted.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Password</maml:name>
        <maml:description>
          <maml:para>Specifies the password used to create the encryption key to use when EncryptionMethod is specified.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">SecureString</command:parameterValue>
        <dev:type>
          <maml:name>SecureString</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path under which the new storage folder will be created on the Recording Server or UNC path.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>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.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Retention</maml:name>
        <maml:description>
          <maml:para>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.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
        <dev:type>
          <maml:name>TimeSpan</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Storage</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>&lt;example usage&gt;</dev:code>
        <dev:remarks>
          <maml:para>Explanation of what the example does</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/add-vmsstorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Clear-VmsSiteInfo</command:name>
      <command:verb>Clear</command:verb>
      <command:noun>VmsSiteInfo</command:noun>
      <maml:description>
        <maml:para>Clears all site information properties.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet clears all site information properties which are displayed in the Management Client under Site / Basics / Site Information.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Clear-VmsSiteInfo</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptAula
Clear-VmsSiteInfo -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>After connecting to the Management Server, this command shows what would happen if the site information was cleared. Specifically, it would tell you what fields would be removed if you were to run the command without the -WhatIf switch.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/clear-vmssiteinfo/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Clear-VmsView</command:name>
      <command:verb>Clear</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Clears all cameras or other view items from one or more XProtect Smart Client views.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This command removes all view items from the view, leaving an empty view layout with the same original layout.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Clear-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="1" aliases="none">
          <maml:name>View</maml:name>
          <maml:description>
            <maml:para>Specifies one or more views to be cleared of all view items.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
          <dev:type>
            <maml:name>View[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the updated view should be passed on through the pipeline, or out to the terminal.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the updated view should be passed on through the pipeline, or out to the terminal.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="1" aliases="none">
        <maml:name>View</maml:name>
        <maml:description>
          <maml:para>Specifies one or more views to be cleared of all view items.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
        <dev:type>
          <maml:name>View[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$view = Get-VmsView | Out-GridView -OutputMode Single
$view | Clear-VmsView -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we prompt for a view selection, and then clear the view of all view items, except the -WhatIf parameter is present, so you will only see a message indicating the change that would occur if you omitted the -WhatIf switch.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>ConvertFrom-ConfigurationApiProperties</command:name>
      <command:verb>ConvertFrom</command:verb>
      <command:noun>ConfigurationApiProperties</command:noun>
      <maml:description>
        <maml:para>Converts a complex Milestone Configuration API propery collection into a hashtable</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>When accessing property collections like $hardware.HardwareDriverSettingsFolder.HardwareDriverSettings[0].HardwareDriverSettingsChildItems[0] it can be difficult to figure out how to access the values, and how to find the display names of those values for "enum" style properties. The property keys also have verbose names like stream:0.0.1/FPS/&lt;guid&gt; for example.</maml:para>
      <maml:para>This function accepts a property collection, and returns a hashtable with easy to read key names, and either raw values, or "display" values.</maml:para>
      <maml:para>If Get-Culture returns anything other than en-US, and you use the UseDisplayNames switch, a translated value will be provided if available.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>ConvertFrom-ConfigurationApiProperties</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Properties</maml:name>
          <maml:description>
            <maml:para>Specifies a Properties collection as found on $hardware.HardwareDriverSettingsFolder.HardwareDriverSettings[0].HardwareDriverSettingsChildItems[0]</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ConfigurationApiProperties</command:parameterValue>
          <dev:type>
            <maml:name>ConfigurationApiProperties</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseDisplayNames</maml:name>
          <maml:description>
            <maml:para>Specifies that the display name for each value should be returned.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Properties</maml:name>
        <maml:description>
          <maml:para>Specifies a Properties collection as found on $hardware.HardwareDriverSettingsFolder.HardwareDriverSettings[0].HardwareDriverSettingsChildItems[0]</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ConfigurationApiProperties</command:parameterValue>
        <dev:type>
          <maml:name>ConfigurationApiProperties</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>UseDisplayNames</maml:name>
        <maml:description>
          <maml:para>Specifies that the display name for each value should be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>ConvertFrom-ConfigurationApiProperties -Properties (Get-Hardware | Select-Object -First 1).HardwareDriverSettingsFolder.HardwareDriverSettings[0].HardwareDriverSettingsChildItems[0].Properties -UseDisplayNames</dev:code>
        <dev:remarks>
          <maml:para>Gets general settings properties from the first hardware device returned by Get-Hardware, and returns a hashtable with the keys and display values.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/convertfrom-configurationapiproperties/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>ConvertFrom-ConfigurationItem</command:name>
      <command:verb>ConvertFrom</command:verb>
      <command:noun>ConfigurationItem</command:noun>
      <maml:description>
        <maml:para>Converts a generic Configuration API item to the strongly-typed version of that object type.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Converts a generic Configuration API item to the strongly-typed version of that object type. For example, a Configuration Item representing a camera has an ItemType of Camera, and a path like 'Camera[a6756a0e-886a-4050-a5a5-81317743c32a]'. Some commands require a strongly-typed Camera object as a parameter, so if you have a generic item like you get from Find-ConfigurationItem or Get-ConfigurationItem, you can convert that item to a strongly typed class by piping that item to ConvertFrom-ConfigurationItem.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>ConvertFrom-ConfigurationItem</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone Configuration API 'Path' value of the configuration item. For example, 'Hardware[a6756a0e-886a-4050-a5a5-81317743c32a]' where the guid is the ID of an existing Hardware item.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>ItemType</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone 'ItemType' value such as 'Camera', 'Hardware', or 'InputEvent'</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
        <maml:name>ItemType</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone 'ItemType' value such as 'Camera', 'Hardware', or 'InputEvent'</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone Configuration API 'Path' value of the configuration item. For example, 'Hardware[a6756a0e-886a-4050-a5a5-81317743c32a]' where the guid is the ID of an existing Hardware item.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>Not all ItemType's available through the Configuration API have matching "strongly typed" classes, so for less commonly used item types, you may see an error when using this function.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Find-ConfigurationItem -ItemType Camera -EnableFilter Enabled | ConvertFrom-ConfigurationItem</dev:code>
        <dev:remarks>
          <maml:para>Finds all enabled cameras and converts them to Camera objects. This should work faster than 'Get-Hardware | Where-Object Enabled | Get-Camera | Where-Object Enabled'</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/convertfrom-configurationitem/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>ConvertFrom-GisPoint</command:name>
      <command:verb>ConvertFrom</command:verb>
      <command:noun>GisPoint</command:noun>
      <maml:description>
        <maml:para>Converts Milestone's internal representation of a GPS coordinate to a [System.Device.Location.GeoCoordinate] object.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Milestone stores GPS coordinates as X,Y coordinates on a standard coordinate plane. For example, the coordinates 47.25726, -122.51608 are represented in Milestone as "POINT (-122.51608 47.25726)" where the latitude and longitude are reversed. An unset coordinate for a camera is represented as "POINT EMPTY".</maml:para>
      <maml:para>This function converts Milestone's GisPoint property string into a [System.Device.Location.GeoCoordinate] object which has a ToString() method which will properly format the coordinates. If the coordinates are unset in Milestone, then you will receive the same object but the position will be defined as "Unknown".</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>ConvertFrom-GisPoint</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>GisPoint</maml:name>
          <maml:description>
            <maml:para>Specifies the GisPoint value to convert to a GeoCoordinate. Milestone stores GisPoint data in the format "POINT ([longitude] [latitude])" or "POINT EMPTY".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>GisPoint</maml:name>
        <maml:description>
          <maml:para>Specifies the GisPoint value to convert to a GeoCoordinate. Milestone stores GisPoint data in the format "POINT ([longitude] [latitude])" or "POINT EMPTY".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Device.Location.GeoCoordinate</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Select-Camera | ConvertFrom-GisPoint</dev:code>
        <dev:remarks>
          <maml:para>Opens a camera selection dialog and pipes the camera to ConvertFrom-GisPoint. The GisPoint parameter accepts the value from the pipeline by property name and the Camera object's coordinates are stored in a property with a matching name.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/convertfrom-gispoint/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>ConvertFrom-Snapshot</command:name>
      <command:verb>ConvertFrom</command:verb>
      <command:noun>Snapshot</command:noun>
      <maml:description>
        <maml:para>Converts from the output provided by Get-Snapshot to a [System.Drawing.Image] object.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Converts from the output provided by Get-Snapshot to a [System.Drawing.Image] object. Don't forget to call Dispose() on Image when you're done with it!</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>ConvertFrom-Snapshot</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Bytes">
          <maml:name>Content</maml:name>
          <maml:description>
            <maml:para>{{ Fill Content Description }}</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Byte[]</command:parameterValue>
          <dev:type>
            <maml:name>Byte[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Bytes">
        <maml:name>Content</maml:name>
        <maml:description>
          <maml:para>{{ Fill Content Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Byte[]</command:parameterValue>
        <dev:type>
          <maml:name>Byte[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>Accepts a byte array, and will accept the byte array from Get-Snapshot by property name. The property name for</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>Accepts a byte array, and will accept the byte array from Get-Snapshot by property name. The property name for</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>Accepts a byte array, and will accept the byte array from Get-Snapshot by property name. The property name for</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>[System.Drawing.Image]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>[System.Drawing.Image]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Don't forget to call Dispose() when you're done with the image!</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>$image = Select-Camera | Get-Snapshot -Live | ConvertFrom-Snapshot</dev:code>
        <dev:remarks>
          <maml:para>Get's a live snapshot from the camera selected from the camera selection dialog, converts it to a System.Drawing.Image object and saves it to $image</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/convertfrom-snapshot/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>ConvertTo-GisPoint</command:name>
      <command:verb>ConvertTo</command:verb>
      <command:noun>GisPoint</command:noun>
      <maml:description>
        <maml:para>Translates coordinates to a Milestone GisPoint value suitable for updating GPS coordinates on a Milestone device.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>GPS coordinates in Milestone are stored an X,Y order in the format "POINT (X Y)". As such, if you have a latitude and longitude value, you must reverse them and format them properly for Milestone to accept the new GisPoint value.</maml:para>
      <maml:para>In some cases, the GisPoint property can have a third value representing altitude or elevation. This is expressed in the format "POINT (X Y Z)".</maml:para>
      <maml:para>If the Coordinate object, Coordinates string, or Altitude value are provided, then the cmdlet will output a three-part GisPoint value.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>ConvertTo-GisPoint</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Altitude</maml:name>
          <maml:description>
            <maml:para>Specifies the altitude in meters, relative to sea level.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Latitude</maml:name>
          <maml:description>
            <maml:para>A latitude value in the form of a double.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Longitude</maml:name>
          <maml:description>
            <maml:para>A longitude value in the form of a double.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>ConvertTo-GisPoint</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Coordinate</maml:name>
          <maml:description>
            <maml:para>A GeoCoordinate object with Latitude and Longitude properties.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">GeoCoordinate</command:parameterValue>
          <dev:type>
            <maml:name>GeoCoordinate</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>ConvertTo-GisPoint</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Coordinates</maml:name>
          <maml:description>
            <maml:para>A coordinate written in the format "latitude, longitude", or "latitude, longitude, altitude".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Altitude</maml:name>
        <maml:description>
          <maml:para>Specifies the altitude in meters, relative to sea level.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Coordinate</maml:name>
        <maml:description>
          <maml:para>A GeoCoordinate object with Latitude and Longitude properties.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">GeoCoordinate</command:parameterValue>
        <dev:type>
          <maml:name>GeoCoordinate</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Coordinates</maml:name>
        <maml:description>
          <maml:para>A coordinate written in the format "latitude, longitude", or "latitude, longitude, altitude".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Latitude</maml:name>
        <maml:description>
          <maml:para>A latitude value in the form of a double.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Longitude</maml:name>
        <maml:description>
          <maml:para>A longitude value in the form of a double.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>ConvertTo-GisPoint -Coordinates '40, -122'</dev:code>
        <dev:remarks>
          <maml:para>Produces a string like "POINT (-122 40)"</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>ConvertTo-GisPoint -Latitude 40 -Longitude -122</dev:code>
        <dev:remarks>
          <maml:para>Produces a string like "POINT (-122 40)"</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>ConvertTo-GisPoint -Latitude 40 -Longitude -122 -Altitude 125</dev:code>
        <dev:remarks>
          <maml:para>Produces a string like "POINT (-122 40 125)"</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 4 --------------------------</maml:title>
        <dev:code>ConvertTo-GisPoint -Coordinates '40, -122, 125'</dev:code>
        <dev:remarks>
          <maml:para>Produces a string like "POINT (-122 40 125)"</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/convertto-gispoint/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Copy-VmsView</command:name>
      <command:verb>Copy</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Copies one or more XProtect Smart Client views to a destination view group.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Copies one or more XProtect Smart Client views to a destination view group. The elements copied include the name, description, layout, and all view item definitions.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Copy-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>View</maml:name>
          <maml:description>
            <maml:para>Specifies the source view to be copied.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
          <dev:type>
            <maml:name>View[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>DestinationViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the view group within which a copy of the specified view will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Overwrite a view with the same name if it exists. If a view exists and the -Force switch is omitted, the name of the copy will be appended with " - Copy".</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the newly created view should be returned to the pipeline.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>DestinationViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the view group within which a copy of the specified view will be created.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Overwrite a view with the same name if it exists. If a view exists and the -Force switch is omitted, the name of the copy will be appended with " - Copy".</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the newly created view should be returned to the pipeline.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>View</maml:name>
        <maml:description>
          <maml:para>Specifies the source view to be copied.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
        <dev:type>
          <maml:name>View[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$view = $viewGroup | Get-VmsViewGroup -Recurse | Get-VmsView | Out-GridView -OutputMode Single
$newViewGroup = New-VmsViewGroup -Name 'MilestonePSTools' -Force | New-VmsViewGroup -Name 'Example 1' -Force
$view | Copy-VmsView -Destination $newViewGroup -PassThru</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of top-level view groups. After selecting view group, a list of views in that view group are presented.</maml:para>
          <maml:para>Once a view is selected, a new view group named 'MilestonePSTools' with a subgroup named 'Example 1' is created. A copy of the selected view is then placed in the new subgroup under the new top-level group 'MilestonePSTools'.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Copy-VmsViewGroup</command:name>
      <command:verb>Copy</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Copies one or more XProtect Smart Client view groups.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Copies one or more XProtect Smart Client view groups to another top-level view group, or as a child group to a specified destination view group.</maml:para>
      <maml:para>If a view group with the same name already exists, the string " - Copy" will be appended repeatedly until the new name of the top-level view group is unique. The entire view group and view hierarchy will be duplicated in the destination view group.</maml:para>
      <maml:para>Permissions from the source view group will not be copied to the destination.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Copy-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the source view group to be copied.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>DestinationViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies an optional destination view group. When omitted, the selected view group will be copied to the root folder as a top-level view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that if a view group with the same name exists in the destination view group, the existing view group should be overwritten as long as the ID is different than the source view group. This is likely to throw an error until a Configuration API bug is resolved on the Management Server in 2022 R2, or via a cumulative patch for older versions of the VMS.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the new view group copy should be returned to the pipeline.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>DestinationViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies an optional destination view group. When omitted, the selected view group will be copied to the root folder as a top-level view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Specifies that if a view group with the same name exists in the destination view group, the existing view group should be overwritten as long as the ID is different than the source view group. This is likely to throw an error until a Configuration API bug is resolved on the Management Server in 2022 R2, or via a cumulative patch for older versions of the VMS.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the new view group copy should be returned to the pipeline.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the source view group to be copied.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$newViewGroup = $viewGroup | Copy-VmsViewGroup -PassThru</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of top-level view groups. After selecting view group, a copy of the view group is created. Both the source and destination view groups will be top-level view groups. The copy will be named the same, as the original, except the text " - Copy" will be appended to the end of the name.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$subgroup = $viewGroup | Get-VmsViewGroup | Select-Object -First 1
$destination = New-VmsViewGroup -Name 'MilestonePSTools' -Force |
               New-VmsViewGroup -Name 'Subgroup' -Force
$subGroup | Copy-VmsViewGroup -DestinationViewGroup $destination -PassThru</dev:code>
        <dev:remarks>
          <maml:para>The first subgroup from the selected top-level view group is copied to a subgroup of a new top-level view group named "MilestonePSTools", demonstrating that both your source, and destination view groups can be child view groups if needed.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Export-HardwareCsv</command:name>
      <command:verb>Export</command:verb>
      <command:noun>HardwareCsv</command:noun>
      <maml:description>
        <maml:para>[Deprecated] Exports basic hardware information from a Milestone VMS to a CSV file</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This command is deprecated in favor of Export-VmsHardware.</maml:para>
      <maml:para>Exports hardware information to a CSV file. The following fields are included by default:</maml:para>
      <maml:para>- HardwareName</maml:para>
      <maml:para>- HardwareAddress</maml:para>
      <maml:para>- MacAddress</maml:para>
      <maml:para>- UserName</maml:para>
      <maml:para>- Password</maml:para>
      <maml:para>- DriverNumber</maml:para>
      <maml:para>- DriverDisplayName</maml:para>
      <maml:para>- RecordingServerName</maml:para>
      <maml:para>- RecordingServerId</maml:para>
      <maml:para></maml:para>
      <maml:para>Exporting with -Full will also retrieve all hardware information available through the Configuration API and save a JSON object for each hardware in a file adjacent to the CSV.</maml:para>
      <maml:para>The name of the *.JSON files will be the name of the CSV, plus the hardware ID, and a column named "ConfigurationId" will be added to the CSV as a reference to the configuration corresponding to each row in the CSV.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Export-HardwareCsv</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Full path, including file name, where the CSV will be saved</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Full</maml:name>
          <maml:description>
            <maml:para>Export full hardware configuration data into an adjacent JSON file</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>InputObject</maml:name>
          <maml:description>
            <maml:para>Array of Hardware objects to be exported to CSV</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
          <dev:type>
            <maml:name>Hardware[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Full</maml:name>
        <maml:description>
          <maml:para>Export full hardware configuration data into an adjacent JSON file</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>InputObject</maml:name>
        <maml:description>
          <maml:para>Array of Hardware objects to be exported to CSV</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
        <dev:type>
          <maml:name>Hardware[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Full path, including file name, where the CSV will be saved</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -Server localhost</dev:code>
        <dev:remarks>
          <maml:para>Get-Hardware | Export-HardwareToCsv -Path C:\hardware.csv</maml:para>
          <maml:para>Logs into the local Management Server as the current Windows user and exports all hardware information to C:\hardware.csv</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -Server localhost</dev:code>
        <dev:remarks>
          <maml:para>Get-RecordingServer -Name East* | Get-Hardware | Export-HardwareToCsv -Path C:\hardware.csv -Full</maml:para>
          <maml:para>Logs into the local Management Server as the current Windows user and exports all hardware information from all Recording Servers with names beginning with 'East', to C:\hardware.csv, and includes full hardware configuration details which will be saved to C:\hardware_*.json</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/export-hardwarecsv/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Export-VmsHardware</command:name>
      <command:verb>Export</command:verb>
      <command:noun>VmsHardware</command:noun>
      <maml:description>
        <maml:para>Exports detailed information about hardware devices on Milestone XProtect recording servers.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Exports detailed information about hardware devices on Milestone XProtect recording servers. The information can be sent to a CSV file or returned to the pipeline, or both.</maml:para>
      <maml:para>If no Path is provided, the information will be output to the pipeline automatically without the PassThru switch.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Export-VmsHardware</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies one or more RecordingServer objects as returned from Get-RecordingServer.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies whether to return information about enabled object, disabled objects, or all.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Enabled</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies a path where exported hardware information should be saved.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Append</maml:name>
          <maml:description>
            <maml:para>{{ Fill Append Description }}</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that each row of data should be returned to the pipeline.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Append</maml:name>
        <maml:description>
          <maml:para>{{ Fill Append Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>EnableFilter</maml:name>
        <maml:description>
          <maml:para>Specifies whether to return information about enabled object, disabled objects, or all.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Enabled</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that each row of data should be returned to the pipeline.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies a path where exported hardware information should be saved.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies one or more RecordingServer objects as returned from Get-RecordingServer.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Management.Automation.PSObject</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Export-VmsHardware -Path C:\temp\hardware.csv -PassThru | Out-GridView</dev:code>
        <dev:remarks>
          <maml:para>Writes the exported hardware information to disk and displays the data in a grid view as well.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Export-VmsHardware -RecordingServer (Get-RecordingServer | Out-GridView -OutputMode Multiple) -Path C:\temp\hardware.csv</dev:code>
        <dev:remarks>
          <maml:para>Displays a grid view dialog where you can select one or more Recording Servers to perform a hardware export on.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/export-vmshardware/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Export-VmsLicenseRequest</command:name>
      <command:verb>Export</command:verb>
      <command:noun>VmsLicenseRequest</command:noun>
      <maml:description>
        <maml:para>Exports a Milestone XProtect VMS license request file.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Exports a Milestone XProtect VMS license request file which can be uploaded to the My Milestone portal. The activated license file can be imported using the Import-VmsLicense function.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Export-VmsLicenseRequest</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies a path, including file name, where the license request file should be saved. Normally license request files are expected to have a .LRQ extension.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>If a file already exists at the specified path, the file will be overwritten.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>The new license file should be returned as a FileInfo object.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>If a file already exists at the specified path, the file will be overwritten.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>The new license file should be returned as a FileInfo object.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies a path, including file name, where the license request file should be saved. Normally license request files are expected to have a .LRQ extension.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.IO.FileInfo</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>System.IO.FileInfo</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Support for license management in Milestone's MIP SDK / Configuration API was introduced in version 2020 R2. If the Management Server version is earlier than 2020 R2, this function will not work.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Export-VmsLicenseRequest -Path ~\Downloads\license.lrq -Force</dev:code>
        <dev:remarks>
          <maml:para>Writes a license request file to license.lrq, and overwrites an existing file if it already exists.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/export-vmslicenserequest/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Export-VmsViewGroup</command:name>
      <command:verb>Export</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Exports an XProtect Smart Client view group and all contents to a JSON file.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Exports an XProtect Smart Client view group and all contents to a JSON file which can be used to import the view group on the same Management Server, or a different Management Server.</maml:para>
      <maml:para>The selected view group can be a top-level view group, or a child view group. However, if you import a view group which has directly-attached views that are not nested in a child view group, those views will be lost when importing the view group as a top-level view group.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Export-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>The view group to be exported, along with all child members, recursively.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to a file where a JSON representation of the view group will be saved</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the destination directory should be created if it doesn't exist, and if the destination file exists, it should be overwritten.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Specifies that the destination directory should be created if it doesn't exist, and if the destination file exists, it should be overwritten.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path to a file where a JSON representation of the view group will be saved</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>The view group to be exported, along with all child members, recursively.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$viewGroup | Export-VmsViewGroup -Path C:\temp\viewgroup.json</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we prompt for a view group selection. The selected view group is then exported to a json file at C:\temp\viewgroup.json.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Find-ConfigurationItem</command:name>
      <command:verb>Find</command:verb>
      <command:noun>ConfigurationItem</command:noun>
      <maml:description>
        <maml:para>Quickly finds configuration items matching a specified Name, ItemType and Properties filters</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Quickly finds configuration items matching a specified Name, ItemType and Properties filters by using the QueryItems method available in the Configuration API.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Find-ConfigurationItem</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies all, or part of the display name of the configuration item to search for. For example, if you want to find a camera named "North West Parking" and you specify the value 'Parking', you will get results for any camera where 'Parking' appears in the name somewhere. The search is not case sensitive.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>ItemType</maml:name>
          <maml:description>
            <maml:para>Specifies the type(s) of items to include in the results. The default is to include only 'Camera' items.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Camera</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies whether all matching items should be included, or whether only enabled, or disabled items should be included in the results. The default is to include all items regardless of state.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>All</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>Properties</maml:name>
          <maml:description>
            <maml:para>An optional hashtable of additional property keys and values to filter results. Properties must be string types, and the results will be included if the property key exists, and the value contains the provided string.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
          <dev:type>
            <maml:name>Hashtable</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>@{}</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>EnableFilter</maml:name>
        <maml:description>
          <maml:para>Specifies whether all matching items should be included, or whether only enabled, or disabled items should be included in the results. The default is to include all items regardless of state.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>All</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>ItemType</maml:name>
        <maml:description>
          <maml:para>Specifies the type(s) of items to include in the results. The default is to include only 'Camera' items.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Camera</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies all, or part of the display name of the configuration item to search for. For example, if you want to find a camera named "North West Parking" and you specify the value 'Parking', you will get results for any camera where 'Parking' appears in the name somewhere. The search is not case sensitive.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>Properties</maml:name>
        <maml:description>
          <maml:para>An optional hashtable of additional property keys and values to filter results. Properties must be string types, and the results will be included if the property key exists, and the value contains the provided string.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
        <dev:type>
          <maml:name>Hashtable</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>@{}</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>The QueryItems method was added to Configuration API on the Milestone XProtect Management Server starting with version 2020 R2. If your Milestone VMS version is 2020 R1 or earlier, you will receive an error when using this command.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Find-ConfigurationItem -ItemType Camera -Name Parking</dev:code>
        <dev:remarks>
          <maml:para>Returns a generic Configuration API item for each camera containing the word "parking" anywhere in the display name.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Find-ConfigurationItem -ItemType Hardware -Properties @{ Address = '192.168.1.101' }</dev:code>
        <dev:remarks>
          <maml:para>Returns a generic Configuration API item for each hardware with the IP address 192.168.1.101 present in the 'Address' property of the hardware device. Hardware typically have an address in the format of 'http://192.168.1.101/'.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>Find-ConfigurationItem -ItemType Camera -Name Parking | ConvertFrom-ConfigurationItem</dev:code>
        <dev:remarks>
          <maml:para>Finds every camera containing the word "parking" anywhere in the display name and converts it from a generic Configuration API item to a strongly-typed Camera object such as what you will get when using Get-Camera.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/find-configurationitem/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>MIP SDK Docs - QueryItems</maml:linkText>
        <maml:uri>https://doc.developer.milestonesys.com/html/index.html?base=miphelp/class_video_o_s_1_1_configuration_api_1_1_client_service_1_1_query_items.html&amp;tree=tree_search.html?search=queryitems</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Find-XProtectDevice</command:name>
      <command:verb>Find</command:verb>
      <command:noun>XProtectDevice</command:noun>
      <maml:description>
        <maml:para>Finds devices and provides the names of the parent hardware and recording server to help quickly locate devices by name.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Finds devices and provides the names of the parent hardware and recording server to help quickly locate devices by name. If searching for a child of a hardware object such as a camera or microphone, the name of the device(s) as well as their parent hardware object and recording server will be returned. When searching for a hardware object, only the hardware and recording server names will be returned.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Find-XProtectDevice</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Address</maml:name>
          <maml:description>
            <maml:para>Specifies all or part of the IP or hostname of the hardware device to search for.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies whether all devices should be returned, or only enabled or disabled devices. Default is to return all matching devices.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>All</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ItemType</maml:name>
          <maml:description>
            <maml:para>Specifies the ItemType such as Camera, Microphone, or InputEvent. Default is 'Camera'.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Hardware</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Camera</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Microphone</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Speaker</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">InputEvent</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Output</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Metadata</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Camera</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>MacAddress</maml:name>
          <maml:description>
            <maml:para>Specifies all or part of the MAC address of the hardware device to search for. Note: Searching by MAC is significantly slower than searching by IP.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies name, or part of the name of the device(s) to find.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Properties</maml:name>
          <maml:description>
            <maml:para>Specifies an optional hash table of key/value pairs matching properties on the items you're searching for.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
          <dev:type>
            <maml:name>Hashtable</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>@{}</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ShowDialog</maml:name>
          <maml:description>
            <maml:para>{{ Fill ShowDialog Description }}</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Address</maml:name>
        <maml:description>
          <maml:para>Specifies all or part of the IP or hostname of the hardware device to search for.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EnableFilter</maml:name>
        <maml:description>
          <maml:para>Specifies whether all devices should be returned, or only enabled or disabled devices. Default is to return all matching devices.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>All</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ItemType</maml:name>
        <maml:description>
          <maml:para>Specifies the ItemType such as Camera, Microphone, or InputEvent. Default is 'Camera'.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Camera</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>MacAddress</maml:name>
        <maml:description>
          <maml:para>Specifies all or part of the MAC address of the hardware device to search for. Note: Searching by MAC is significantly slower than searching by IP.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies name, or part of the name of the device(s) to find.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Properties</maml:name>
        <maml:description>
          <maml:para>Specifies an optional hash table of key/value pairs matching properties on the items you're searching for.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
        <dev:type>
          <maml:name>Hashtable</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>@{}</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ShowDialog</maml:name>
        <maml:description>
          <maml:para>{{ Fill ShowDialog Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>This function depends on Find-ConfigurationItem which is only supported on VMS versions from 2020 R2 and later.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Find-XProtectDevice -ItemType Hardware -Properties @{ Address = '192.168.1.101' }</dev:code>
        <dev:remarks>
          <maml:para>Finds all hardware devices on all recording servers where the Address contains the IP '192.168.1.101'</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Find-XProtectDevice -ItemType Camera -Name Parking</dev:code>
        <dev:remarks>
          <maml:para>Finds all cameras with the word 'Parking' appearing in the name and returns the camera names, and parent hardware and recording server names. The Name parameter is not case sensitive and does not support wildcards.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/find-xprotectdevice/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-BankTable</command:name>
      <command:verb>Get</command:verb>
      <command:noun>BankTable</command:noun>
      <maml:description>
        <maml:para>Enumerates Path for media database tables created by a Recording Server.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The records returned by this function must represent media database folders with names matching the format used by Milestone. The format expected is GUID_TAG_TIMESTAMP where GUID is the id of a device, TAG is a string like LOCAL or ARCHIVE, and TIMESTAMP is a local timestamp in the format yyyy-MM-dd_HH-mm-ss.</maml:para>
      <maml:para>Each record returned by this function will have a DeviceId property of type [Guid], an EndTime property of type [DateTime] which will be a local timestamp representing the approximate time that folder was last added to, a Tag property representing the LOCAL or ARCHIVE string value describing the type of table, and a Path property with the full path to that folder on the file system.</maml:para>
      <maml:para>This function does not rely on cache.xml or archives_cache.xml in any way. As such, it can be used on a system with an invalid or missing cache. However, the accuracy of the timestamps is unreliable because they are based on the names of the folders on the filesystem which represent the time the Recording Server renamed that folder when it was converted from a live media database table to a local archive table.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-BankTable</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>The path to the media database. This must be the path to the folder containing the media database tables. For example, C:\MediaDatabase\4344cd14-0b12-4c18-8677-5d263c140af4 is the full path to the default "Local default" storage path. The ID for yours will be different, and if you need to find the ID, you can hold CTRL and click on the Storage tab of the Recording Server in Management Client. Then hover over the storage configuration and you will see the ID displayed in the tooltip.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>DeviceId</maml:name>
          <maml:description>
            <maml:para>The GUID of one or more devices you want to retrieve tables for. If you omit this property, all tables for all devices will be returned.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>StartTime</maml:name>
          <maml:description>
            <maml:para>The local DateTime indicating the oldest records to be retrieved from the media database. Since entire folders, each containing approximately one hour of video, will be retrieved, you could end up with video up to one hour older than requested.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
          <dev:type>
            <maml:name>DateTime</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>[DateTime]::MinValue</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>EndTime</maml:name>
          <maml:description>
            <maml:para>The local DateTime indicating the last records to be retrieved from the media database. Since entire folders, each containing approximately one hour of video, will be retrieved, you could end up with video up to one hour newer than requested.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
          <dev:type>
            <maml:name>DateTime</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>[DateTime]::MaxValue.AddHours(-1)</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>DeviceId</maml:name>
        <maml:description>
          <maml:para>The GUID of one or more devices you want to retrieve tables for. If you omit this property, all tables for all devices will be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>EndTime</maml:name>
        <maml:description>
          <maml:para>The local DateTime indicating the last records to be retrieved from the media database. Since entire folders, each containing approximately one hour of video, will be retrieved, you could end up with video up to one hour newer than requested.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
        <dev:type>
          <maml:name>DateTime</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>[DateTime]::MaxValue.AddHours(-1)</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>The path to the media database. This must be the path to the folder containing the media database tables. For example, C:\MediaDatabase\4344cd14-0b12-4c18-8677-5d263c140af4 is the full path to the default "Local default" storage path. The ID for yours will be different, and if you need to find the ID, you can hold CTRL and click on the Storage tab of the Recording Server in Management Client. Then hover over the storage configuration and you will see the ID displayed in the tooltip.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>StartTime</maml:name>
        <maml:description>
          <maml:para>The local DateTime indicating the oldest records to be retrieved from the media database. Since entire folders, each containing approximately one hour of video, will be retrieved, you could end up with video up to one hour older than requested.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
        <dev:type>
          <maml:name>DateTime</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>[DateTime]::MinValue</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-BankTable C:\MediaDatabase\4344cd14-0b12-4c18-8677-5d263c140af4 -DeviceId "94275fef-b977-43f6-bf78-210c615b2967" | Copy-Item -Destination C:\Temp -Container -Recurse -Force</dev:code>
        <dev:remarks>
          <maml:para>Copy all media database tables for device with ID 94275fef-b977-43f6-bf78-210c615b2967 to C:\Temp</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-banktable/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-CameraRecordingStats</command:name>
      <command:verb>Get</command:verb>
      <command:noun>CameraRecordingStats</command:noun>
      <maml:description>
        <maml:para>Get statistics on the recordings of one or more cameras including the number of recording or motion sequence, the amount of time in the given time period with recordings or motion, and the percent of time in the given time period with recordings or motion.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Long description</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-CameraRecordingStats</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
          <maml:name>Id</maml:name>
          <maml:description>
            <maml:para>Specifies the Id's of cameras for which to retrieve recording statistics</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>StartTime</maml:name>
          <maml:description>
            <maml:para>Specifies the timestamp from which to start retrieving recording statistics. Default is 7 days prior to 12:00am of the current day.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
          <dev:type>
            <maml:name>DateTime</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>(Get-Date).Date.AddDays(-7)</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>EndTime</maml:name>
          <maml:description>
            <maml:para>Specifies the timestamp marking the end of the time period for which to retrieve recording statistics. The default is 12:00am of the current day.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
          <dev:type>
            <maml:name>DateTime</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>(Get-Date).Date</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>SequenceType</maml:name>
          <maml:description>
            <maml:para>Specifies the type of sequence to get statistics on. Default is RecordingSequence.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">RecordingSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">MotionSequence</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>RecordingSequence</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
          <maml:name>RunspacePool</maml:name>
          <maml:description>
            <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
          <dev:type>
            <maml:name>RunspacePool</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AsHashTable</maml:name>
          <maml:description>
            <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AsHashTable</maml:name>
        <maml:description>
          <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>EndTime</maml:name>
        <maml:description>
          <maml:para>Specifies the timestamp marking the end of the time period for which to retrieve recording statistics. The default is 12:00am of the current day.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
        <dev:type>
          <maml:name>DateTime</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>(Get-Date).Date</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
        <maml:name>Id</maml:name>
        <maml:description>
          <maml:para>Specifies the Id's of cameras for which to retrieve recording statistics</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
        <maml:name>RunspacePool</maml:name>
        <maml:description>
          <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
        <dev:type>
          <maml:name>RunspacePool</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>SequenceType</maml:name>
        <maml:description>
          <maml:para>Specifies the type of sequence to get statistics on. Default is RecordingSequence.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>RecordingSequence</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>StartTime</maml:name>
        <maml:description>
          <maml:para>Specifies the timestamp from which to start retrieving recording statistics. Default is 7 days prior to 12:00am of the current day.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">DateTime</command:parameterValue>
        <dev:type>
          <maml:name>DateTime</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>(Get-Date).Date.AddDays(-7)</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Select-Camera | Get-CameraRecordingStats</dev:code>
        <dev:remarks>
          <maml:para>Opens a camera selection dialog and the selected camera will be sent to Get-CameraRecordingStats. The result will be a PSCustomObject with the DeviceID and a nested PSCustomObject under the RecordingStats property name.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-camerarecordingstats/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-CameraReport</command:name>
      <command:verb>Get</command:verb>
      <command:noun>CameraReport</command:noun>
      <maml:description>
        <maml:para>[DEPRECATED] Gets detailed information for all cameras in the current site</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This camera report command is now deprecated. Please consider using Get-VmsCameraReport.</maml:para>
      <maml:para>This camera report is a rewrite of the previous camera report available in version 20.3.450930 and earlier. This version makes use of runspaces to significantly improve the time taken to generate the report, and includes several additional properties in each row that were not present in prior versions.</maml:para>
      <maml:para>Use Get-CameraReport to get a snapshot in time of most of the configuration properties for each camera and the state of cameras in the VMS. For example, you can use this report to see the current video retention for each camera, or whether any cameras are in media overflow or have communication errors.</maml:para>
      <maml:para>You might pipe this report to CSV and open the report in Excel, group by Recording Server, and get a sense for the number of cameras per Recording Server or create a pivot table on cameras and their resolutions and frame rates.</maml:para>
      <maml:para>Thanks to the 60+ columns of information provided for each camera in this report, there are innumerable ways in which you could use it to help identify problems, maintain a consistent configuration, or report data to other departments.</maml:para>
      <maml:para>Column Notes</maml:para>
      <maml:para>- State: This is returned by Get-ItemState and represents the Milestone Event Server's understanding of the state of the camera. The physical camera may be responding to ping but still be 'Not Responding' in Milestone due to other issues.</maml:para>
      <maml:para>- MediaOverflow: This means the Recording Server is unable to keep up with the amount of video being recorded, and is dropping video frames from one or more cameras. Any time this value is true, you should investigate Recording Server performance.</maml:para>
      <maml:para>- GpsCoordinates: This value will be returned as 'Unknown' if not set. The value comes from the Camera object's GisPoint property.</maml:para>
      <maml:para>- MediaDatabaseBegin: This timestamp represents the time and date, in UTC, of the first image in the media database. If your video retention is 30 days, you should expect this timestamp to be at least 30 days ago under normal circumstances.</maml:para>
      <maml:para>- MediaDatabaseEnd: This timestamp represents the time and date, in UTC, of the last recorded image in the media database. If your camera is set to record always, this timestamp should be very recent.</maml:para>
      <maml:para>- UsedSpaceInBytes: This value represents the disk space utilization for the camera on the Recording Server to which it belongs, including data in any live and archive storage to which the camera is assigned.</maml:para>
      <maml:para>- PercentRecordedOneWeek: This optional value is only set when you include the -IncludeRecordingStats parameter. It may take significantly longer to generate the report when including this information. The value will be the percentage of time over the previous 7 days for which recordings exist. When recording on motion, in an environment with 50% motion, this value will normally be a little higher than 50% to account for pre and post recording buffers.</maml:para>
      <maml:para>- LastModified: This should represent the last configuration change made to the camera.</maml:para>
      <maml:para>- Password: This optional value is only set when you include the -IncludePasswords parameter.</maml:para>
      <maml:para>- HTTPSEnabled: For cameras supporting HTTPS and where HTTPS is enabled at the hardware level in Management Client, you will see the value "YES". Otherwise, you will see the value "NO".</maml:para>
      <maml:para>- Firmware: This value may NOT be accurate. For example, if the firmware has been upgraded since the camera was added to Milestone, the value may still reflect the old firmware version. This is only because Milestone may only update our record of the firmware when the camera is added or replaced in Management Client. You might consider this value as an indication that the firmware is 'at least' X.Y for example.</maml:para>
      <maml:para>- DriverNumber: This represents the Milestone ID number for the device driver used for this camera. When adding hardware using Import-HardwareCsv or Add-Hardware, this is the number Milestone would expect when specifying which driver to use.</maml:para>
      <maml:para>- DriverRevision: This is an internal value representing the driver number for the specific device driver within the currently installed device pack.</maml:para>
      <maml:para>- RecordingPath: This value is always relative to the Recording Server. If you see a drive letter F:, for example, then it refers to the F: drive on the Recording Server to which the camera is assigned.</maml:para>
      <maml:para>- Snapshot: This optional value is only set when you include the -IncludeSnapshots parameter. The value will be an [image] object and it will be up to you to decide what to do with the value once you have it. Exporting to CSV for example will result in the string [drawing.image] rather than an actual image or image data.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-CameraReport</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies the one or more recording servers to limit the scope of the report</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>SnapshotHeight</maml:name>
          <maml:description>
            <maml:para>Specifies the height of the snapshots included if the IncludeSnapshots switch is provided. The default is 300 pixels high. The width will be determined based on the aspect ratio of the original image. A value of 0 will result in snapshots at the original image resolution of the live stream at the time the report is run.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>300</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeDisabled</maml:name>
          <maml:description>
            <maml:para>Specifies that disabled cameras should be excluded from the results</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludePlainTextPasswords</maml:name>
          <maml:description>
            <maml:para>Include hardware passwords in plain text</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeRecordingStats</maml:name>
          <maml:description>
            <maml:para>Specifies that you want to add the percentage of time recorded in the past week for each camera</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeSnapshots</maml:name>
          <maml:description>
            <maml:para>Include live JPEG snapshots in the results</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeDisabled</maml:name>
        <maml:description>
          <maml:para>Specifies that disabled cameras should be excluded from the results</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludePlainTextPasswords</maml:name>
        <maml:description>
          <maml:para>Include hardware passwords in plain text</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeRecordingStats</maml:name>
        <maml:description>
          <maml:para>Specifies that you want to add the percentage of time recorded in the past week for each camera</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeSnapshots</maml:name>
        <maml:description>
          <maml:para>Include live JPEG snapshots in the results</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies the one or more recording servers to limit the scope of the report</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>SnapshotHeight</maml:name>
        <maml:description>
          <maml:para>Specifies the height of the snapshots included if the IncludeSnapshots switch is provided. The default is 300 pixels high. The width will be determined based on the aspect ratio of the original image. A value of 0 will result in snapshots at the original image resolution of the live stream at the time the report is run.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>300</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-RecordingServer -Name 'MyRecordingServer' | Get-CameraReport | Out-GridView</dev:code>
        <dev:remarks>
          <maml:para>Generates a camera report from all cameras on "MyRecordingServer" and presents the results in a grid view UI.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-camerareport/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-ConfigurationItemProperty</command:name>
      <command:verb>Get</command:verb>
      <command:noun>ConfigurationItemProperty</command:noun>
      <maml:description>
        <maml:para>Gets the value of a given ConfigurationItem property by key</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>A ConfigurationItem may have zero or more Property objects in the Properties array. Each property has a key name and a value. Since the Properties property on a ConfigurationItem has no string-based indexer, you are required to search the array of properties for the one with the Key you're interested in, and then get the Value property of it.</maml:para>
      <maml:para>This cmdlet is a simple wrapper which does the Where-Object for you, and throws an error if the Key does not exist.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-ConfigurationItemProperty</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>InputObject</maml:name>
          <maml:description>
            <maml:para>A [VideoOS.ConfigurationApi.ClientService.ConfigurationItem] with a property to be retrieved.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ConfigurationItem</command:parameterValue>
          <dev:type>
            <maml:name>ConfigurationItem</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Key</maml:name>
          <maml:description>
            <maml:para>A string representing the key of the property from which the value should be retrieved.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>InputObject</maml:name>
        <maml:description>
          <maml:para>A [VideoOS.ConfigurationApi.ClientService.ConfigurationItem] with a property to be retrieved.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ConfigurationItem</command:parameterValue>
        <dev:type>
          <maml:name>ConfigurationItem</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Key</maml:name>
        <maml:description>
          <maml:para>A string representing the key of the property from which the value should be retrieved.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>$description = Get-ConfigurationItem -Path / | Get-ConfigurationItemProperty -Key Description</dev:code>
        <dev:remarks>
          <maml:para>Gets a ConfigurationItem representing the Management Server, and returns the Description value. The alternative is to do ((Get-ConfigurationItem -Path /).Properties | Where-Object Key -eq Description).Value.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-configurationitemproperty/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-CurrentDeviceStatus</command:name>
      <command:verb>Get</command:verb>
      <command:noun>CurrentDeviceStatus</command:noun>
      <maml:description>
        <maml:para>Gets the current device status of all devices of the desired type from one or more recording servers</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Uses the RecorderStatusService2 client to call GetCurrentDeviceStatus and receive the current status of all devices of the desired type(s). Specify one or more types in the DeviceType parameter to receive status of more device types than cameras.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-CurrentDeviceStatus</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Id">
          <maml:name>RecordingServerId</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Recording Server ID's to which the results will be limited. Omit this parameter if you want device status from all Recording Servers</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>DeviceType</maml:name>
          <maml:description>
            <maml:para>Specifies the type of devices to include in the results. By default only cameras will be included and you can expand this to include all device types</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Camera</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Microphone</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Speaker</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Metadata</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Input event</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Output</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Event</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Hardware</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Camera</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>RunspacePool</maml:name>
          <maml:description>
            <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
          <dev:type>
            <maml:name>RunspacePool</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AsHashTable</maml:name>
          <maml:description>
            <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AsHashTable</maml:name>
        <maml:description>
          <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>DeviceType</maml:name>
        <maml:description>
          <maml:para>Specifies the type of devices to include in the results. By default only cameras will be included and you can expand this to include all device types</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Camera</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Id">
        <maml:name>RecordingServerId</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Recording Server ID's to which the results will be limited. Omit this parameter if you want device status from all Recording Servers</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>RunspacePool</maml:name>
        <maml:description>
          <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
        <dev:type>
          <maml:name>RunspacePool</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Management.Automation.PSObject</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name 'My Recording Server' | Get-CurrentDeviceStatus -DeviceType All</dev:code>
        <dev:remarks>
          <maml:para>Gets the status of all devices of all device types from the Recording Server named 'My Recording Server'.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-CurrentDeviceStatus -DeviceType Camera, Microphone</dev:code>
        <dev:remarks>
          <maml:para>Gets the status of all cameras and microphones from all recording servers.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-currentdevicestatus/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-LicenseDetails</command:name>
      <command:verb>Get</command:verb>
      <command:noun>LicenseDetails</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-LicenseDetails</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseDetailChildItem</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-licensedetails/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-LicensedProducts</command:name>
      <command:verb>Get</command:verb>
      <command:noun>LicensedProducts</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-LicensedProducts</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInstalledProductChildItem</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-licensedproducts/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-LicenseInfo</command:name>
      <command:verb>Get</command:verb>
      <command:noun>LicenseInfo</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-LicenseInfo</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-licenseinfo/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-LicenseOverview</command:name>
      <command:verb>Get</command:verb>
      <command:noun>LicenseOverview</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-LicenseOverview</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseOverviewAllChildItem</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-licenseoverview/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-ManagementServerConfig</command:name>
      <command:verb>Get</command:verb>
      <command:noun>ManagementServerConfig</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-ManagementServerConfig</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-managementserverconfig/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-MobileServerInfo</command:name>
      <command:verb>Get</command:verb>
      <command:noun>MobileServerInfo</command:noun>
      <maml:description>
        <maml:para>Gets details about the local Milestone XProtect Mobile Server installation.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Gets details about the local Milestone XProtect Mobile Server installation. Properties include:</maml:para>
      <maml:para>- Version</maml:para>
      <maml:para>- ExePath</maml:para>
      <maml:para>- ConfigPath</maml:para>
      <maml:para>- ManagementServerIp</maml:para>
      <maml:para>- ManagementServerPort</maml:para>
      <maml:para>- HttpIp</maml:para>
      <maml:para>- HttpPort</maml:para>
      <maml:para>- HttpsIp</maml:para>
      <maml:para>- HttpsPort</maml:para>
      <maml:para>- CertHash</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-MobileServerInfo</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Get-MobileServerInfo</dev:code>
        <dev:remarks>
          <maml:para>Gets a collection of useful Mobile Server properties.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-mobileserverinfo/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-PlaybackInfo</command:name>
      <command:verb>Get</command:verb>
      <command:noun>PlaybackInfo</command:noun>
      <maml:description>
        <maml:para>Gets the UTC timestamp of the first and last record in the media database for a device.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Gets the UTC timestamp of the first and last record in the media database for a device. The result is returned as a PSCustomObject with a Begin and End property representing the first and last record timestamps in the media database.</maml:para>
      <maml:para>The method for retrieving this data used to be based on the RawDataSource class, but a faster method is now used which is based on a SequenceDataSource class. Sequences represent timespans in the media database where recordings, or motion are present. To use the SequenceDataSource in this function, we ask for the first sequence occuring sometime between unix epoch and now, and we use the StartDateTime property. We then ask for the first sequence occuring between now and unix epoch in the reverse direction, and use the EndDateTime property.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-PlaybackInfo</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Deprecated. Specifies a camera object - typically the output of a Get-Camera command.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera</command:parameterValue>
          <dev:type>
            <maml:name>Camera</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>CameraId</maml:name>
          <maml:description>
            <maml:para>Deprecated. Specifies the Guid value of a Camera object.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Parallel</maml:name>
          <maml:description>
            <maml:para>Specifies that multiple requests should be processed in parallel. If fewer than 60 devices are specified in the Path or Device parameters, then this switch has no impact. Using multiple threads for a small number of devices can end up taking longer than doing them sequentially, especially with the operation completes relatively quickly to begin with.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SequenceType</maml:name>
          <maml:description>
            <maml:para>Specifies the type of sequence to return playback info for. The default is RecordingSequence, and that makes the most sense to use with this cmdlet. This parameter is provided in case it is interesting to know the first and last "motion" sequence instead.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">MotionSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">RecordingSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineMotionDetected</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineRecording</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>RecordingSequence</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseLocalTime</maml:name>
          <maml:description>
            <maml:para>Deprecated. Convert the UTC timestamps from the Recording Server(s) to local time using the region settings of the current session.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-PlaybackInfo</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Device</maml:name>
          <maml:description>
            <maml:para>Specifies the Camera, Microphone, Speaker, or Metadata object. The Path property is used from these objects to construct the VideoOS.Platform.ConfigItem used to construct the SequenceDataSource.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">IConfigurationItem[]</command:parameterValue>
          <dev:type>
            <maml:name>IConfigurationItem[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Parallel</maml:name>
          <maml:description>
            <maml:para>Specifies that multiple requests should be processed in parallel. If fewer than 60 devices are specified in the Path or Device parameters, then this switch has no impact. Using multiple threads for a small number of devices can end up taking longer than doing them sequentially, especially with the operation completes relatively quickly to begin with.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SequenceType</maml:name>
          <maml:description>
            <maml:para>Specifies the type of sequence to return playback info for. The default is RecordingSequence, and that makes the most sense to use with this cmdlet. This parameter is provided in case it is interesting to know the first and last "motion" sequence instead.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">MotionSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">RecordingSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineMotionDetected</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineRecording</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>RecordingSequence</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-PlaybackInfo</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Parallel</maml:name>
          <maml:description>
            <maml:para>Specifies that multiple requests should be processed in parallel. If fewer than 60 devices are specified in the Path or Device parameters, then this switch has no impact. Using multiple threads for a small number of devices can end up taking longer than doing them sequentially, especially with the operation completes relatively quickly to begin with.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone "Configuration API" path for the device. The format of a Configuration API path is ItemType[guid]. For example, Camera[5cb24b72-d946-4e87-83a2-9ad79da2f40b]. This property is available on all Configuration API generic item types, and strongly typed objects like Cameras and Microphones. The format provides both the ItemType value and the ID which are used to locate the VideoOS.Platform.ConfigItem representing the camera in VideoOS.Platform.Configuration.Instance, and this item is used to construct the SequenceDataSource.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SequenceType</maml:name>
          <maml:description>
            <maml:para>Specifies the type of sequence to return playback info for. The default is RecordingSequence, and that makes the most sense to use with this cmdlet. This parameter is provided in case it is interesting to know the first and last "motion" sequence instead.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">MotionSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">RecordingSequence</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineMotionDetected</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TimelineRecording</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>RecordingSequence</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Deprecated. Specifies a camera object - typically the output of a Get-Camera command.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera</command:parameterValue>
        <dev:type>
          <maml:name>Camera</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>CameraId</maml:name>
        <maml:description>
          <maml:para>Deprecated. Specifies the Guid value of a Camera object.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
        <dev:type>
          <maml:name>Guid</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Device</maml:name>
        <maml:description>
          <maml:para>Specifies the Camera, Microphone, Speaker, or Metadata object. The Path property is used from these objects to construct the VideoOS.Platform.ConfigItem used to construct the SequenceDataSource.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">IConfigurationItem[]</command:parameterValue>
        <dev:type>
          <maml:name>IConfigurationItem[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Parallel</maml:name>
        <maml:description>
          <maml:para>Specifies that multiple requests should be processed in parallel. If fewer than 60 devices are specified in the Path or Device parameters, then this switch has no impact. Using multiple threads for a small number of devices can end up taking longer than doing them sequentially, especially with the operation completes relatively quickly to begin with.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone "Configuration API" path for the device. The format of a Configuration API path is ItemType[guid]. For example, Camera[5cb24b72-d946-4e87-83a2-9ad79da2f40b]. This property is available on all Configuration API generic item types, and strongly typed objects like Cameras and Microphones. The format provides both the ItemType value and the ID which are used to locate the VideoOS.Platform.ConfigItem representing the camera in VideoOS.Platform.Configuration.Instance, and this item is used to construct the SequenceDataSource.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>SequenceType</maml:name>
        <maml:description>
          <maml:para>Specifies the type of sequence to return playback info for. The default is RecordingSequence, and that makes the most sense to use with this cmdlet. This parameter is provided in case it is interesting to know the first and last "motion" sequence instead.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>RecordingSequence</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>UseLocalTime</maml:name>
        <maml:description>
          <maml:para>Deprecated. Convert the UTC timestamps from the Recording Server(s) to local time using the region settings of the current session.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>The original version of Get-PlaybackInfo only worked for cameras, and we realize now the UseLocalTime switch was unnecessary. It's easy enough to call ToLocalTime() if you want to switch to your local timezone. As such, the Camera, CameraId, and UseLocalTime parameters are deprecated. They'll still work for a while, but with warnings. Instead of explicitly using them, consider piping your devices into this function, or using the -Device or -Path parameters.</maml:para>
        <maml:para>A bonus of using the new parameters is that you can provide an array of objects or configuration item paths, include the Parallel switch, and the results may be returned faster through the use of runspaces for running requests in parallel.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Select-Camera -SingleSelect | Get-PlaybackInfo</dev:code>
        <dev:remarks>
          <maml:para>Begin End Path ----- --- ---- 9/17/2021 11:21:53 PM 10/17/2021 5:15:15 PM Camera[9c55377a-c2e4-4f03-99b6-d684e730c4e1]</maml:para>
          <maml:para>Presents a camera selection dialog, and after you've selected a camera, it returns an object with the first and last image timestamps.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-playbackinfo/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>MIP SDK Docs - SequenceDataSource</maml:linkText>
        <maml:uri>https://doc.developer.milestonesys.com/html/index.html?base=miphelp/class_video_o_s_1_1_platform_1_1_data_1_1_sequence_data_source.html&amp;tree=tree_search.html?search=sequencedatasource</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-RecorderConfig</command:name>
      <command:verb>Get</command:verb>
      <command:noun>RecorderConfig</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-RecorderConfig</maml:name>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters />
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-recorderconfig/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-StreamProperties</command:name>
      <command:verb>Get</command:verb>
      <command:noun>StreamProperties</command:noun>
      <maml:description>
        <maml:para>Get a list of configuration properties from the designated camera stream</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Get a list of configuration properties from the designated camera stream. These properties provide detailed information including the property key, current value, the value type, and in the case of certain value types, a list of valid values or a range of valid values.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-StreamProperties</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies the camera to retrieve stream properties for</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera</command:parameterValue>
          <dev:type>
            <maml:name>Camera</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>StreamName</maml:name>
          <maml:description>
            <maml:para>Specifies a StreamUsageChildItem from Get-Stream</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-StreamProperties</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies the camera to retrieve stream properties for</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera</command:parameterValue>
          <dev:type>
            <maml:name>Camera</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>StreamNumber</maml:name>
          <maml:description>
            <maml:para>Specifies the stream number starting from 0. For example, "Video stream 1" is usually in the 0'th position in the StreamChildItems collection.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Specifies the camera to retrieve stream properties for</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera</command:parameterValue>
        <dev:type>
          <maml:name>Camera</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>StreamName</maml:name>
        <maml:description>
          <maml:para>Specifies a StreamUsageChildItem from Get-Stream</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>StreamNumber</maml:name>
        <maml:description>
          <maml:para>Specifies the stream number starting from 0. For example, "Video stream 1" is usually in the 0'th position in the StreamChildItems collection.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.ConfigurationApi.ClientService.Property[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Select-Camera | Get-StreamProperties -StreamName 'Video stream 1'</dev:code>
        <dev:remarks>
          <maml:para>Opens a dialog to select a camera, then returns the stream properties for 'Video stream 1'. The objects returned are rich property objects with a number of properties attached to them in addition to their keys and values.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-streamproperties/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-ValueDisplayName</command:name>
      <command:verb>Get</command:verb>
      <command:noun>ValueDisplayName</command:noun>
      <maml:description>
        <maml:para>Gets the display name of the value of a property.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Some propertie values such as FPS or Resolution might have different property names by which those values are referenced depending on the camera driver. For example, some cameras use the propery name 'Resolution' to refer to camera resolution, and others might use 'StreamProperty'. And the value for resolution might be '6' internally, while the display name for that value might be 1920x1080 for example.</maml:para>
      <maml:para>This function simplifies the process of finding out the best display name to use for the value of a property.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-ValueDisplayName</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DefaultValue</maml:name>
          <maml:description>
            <maml:para>The default value to return if the property is not found in any of the items in PropertyList</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>NotAvailable</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Properties</maml:name>
          <maml:description>
            <maml:para>{{ Fill Properties Description }}</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ConfigurationApiProperties</command:parameterValue>
          <dev:type>
            <maml:name>ConfigurationApiProperties</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PropertyName</maml:name>
          <maml:description>
            <maml:para>One or more related property names to look for such as FPS, Framerate</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-ValueDisplayName</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DefaultValue</maml:name>
          <maml:description>
            <maml:para>The default value to return if the property is not found in any of the items in PropertyList</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>NotAvailable</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PropertyList</maml:name>
          <maml:description>
            <maml:para>The collection of properties associated with a configuration item such as a camera's stream settings.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Property[]</command:parameterValue>
          <dev:type>
            <maml:name>Property[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PropertyName</maml:name>
          <maml:description>
            <maml:para>One or more related property names to look for such as FPS, Framerate</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DefaultValue</maml:name>
        <maml:description>
          <maml:para>The default value to return if the property is not found in any of the items in PropertyList</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>NotAvailable</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Properties</maml:name>
        <maml:description>
          <maml:para>{{ Fill Properties Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ConfigurationApiProperties</command:parameterValue>
        <dev:type>
          <maml:name>ConfigurationApiProperties</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PropertyList</maml:name>
        <maml:description>
          <maml:para>The collection of properties associated with a configuration item such as a camera's stream settings.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Property[]</command:parameterValue>
        <dev:type>
          <maml:name>Property[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PropertyName</maml:name>
        <maml:description>
          <maml:para>One or more related property names to look for such as FPS, Framerate</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-ValueDisplayName -PropertyList (Select-Camera | Get-StreamProperties -StreamNumber 0) -PropertyName 'Resolution', 'StreamProperty'</dev:code>
        <dev:remarks>
          <maml:para>Presents a camera selection dialog and then returns the display name for the configured resolution for the camera from the first video stream's settings.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-valuedisplayname/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VideoDeviceStatistics</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VideoDeviceStatistics</command:noun>
      <maml:description>
        <maml:para>Gets the camera device statistics including used storage space, and the properties of each video stream being retrieved from the camera</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Uses the RecorderStatusService2 client to call GetVideoDeviceStatistics and receive the current video device statistics of all cameras, or filtered by Recording Server.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VideoDeviceStatistics</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Id">
          <maml:name>RecordingServerId</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Recording Server ID's to which the results will be limited. Omit this parameter if you want device status from all Recording Servers</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>RunspacePool</maml:name>
          <maml:description>
            <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
          <dev:type>
            <maml:name>RunspacePool</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AsHashTable</maml:name>
          <maml:description>
            <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AsHashTable</maml:name>
        <maml:description>
          <maml:para>Specifies that the output should be provided in a complete hashtable instead of one pscustomobject value at a time</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="Id">
        <maml:name>RecordingServerId</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Recording Server ID's to which the results will be limited. Omit this parameter if you want device status from all Recording Servers</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>RunspacePool</maml:name>
        <maml:description>
          <maml:para>Specifies the runspacepool to use. If no runspacepool is provided, one will be created.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RunspacePool</command:parameterValue>
        <dev:type>
          <maml:name>RunspacePool</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name 'My Recording Server' | Get-VideoDeviceStatistics</dev:code>
        <dev:remarks>
          <maml:para>Gets the video statistics of all cameras on the Recording Server named 'My Recording Server'.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-VideoDeviceStatistics -AsHashTable</dev:code>
        <dev:remarks>
          <maml:para>Gets the video statistics of all cameras and returns the result as a hashtable where the keys are the camera ID's.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-videodevicestatistics/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsArchiveStorage</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsArchiveStorage</command:noun>
      <maml:description>
        <maml:para>Gets the ArchiveStorage objects representing the children of a given live storage configuration.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Gets the ArchiveStorage objects representing the children of a given live storage configuration.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsArchiveStorage</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Storage</maml:name>
          <maml:description>
            <maml:para>Specifies a Storage object such as you get from Get-VmsStorage</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
          <dev:type>
            <maml:name>Storage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the storage configuration to return. Supports wildcards.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>*</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the storage configuration to return. Supports wildcards.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>*</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Storage</maml:name>
        <maml:description>
          <maml:para>Specifies a Storage object such as you get from Get-VmsStorage</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
        <dev:type>
          <maml:name>Storage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ArchiveStorage</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name 'Recorder 1' | Get-VmsStorage -Name Primary | Get-VmsArchiveStorage</dev:code>
        <dev:remarks>
          <maml:para>Gets all archive storage configurations associated with the live storage configuration named 'Primary', on the recording server named 'Recorder 1'.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>$camera | Get-VmsStorage | Get-VmsArchiveStorage | Sort-Object RetainMinutes -Descending |Select-Object -First 1</dev:code>
        <dev:remarks>
          <maml:para>Gets the oldest archive path associated with $camera.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmsarchivestorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsCamera</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsCamera</command:noun>
      <maml:description>
        <maml:para>Gets the matching camera records from the Milestone XProtect Management Server.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Uses Milestone's Configuration API to retrieve matching camera records. The objects returned are read/write representations of the matching cameras. You may use these for reporting purposes, or for changing configuration properties.</maml:para>
      <maml:para>To change properties on the camera records, you may directly modify the value of properties, or you may use the Set-VmsCamera cmdlet. When directly modifying the object's properties, you must call the ".Save()" method, or the changes will not be communicated to the Management Server.</maml:para>
      <maml:para>By default, this cmdlet only returns enabled cameras. To return cameras that are disabled, or to return all cameras, use the EnableFilter parameter to set your preference.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsCamera</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Channel</maml:name>
          <maml:description>
            <maml:para>Specifies the camera channel number, or numbers, to return. Numbering starts at zero, so channel 0 corresponds to the first camera on the hardware device.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32[]</command:parameterValue>
          <dev:type>
            <maml:name>Int32[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies whether to return enabled, disabled, or all cameras when querying by hardware or searching by name or description. The default is to return only enabled cameras.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">EnableFilter</command:parameterValue>
          <dev:type>
            <maml:name>EnableFilter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Enabled</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Hardware</maml:name>
          <maml:description>
            <maml:para>Specifies the hardware object from which to return matching cameras. Results can be filtered further by providing values for one or more additional parameters.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
          <dev:type>
            <maml:name>Hardware[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies a camera name, or any part of a camera name to search for. Any cameras with a matching name will be returned. The default behavior is to return cameras where the supplied value appears anywhere in the camera's name. You may change this behavior by providing an alternate comparison operator using the Comparison parameter.</maml:para>
            <maml:para>Please note that if you supply both a Name and a Description value, the search results returned will include only cameras where the name and description both match the query.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsCamera</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Comparison</maml:name>
          <maml:description>
            <maml:para>Specifies the type of string comparison to perform when searching by name, or description. By default, cameras will be returned if the camera name contains the values specified in the Name or Description parameters anywhere in the string, and the comparison will be case-insensitive.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Equals</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">NotEquals</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Contains</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">BeginsWith</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">Operator</command:parameterValue>
          <dev:type>
            <maml:name>Operator</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Contains</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies a camera description, or any part of a camera description to search for. Any cameras with a matching description will be returned. The default behavior is to return cameras where the supplied value appears anywhere in the camera's description. You may change this behavior by providing an alternate comparison operator using the Comparison parameter.</maml:para>
            <maml:para>Please note that if you supply both a Name and a Description value, the search results returned will include only cameras where the name and description both match the query.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies whether to return enabled, disabled, or all cameras when querying by hardware or searching by name or description. The default is to return only enabled cameras.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">EnableFilter</command:parameterValue>
          <dev:type>
            <maml:name>EnableFilter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Enabled</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>MaxResults</maml:name>
          <maml:description>
            <maml:para>Specifies the maximum number of results to return when searching by name or description. By default, the maximum number of results is 2147483647.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>[int]::MaxValue</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies a camera name, or any part of a camera name to search for. Any cameras with a matching name will be returned. The default behavior is to return cameras where the supplied value appears anywhere in the camera's name. You may change this behavior by providing an alternate comparison operator using the Comparison parameter.</maml:para>
            <maml:para>Please note that if you supply both a Name and a Description value, the search results returned will include only cameras where the name and description both match the query.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Timeout</maml:name>
          <maml:description>
            <maml:para>Specifies a timeout value for searches by name or description. On a large installation, or when there are a high number of matches, the query can take a very long time. You may adjust the timeout to be shorter, or longer, than the default of 15 seconds.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
          <dev:type>
            <maml:name>TimeSpan</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>[timespan]::FromSeconds(15)</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsCamera</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>Id</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera ID's in GUID format. All cameras matching the supplied GUID's will be returned.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Channel</maml:name>
        <maml:description>
          <maml:para>Specifies the camera channel number, or numbers, to return. Numbering starts at zero, so channel 0 corresponds to the first camera on the hardware device.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32[]</command:parameterValue>
        <dev:type>
          <maml:name>Int32[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Comparison</maml:name>
        <maml:description>
          <maml:para>Specifies the type of string comparison to perform when searching by name, or description. By default, cameras will be returned if the camera name contains the values specified in the Name or Description parameters anywhere in the string, and the comparison will be case-insensitive.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Operator</command:parameterValue>
        <dev:type>
          <maml:name>Operator</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Contains</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies a camera description, or any part of a camera description to search for. Any cameras with a matching description will be returned. The default behavior is to return cameras where the supplied value appears anywhere in the camera's description. You may change this behavior by providing an alternate comparison operator using the Comparison parameter.</maml:para>
          <maml:para>Please note that if you supply both a Name and a Description value, the search results returned will include only cameras where the name and description both match the query.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>EnableFilter</maml:name>
        <maml:description>
          <maml:para>Specifies whether to return enabled, disabled, or all cameras when querying by hardware or searching by name or description. The default is to return only enabled cameras.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">EnableFilter</command:parameterValue>
        <dev:type>
          <maml:name>EnableFilter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Enabled</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Hardware</maml:name>
        <maml:description>
          <maml:para>Specifies the hardware object from which to return matching cameras. Results can be filtered further by providing values for one or more additional parameters.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
        <dev:type>
          <maml:name>Hardware[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
        <maml:name>Id</maml:name>
        <maml:description>
          <maml:para>Specifies one or more camera ID's in GUID format. All cameras matching the supplied GUID's will be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>MaxResults</maml:name>
        <maml:description>
          <maml:para>Specifies the maximum number of results to return when searching by name or description. By default, the maximum number of results is 2147483647.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>[int]::MaxValue</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies a camera name, or any part of a camera name to search for. Any cameras with a matching name will be returned. The default behavior is to return cameras where the supplied value appears anywhere in the camera's name. You may change this behavior by providing an alternate comparison operator using the Comparison parameter.</maml:para>
          <maml:para>Please note that if you supply both a Name and a Description value, the search results returned will include only cameras where the name and description both match the query.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Timeout</maml:name>
        <maml:description>
          <maml:para>Specifies a timeout value for searches by name or description. On a large installation, or when there are a high number of matches, the query can take a very long time. You may adjust the timeout to be shorter, or longer, than the default of 15 seconds.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">TimeSpan</command:parameterValue>
        <dev:type>
          <maml:name>TimeSpan</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>[timespan]::FromSeconds(15)</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Hardware[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Int32[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Guid</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsCamera
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
Axis A8105-E (10.1.77.153) - Camera 1 0 True 1/15/2022 12:22:27 PM 3DCCE3DA-021D-4968-831C-24F09031EEDA
Axis M1125 (10.1.77.129) - Camera 1 0 True 1/15/2022 11:29:10 AM 44E1D43D-4A54-4B8A-8E3D-513EB7007AAC
Axis P1375 (10.1.77.178) - Camera 1 0 True 1/15/2022 11:22:44 AM DD9F523E-AFB2-4E6F-A11D-262A4E760B5A
Axis P3225-LV (10.1.77.130) - Camera 1 0 True 1/15/2022 11:22:48 AM 71D46BAA-9810-45B0-8461-DD5B369FFB0B
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example, we first ensure we are logged in to the Management Server. Then we call the "Get-VmsCamera" cmdlet with no parameters which will return all enabled cameras. By piping these results to "Out-GridView" we can view the output in a sortable, searchable table.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>Get-VmsCamera -Name 'Garage'
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
Garage Camera 0 True 1/18/2022 3:41:21 PM CA146DFD-72C9-4BBA-83DD-8B680E70DA1B
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>This example demonstrates how to find all enabled cameras with the word "Garage" anywhere in the camera name. The search is case-insensitive and will return cameras named "Shop Garage" or "Rear garage door".</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>Get-VmsCamera -Name 'Garage' -EnableFilter All
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
Garage 1 0 True 12/1/2021 4:23:24 PM 430FA37D-CBE6-4248-9CBA-989AEF7F0428
Garage 2 1 False 1/13/2022 1:27:42 PM 22436AA5-CC64-4F82-A35C-3EF9ADEFED74
Garage 3 0 True 1/17/2022 4:32:00 PM 80DA2327-D178-457A-8216-0F7D6CF2F746
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Find all cameras, enabled or disabled, with the word "Garage" anywhere in the camera name. The search is case-insensitive, and uses a fast search feature introduced in XProtect 2020 R2.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code>Get-Hardware | Where-Object Name -like '*Elevator*' | Get-VmsCamera -EnableFilter All
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
North Elevator 0 True 1/18/2022 3:41:21 PM CA146DFD-72C9-4BBA-83DD-8B680E70DA1B
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Find all hardware where the word "elevator" appears in the name, and then return all camera channels associated with those hardware devices, both enabled and disabled.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>Get-VmsCamera -Id '42C055AA-3EAC-45AF-B956-5C253384BDF1'
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
Garage Cam 1 0 True 1/18/2022 3:41:21 PM 42C055AA-3EAC-45AF-B956-5C253384BDF1
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Returns one camera matching the supplied ID.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 6 --------------------------</maml:title>
        <dev:code>(Get-ItemState -CamerasOnly | Where-Object State -ne 'Responding').FQID.ObjectId | Get-VmsCamera
 
&lt;#
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
Canon VB-M40 - Camera 1 0 True 12/7/2021 3:37:23 PM 3E337A3D-8C48-4B9E-A61A-972CDD261B27
Canon VB-S900F - Camera 1 0 True 12/7/2021 3:04:59 PM 539FDA6D-1167-4C3D-854D-577B60FEAB88
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Retrieves the state of all enabled cameras, and extracts the ID of all cameras that are not responding, according to the Milestone Event Server. These camera ID's are then used to retrieve the camera configuration records for these cameras.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 7 --------------------------</maml:title>
        <dev:code>Get-Hardware | Get-VmsCamera -Channel (1..15)
 
&lt;# OUTPUT
Name Channel Enabled LastModified Id
---- ------- ------- ------------ --
TH6TC2 1 True 1/17/2022 4:32:00 PM 96F49AF3-861C-4037-8950-8B933644E861
TH6TC3 2 True 1/17/2022 4:32:00 PM 8A175713-823A-46EF-A0E4-1768EA7A5A04
TH6TC4 3 True 1/17/2022 4:32:00 PM C958EE67-4C72-4884-A77F-A3882FB12F97
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Returns all enabled cameras from all hardware devices where the channel number is between 1 and 15, representing camera 2 through camera 16. You might use this if you only want the first channel enabled, and you want to use the results of this query to disable unwanted camera channels.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmscamera/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsCameraGeneralSetting</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsCameraGeneralSetting</command:noun>
      <maml:description>
        <maml:para>Gets the general settings for one or more cameras.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet returns a hashtable with all the general settings available for a camera, including read-only settings and settings usually hidden from the Management Client user interface.</maml:para>
      <maml:para>General settings often include properties like "Rotation", "Saturation", and "Brightness", which usually apply to all streams available from the camera.</maml:para>
      <maml:para>Each camera model will have a different set of general settings, and some cameras may not have any general settings at all.</maml:para>
      <maml:para>The values returned by this cmdlet are the "display values" you should see in the Management Client. To see the raw, internal values used by the MIP SDK, you may use the "-RawValues" switch.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraGeneralSetting</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RawValues</maml:name>
          <maml:description>
            <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ValueTypeInfo</maml:name>
          <maml:description>
            <maml:para>Specifies that the hashtable should contain a "ValueTypeInfo" collection for each general setting, instead of the value of the setting. The "ValueTypeInfo" collections can be used to discover the valid ranges or values for each setting.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
        <dev:type>
          <maml:name>Camera[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RawValues</maml:name>
        <maml:description>
          <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ValueTypeInfo</maml:name>
        <maml:description>
          <maml:para>Specifies that the hashtable should contain a "ValueTypeInfo" collection for each general setting, instead of the value of the setting. The "ValueTypeInfo" collections can be used to discover the valid ranges or values for each setting.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VmsDeviceGeneralSettings</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$camera | Get-VmsCameraGeneralSetting
 
&lt;# OUTPUT (display values)
Name Value
---- -----
RecorderMode Disabled
MulticastVideoPort 0
RecorderRetentionTime 336
Saturation 50
RecorderAudioEnabled No
Sharpness 50
Brightness 50
EdgeStorageRecording Continuous
EdgeStorageStreamIndex 0
Rotation 0
MulticastAddress 239.244.177.82
RecorderStreamIndex 1
OSDDateTime Disabled
RecorderPostTriggerTime 0
MulticastTTL 5
EdgeStorageEnabled false
BlackAndWhiteMode Color
MulticastForceSSM No
WhiteBalance Automatic
RecorderPreTriggerTime 0
#&gt;
 
$camera | Get-VmsCameraGeneralSetting -RawValues
 
&lt;# OUTPUT (raw values)
Name Value
---- -----
RecorderMode Disabled
MulticastVideoPort 0
RecorderRetentionTime 336
Saturation 50
RecorderAudioEnabled no
Sharpness 50
Brightness 50
EdgeStorageRecording Continuous
EdgeStorageStreamIndex 0
Rotation 0
MulticastAddress 239.244.177.82
RecorderStreamIndex 1
OSDDateTime Disabled
RecorderPostTriggerTime 0
MulticastTTL 5
EdgeStorageEnabled False
BlackAndWhiteMode Yes
MulticastForceSSM no
WhiteBalance Automatic
RecorderPreTriggerTime 0
#&gt;
 
($camera | Get-VmsCameraGeneralSetting -ValueTypeInfo).BlackAndWhiteMode
 
&lt;# OUTPUT
TranslationId Name Value
------------- ---- -----
d65be37a-9416-4bbf-8ed3-36ebd12cd837 Color Yes
f7729675-9e20-4593-9611-f53c11c6fdd4 Black &amp; White No
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example we show how to login, select a camera using an interactive camera selection dialog, and then display the general settings for the camera using the default "display values". Then we show how the same settings appear when using the raw values. For example, the display value for BlackAndWhiteMode is "Color", and the raw value is "Yes".</maml:para>
          <maml:para>For reference, the ValueTypeInfo collection for the BlackAndWhiteMode setting is displayed. You can see how the ValueTypeInfo collection maps the raw value "Yes" to the display value "Color".</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmscamerageneralsetting/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsCameraReport</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsCameraReport</command:noun>
      <maml:description>
        <maml:para>Gets a detailed report at the camera device level for all cameras added to the current Milestone XProtect VMS site.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a report with detailed camera status and configuration information. A popular use of a report like this is to verify configuration properties are consistent between cameras, or to check that the desired video retention is being reached for all cameras. The report is returned as an array of [PSCustomObject]'s which you can then process in your script, or pipe directly to a CSV file. See the examples for inspiration.</maml:para>
      <maml:para>For additional information about the output, including detailed column information, see the about_Get-VmsCameraReport help topic by using "Get-Help about_Get-VmsCameraReport".</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraReport</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies one or more RecordingServer objects such as returned by Get-RecordingServer. Omit this parameter and the report will include cameras from all recording servers on the current site.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>SnapshotHeight</maml:name>
          <maml:description>
            <maml:para>Specifies the image height for snapshots if included. Default is 300 pixels in height. Aspect ratio will be maintained.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>300</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>EnableFilter</maml:name>
          <maml:description>
            <maml:para>Specifies which devices to include in the report. Default is to include only enabled devices.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">All</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Disabled</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Enabled</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Enabled</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludePlainTextPasswords</maml:name>
          <maml:description>
            <maml:para>Specifies that a plain text password should be included in the report for each device.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeRecordingStats</maml:name>
          <maml:description>
            <maml:para>Specifies that the % of time each camera has been recording over the last 7 days should be included in the report. Note that including this may result in a long time to complete the report.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeRetentionInfo</maml:name>
          <maml:description>
            <maml:para>Specifies that the report should timestamps for the first and last recorded images, and whether each camera meets the configured retention settings for the storage configuration.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>IncludeSnapshots</maml:name>
          <maml:description>
            <maml:para>Specifies that a bitmap object should be included in the results of the report. You must decide how to handle this snapshot yourself. If you try to export to CSV with snapshots, the Snapshot column will contain only the name of the bitmap type.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>EnableFilter</maml:name>
        <maml:description>
          <maml:para>Specifies which devices to include in the report. Default is to include only enabled devices.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Enabled</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludePlainTextPasswords</maml:name>
        <maml:description>
          <maml:para>Specifies that a plain text password should be included in the report for each device.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeRecordingStats</maml:name>
        <maml:description>
          <maml:para>Specifies that the % of time each camera has been recording over the last 7 days should be included in the report. Note that including this may result in a long time to complete the report.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeRetentionInfo</maml:name>
        <maml:description>
          <maml:para>Specifies that the report should timestamps for the first and last recorded images, and whether each camera meets the configured retention settings for the storage configuration.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>IncludeSnapshots</maml:name>
        <maml:description>
          <maml:para>Specifies that a bitmap object should be included in the results of the report. You must decide how to handle this snapshot yourself. If you try to export to CSV with snapshots, the Snapshot column will contain only the name of the bitmap type.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies one or more RecordingServer objects such as returned by Get-RecordingServer. Omit this parameter and the report will include cameras from all recording servers on the current site.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>SnapshotHeight</maml:name>
        <maml:description>
          <maml:para>Specifies the image height for snapshots if included. Default is 300 pixels in height. Aspect ratio will be maintained.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>300</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsCameraReport -RecordingServer (Get-RecordingServer | Out-GridView -OutputMode Multiple) | Out-GridView</dev:code>
        <dev:remarks>
          <maml:para>Presents a gridview dialog for you to select one or more recording servers, then generates a camera report for cameras on those recording servers, and presents the results in gridview.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$fileName = "camera-report_$((Get-Date).ToString('yyyy-MM-dd_HH-mm-ss')).csv"
$filePath = Join-Path -Path "~\Desktop" -ChildPath $fileName
Get-VmsCameraReport -IncludeRetentionInfo -IncludeRecordingStats | Export-Csv -Path $filePath</dev:code>
        <dev:remarks>
          <maml:para>Creates a camera report with video retention information and recording statistics, and saves the results to the current user's desktop with a timestamp in the file name.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmscamerareport/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsCameraStream</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsCameraStream</command:noun>
      <maml:description>
        <maml:para>Gets stream configuration information for the specified camera(s).</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Video stream configuration in a Milestone XProtect VMS includes properties of the video stream(s) themselves, such as framerate, codec, and resolution, in addition to whether the VMS will use those video streams, and for what purpose.</maml:para>
      <maml:para>The results returned from this cmdlet include the immutable name of the video stream such as "Video stream 1", which is displayed in the settings tab for each camera in Management Client. A collection of key-value pairs representing the properties of the video stream is available in the "Settings" property of the [VmsCameraStreamConfig] object.</maml:para>
      <maml:para>A second hashtable with keys matching the keys of the Settings hashtable is available under a property named "ValueTypeInfo. Each element in the ValueTypeInfo hashtable is a collection of ValueTypeInformation objects representing the valid values, or ranges for each setting for the stream. See the examples for more information.</maml:para>
      <maml:para>If the stream is in use by the VMS for either live streaming, or for recording, then the stream's "Enabled" property will be $true. When a stream is in use, it will have a DisplayName value representing the name of the stream displayed to anyone using a client application like XProtect Smart Client. The Name property is immutable, but you may name the DisplayName property as needed.</maml:para>
      <maml:para>Also included are the LiveMode, LiveDefault, and Recorded properties. These indicate whether the stream is selected as the default live stream, and/or the recorded stream. And whether the stream is available for live viewing Always, Never, or WhenNeeded.</maml:para>
      <maml:para>The LiveMode of a stream can only be set to "Never" when the stream is exclusively used for recording. This is to allow administrators to record at a very high quality, while avoiding unnecessary bandwidth usage by enabling only a lower-bandwidth stream for live viewing. When the LiveMode is set to "WhenNeeded", the recording server will only pull that stream from the camera when a client requests it.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraStream</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Enabled</maml:name>
          <maml:description>
            <maml:para>Specifies that only enabled streams should be returned. This includes any stream that is used as the default live stream, recorded stream, or is otherwise added and displayed in the "Streams" tab for the camera in Management Client. It includes all streams that are configured for any kind of use by the VMS.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RawValues</maml:name>
          <maml:description>
            <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraStream</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>LiveDefault</maml:name>
          <maml:description>
            <maml:para>Specifies that only the default live stream for the given camera should be returned.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RawValues</maml:name>
          <maml:description>
            <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraStream</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the video stream as displayed in the Settings tab for the camera in Management Client.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RawValues</maml:name>
          <maml:description>
            <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsCameraStream</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RawValues</maml:name>
          <maml:description>
            <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Recorded</maml:name>
          <maml:description>
            <maml:para>Specifies that only the recorded stream for the given camera should be returned.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
        <dev:type>
          <maml:name>Camera[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Enabled</maml:name>
        <maml:description>
          <maml:para>Specifies that only enabled streams should be returned. This includes any stream that is used as the default live stream, recorded stream, or is otherwise added and displayed in the "Streams" tab for the camera in Management Client. It includes all streams that are configured for any kind of use by the VMS.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>LiveDefault</maml:name>
        <maml:description>
          <maml:para>Specifies that only the default live stream for the given camera should be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the video stream as displayed in the Settings tab for the camera in Management Client.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RawValues</maml:name>
        <maml:description>
          <maml:para>Specifies that the raw, internal values of settings should be returned instead of returning the display values seen in Management Client.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Recorded</maml:name>
        <maml:description>
          <maml:para>Specifies that only the recorded stream for the given camera should be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VmsCameraStreamConfig</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$camera | Get-VmsCameraStream -LiveDefault
 
&lt;# OUTPUT
Camera Name DisplayName Enabled LiveMode LiveDefault Recorded
------ ---- ----------- ------- -------- ----------- --------
Cam Lab Video stream 1 Live stream True WhenNeeded True True
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After first logging in to the Management Server, we use a helpful camera selection dialog. Select any camera, and the properties of the default live stream will be displayed. The properties include Settings and ValueTypeInfo collections as hashtables, but they are not rendered in the PowerShell terminal by default because hashtables don't display very useful information unless they are expanded. The next example will show how to display more information about the stream settings.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$stream = $camera | Get-VmsCameraStream -LiveDefault
$stream.Settings
 
&lt;# OUTPUT
Name Value
---- -----
ZFpsMode Fixed
Compression 30
StreamingMode RTP/RTSP/TCP
ControlMode Variable bit rate
TargetBitrate 2000
MaxBitrate 0
Resolution 1280x720
FPS 10
MaxGOPMode Default (determined by driver)
ControlPriority None
IncludeTime No
EdgeStorageSupported true
ZGopLength 300
ZGopMode Fixed
MaxGOPSize 30
ZStrength Low
RetentionTime 7
IncludeDate No
Codec H.265
#&gt;
 
($camera | Get-VmsCameraStream -LiveDefault -RawValues).Settings
 
&lt;# OUTPUT (raw values)
Name Value
---- -----
ZFpsMode fixed
Compression 30
StreamingMode TCP
ControlMode VariableBitRate
TargetBitrate 2000
MaxBitrate 0
Resolution 1280x720
FPS 10
MaxGOPMode default
ControlPriority None
IncludeTime no
EdgeStorageSupported True
ZGopLength 300
ZGopMode fixed
MaxGOPSize 30
ZStrength low
RetentionTime 7
IncludeDate no
Codec h265
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>This example begins the same as the last, using a camera selection dialog. Then we store the VmsCameraStreamConfig reference in the "$stream" variable, and display the content of "$stream.Settings". The results are a collection of key/value pairs representing a variety of properties of the default live stream for the selected camera.</maml:para>
          <maml:para>The properties will vary widely by camera make, model, and Milestone device pack driver. For instance, not every camera will have an "FPS" or "Resolution" property, and in some cases, they may be present, but with different names or value formats. For example, Resolution for one camera might be formatted like "1920x1080", while another camera stores resolution values like "MP 1080p". The properties and their available values are determined by the device pack driver on the recording server.</maml:para>
          <maml:para>By default, the values for settings are the "display values". For example, the raw value for Codec might be "4", but that is not meaningful for a report, so the display value for "4" is retrieved from the ValueTypeInfo collection. If raw values are preferred, you can use the "-RawValues" switch.</maml:para>
          <maml:para>Note that there are some settings, such as "EdgeStorageSupported" which are read-only. However, there is currently no method to discover this using this cmdlet.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code># This example will show the properties of an Axis camera using the ONVIF driver
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$stream = $camera | Get-VmsCameraStream -LiveDefault -RawValues
$stream.Settings
 
&lt;# OUTPUT (partial)
Name Value
---- -----
Codec 4
#&gt;
 
$stream.ValueTypeInfo.Codec
 
&lt;# OUTPUT
TranslationId Name Value
------------- ---- -----
f98cc65b-4b3c-43c6-b59e-25003f32b9a5 JPEG 0
e6d2aa07-39fc-49d7-a632-3ceb08b754c6 H.264 Baseline Profile 3
83f64935-44f7-40aa-860d-20fe57be44ce H.264 Main Profile 4
83c9a259-d54e-4179-91e9-d7c053dc0de8 H.264 High Profile 6
5acf7ca5-e822-460b-a70d-d3c82e28af48 H.265 Main Profile 7
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Building on the last example, here we dig deeper to understand the meaning of the codec setting value of "4". The setting name "Codec" is a key in the ValueTypeInfo hashtable and when we reveal the contents, we see a list of ValueTypeInformation objects showing the display name (Name) and internal value (Value) for each value available for that setting.</maml:para>
          <maml:para>We also see a TranslationId property. This can be used in combination with the "Get-Translation" cmdlet to get a localized display name for each value.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code># This example will show the properties of an Axis camera using the ONVIF driver
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$stream = $camera | Get-VmsCameraStream -LiveDefault
$stream.Settings
 
&lt;# OUTPUT (partial)
Name Value
---- -----
Quality 70
#&gt;
 
$stream.ValueTypeInfo.Quality
 
&lt;# OUTPUT
TranslationId Name Value
------------- ---- -----
              MinValue 0
              MaxValue 100
              StepValue 1
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>This example shows a different type of value you will encounter - a range. You will typically see these value types when working with numeric settings like FPS, Quality, Compression, and so on.</maml:para>
          <maml:para>When we check the ValueTypeInfo collection for the Quality property, we see the range defined as 0-100 using the MinValue and MaxValue entries. There is also a StepValue indicated, and from this we can determine that only whole numbers between 0 and 100 are accepted as values for the Quality setting. This value includes a StepValue, but not every range does.</maml:para>
          <maml:para>Since this value is not an "enumeration" type with fixed values like "Low" or "High", there are no words to translate, and we do not see any TranslationId values.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>$codec = @{
    Name = 'Codec'
    Expression = {$_.Settings.Codec}
}
$fps = @{
    Name = 'FPS'
    Expression = {$_.Settings.FPS}
}
Get-Hardware | Get-VmsCamera | Get-VmsCameraStream -LiveDefault | `
    Select-Object Camera, Name, DisplayName, Recorded, $codec, $fps | `
    Select-Object -First 10 | `
    Format-Table
 
&lt;# OUTPUT
Camera Name DisplayName Recorded Codec FPS
------ ---- ----------- -------- ----- ---
Learning &amp; Performance (Bos... Video stream 1 Video stream 1 True 15
US101 at Lincoln City - Log... Video stream 1 Video stream 1 True MJPEG 0.5
I-405 at MP 0.8: West Valle... Video stream 1 Video stream 1 True MJPEG 0.5
Camera Lab (AXIS P1435-LE) Video stream 2 Video stream 2 False H.264 15
Southwest Corner - Rear Ent... Video stream 2 Video stream 2 False H.264 15
Halo Smart Sensor Video stream 1 Video stream 1 True H.264 10
I-84 at LePage Park - John ... Video stream 1 Video stream 1 True MJPEG 0.5
Gameroom door (AXIS P3245-V... Video stream 2 Video stream 2 False H.264 15
Southwest Corner - Rear Par... Video stream 2 Video stream 2 False H.264 15
Lobby Fisheye (Bosch 7000 M... Video stream 2 Video stream 2 False 15
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>This example shows how you might use the cmdlet to learn about how all camera live streams are configured. With the "Select-Object -First 10" we limit the results. The $codec, and $fps hashtables are used to add "calculated properties" to our use of "Select-Object". When you want to include the nested value of a property in your results, this is one way to do that.</maml:para>
          <maml:para>The camera name is included in the default view for these results, and if you need more information from the camera object, you can use the hidden "Camera" property attached to the VmsCameraStreamConfig object returned by this cmdlet.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmscamerastream/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsDeviceStatus</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsDeviceStatus</command:noun>
      <maml:description>
        <maml:para>Gets the current device status for any streaming device directly from the recording server.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Recording Servers offer a status interface called RecorderStatusService2. This service has a method called GetCurrentDeviceStatus which can return the current state of any streaming device type including cameras, microphones, speakers, and metadata, as well as IO device types including inputs and outputs.</maml:para>
      <maml:para>This cmdlet will return status for one or more of the streaming device types, and the results will include all devices of the specified type(s) that are active on the recording server.</maml:para>
      <maml:para>Note that the Motion property will always be false for anything but the Camera device type.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsDeviceStatus</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="Id">
          <maml:name>RecordingServerId</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Recording Server ID's. Omit this parameter and all recording servers will be queried for status.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>DeviceType</maml:name>
          <maml:description>
            <maml:para>Specifies one or more streaming device types to retrieve status for.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Camera</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="Id">
        <maml:name>RecordingServerId</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Recording Server ID's. Omit this parameter and all recording servers will be queried for status.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>DeviceType</maml:name>
        <maml:description>
          <maml:para>Specifies one or more streaming device types to retrieve status for.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Camera</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>[VmsStreamDeviceStatus]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para>If one or more status entries have a DeviceId value of "00000000-0000-0000-0000-000000000000", this means the recording server has not been able to load the device configuration yet. This should normally not happen except perhaps for a short period after the recording server is started. If the issue does not resolve on it's own, it's possible you are impacted by an issue solved by a cumulative patch available for your product version. If you're unable to resolve the issue and the camera is unavailable in XProtect Smart Client, you should open a support case with Milestone technical support.</maml:para>
        <maml:para>The following log message from the recording server's RecorderEngine.log file at C:\ProgramData\Milestone\XProtect Recording Server\Logs is one error that is known to result in device status messages like this.</maml:para>
        <maml:para>2022-01-27 16:33:48.620-08:00 [ 7] ERROR - Unable to get driver update changes (Retries: 323). Hardware Id: fbcf40ba-e807-419a-8e11-e782551190a5; Hardware model: Bosch1ch;</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsDeviceStatus -DeviceType Camera, Microphone
 
&lt;# OUTPUT
  DeviceName : Learning &amp; Performance (Bosch 7000VR)
  DeviceType : Camera
  RecorderName : Milestone Demo
  RecorderId : 72080191-d39d-4229-b151-65bcd740c393
  Motion : False
  Recording : False
  DbMoveInProgress : False
  ErrorOverflow : False
  ErrorWritingGop : False
  DbRepairInProgress : False
  DeviceId : 004962d3-b129-4099-8c6e-0f8bff8385b0
  IsChange : False
  Enabled : True
  Started : True
  Error : False
  ErrorNotLicensed : False
  ErrorNoConnection : False
  Time : 1/27/2022 11:33:32 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After logging in to the Management Server, the status of all enabled cameras and microphones is returned. The example shows all properties available on the resulting VmsStreamDeviceStatus object.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-VmsDeviceStatus</dev:code>
        <dev:remarks>
          <maml:para>Returns the status of all cameras on all recording servers. The default DeviceType value is 'Cameras', so if that is all you need, you may omit the DeviceType parameter like this. And when no recording server ID's are provided, status requests are sent to all recording servers.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name 'Recorder1' | Get-VmsDeviceStatus</dev:code>
        <dev:remarks>
          <maml:para>Returns the status of all cameras on recording server named "Recorder1". The RecordingServerId property has an alias of "Id" and accepts values from the pipeline by property name, so you can pipe a Recording Server object to this cmdlet.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmsdevicestatus/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsFailoverGroup</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsFailoverGroup</command:noun>
      <maml:description>
        <maml:para>Gets one or more failover groups from the current Milestone XProtect VMS site.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The `Get-VmsFailoverGroup` cmdlet gets one or more existing failover groups, which can each contain one or more failover recording servers.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsFailoverGroup</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>Id</maml:name>
          <maml:description>
            <maml:para>Specifies the ID of an existing failover group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>Id</maml:name>
        <maml:description>
          <maml:para>Specifies the ID of an existing failover group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
        <dev:type>
          <maml:name>Guid</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.FailoverGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
 
Get-VmsFailoverGroup | Where-Object Name -eq 'FO Group 1'</dev:code>
        <dev:remarks>
          <maml:para>Prompts user to login to a Milestone VMS, then gets the failover group named 'FO Group 1' if it exists.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmsfailovergroup/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsSiteInfo</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsSiteInfo</command:noun>
      <maml:description>
        <maml:para>Gets one or more site information fields.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet gets the site information values. Each line of information is returned as pscustomobject with a DisplayName, Property, and Value property.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsSiteInfo</maml:name>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>Property</maml:name>
          <maml:description>
            <maml:para>Specifies the property name to get. The default is to return all values.</maml:para>
            <maml:para>The values as of 2022 R2 are: address.Name, address.Address, address.State, address.Phone, address.Country, address.ZipCode, admin.Name, admin.Address, admin.Phone, additional.AdditionalInfo</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>Property</maml:name>
        <maml:description>
          <maml:para>Specifies the property name to get. The default is to return all values.</maml:para>
          <maml:para>The values as of 2022 R2 are: address.Name, address.Address, address.State, address.Phone, address.Country, address.ZipCode, admin.Name, admin.Address, admin.Phone, additional.AdditionalInfo</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>PSCustomObject</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-VmsManagementServer -ShowDialog -AcceptEula
Get-VmsSiteInfo
 
&lt;# OUTPUT
  DisplayName Property Value
  ----------- -------- -----
  Address - Name address.Name Milestone Systems
  Address - Address address.Address 5300 Meadows Rd STE 400
  Address - Address address.Address Lake Oswego, OR 97035
  Address - Country address.Country United States
  Address - Phone address.Phone +1 503-350-1100
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After logging in to the Management Server, this example returns all site information. This information could be piped directly to a CSV file and then imported on a different site if you have many sites that you manage. See the next example for inspiration.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code># Export current site's site info to csv
Get-VmsSiteInfo | Export-Csv ~\Desktop\siteinfo.csv
 
# Update the site info on a different site
Clear-VmsSiteInfo -Verbose
Import-Csv ~\Desktop\siteinfo.csv | Set-VmsSiteInfo -Append -Verbose</dev:code>
        <dev:remarks>
          <maml:para>This example shows how you might export the site information, and then import that information on a different site. On the new site, we first use Clear-VmsSiteInfo to ensure that we don't add new data to existing site info properties. Then we import the rows from the csv file which as the columns "DisplayName", "Property", and "Value" by default because that is the name of the properties returned by Get-VmsSiteInfo.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmssiteinfo/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsStorage</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsStorage</command:noun>
      <maml:description>
        <maml:para>Gets the Storage objects representing the live recording storages on Milestone XProtect recording servers</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Gets the Storage objects representing the live recording storages on Milestone XProtect recording servers</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="RecordingStorage, Path">
          <maml:name>ItemPath</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone Configuration API path for the storage configuration. For example, Storage[eef84b4a-1e7a-4f99-ac5f-671ae76d520b] Note: You may pipe a camera object to this cmdlet and the RecordingStorage alias will be used to identify the correct storage configuration</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the storage configuration to return. Supports wildcards.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>*</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies the Recording Server object from which to return storage configurations</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="RecordingStorage, Path">
        <maml:name>ItemPath</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone Configuration API path for the storage configuration. For example, Storage[eef84b4a-1e7a-4f99-ac5f-671ae76d520b] Note: You may pipe a camera object to this cmdlet and the RecordingStorage alias will be used to identify the correct storage configuration</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the storage configuration to return. Supports wildcards.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>*</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies the Recording Server object from which to return storage configurations</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Storage</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name 'Recorder 1' | Get-VmsStorage</dev:code>
        <dev:remarks>
          <maml:para>Gets all storage configurations on the recording server named 'Recorder 1</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-RecordingServer | Get-VmsStorage -Name 'Local*'</dev:code>
        <dev:remarks>
          <maml:para>Gets all storage configurations on all recording servers where the name begins with 'Local'</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>$camera | Get-VmsStorage</dev:code>
        <dev:remarks>
          <maml:para>Gets the storage configuration associated with the Camera object in the variable $camera</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmsstorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsStorageRetention</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsStorageRetention</command:noun>
      <maml:description>
        <maml:para>Gets a [timespan] representing the storage retention for the specified storage configuration</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>A Milestone Storage object represents both the overall storage configuration and the live storage information for that storage configuration. It has ArchiveStorage child items for each archive path associated with that storage configuration. To determine the retention for the whole storage configuration, you need to find the largest "RetainMinutes" value between the live recording path and all the optional archive storage paths.</maml:para>
      <maml:para>This function saves the step of checking whether archives exist and finding the archive child item with the longest retention.</maml:para>
      <maml:para>The value returned represents the maximum age of data before it will be deleted. The only exception is if you have used the evidence lock feature which can tag video with custom retention policies and even keep video indefinitely.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsStorageRetention</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Storage</maml:name>
          <maml:description>
            <maml:para>Specifies the the storage object from which to return the maximum retention value. Use Get-VmsStorage to acquire a Storage object.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
          <dev:type>
            <maml:name>Storage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Storage</maml:name>
        <maml:description>
          <maml:para>Specifies the the storage object from which to return the maximum retention value. Use Get-VmsStorage to acquire a Storage object.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
        <dev:type>
          <maml:name>Storage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.TimeSpan</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name Test | Get-VmsStorage | Foreach-Object { [pscustomobject]@{ Storage = $_.Name; Retention = ($_ | Get-VmsStorageRetention).TotalDays } }</dev:code>
        <dev:remarks>
          <maml:para>Gets all storage configurations associated with the Recording Server named "Test" and returns the storage names and the maximum retention value in days.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmsstorageretention/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsView</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Gets one or more views which are typically defined in XProtect Smart Client.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Gets one or more View objects which are children of ViewGroup containers. Views have a layout defined in XML, and contain one ViewItemChildItem for each "pane" in the view where a camera or other view item can be placed.</maml:para>
      <maml:para>The ViewItemChildItem objects are further defined by their own ViewItem xml which describes the content of that view item within the overall view.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
          <maml:name>Id</maml:name>
          <maml:description>
            <maml:para>Specifies the ID of a specific view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsView</maml:name>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the view name with support for wildcards.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the parent view group from which views should be returned.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
        <maml:name>Id</maml:name>
        <maml:description>
          <maml:para>Specifies the ID of a specific view.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
        <dev:type>
          <maml:name>Guid</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the view name with support for wildcards.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the parent view group from which views should be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para>Due to a bug in XProtect VMS versions released before 2022 R2, views that are nested in subgroups will all appear to be duplicated in each parent group when accessing the view group configuration through the Configuration API. Since MilestonePSTools uses the Configuration API to access view group information, view locations may not appear to match XProtect Smart Client unless you are running version 2022 R2 or later, or unless the issue is resolved in a cumulative patch for your VMS version.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsView
 
&lt;# OUTPUT
DisplayName ViewSize Shortcut Id LastModified
----------- -------- -------- -- ------------
New View (1 x 2) 2 78904DC2-20FF-4F47-97... 3/25/2020 3:23:19 PM
New View (1 + 7) 8 7BE65A12-2997-4783-A5... 3/25/2020 1:24:12 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of all views in all view groups.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$parentViewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$parentViewGroup | Get-VmsViewGroup -Recurse | Get-VmsView
 
&lt;# OUTPUT
DisplayName ViewSize Shortcut Id LastModified
----------- -------- -------- -- ------------
New View (1 x 2) 2 78904DC2-20FF-4F47-97... 3/25/2020 3:23:19 PM
New View (1 + 7) 8 7BE65A12-2997-4783-A5... 3/25/2020 1:24:12 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Returns all views from all child view groups of the selected parent view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsViewGroup</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Gets one or more top-level or child view groups as seen in XProtect Smart Client.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>View groups are containers for groups and views. Top-level view groups are defined in Management Client and permissions can be set per role for these top-level groups.</maml:para>
      <maml:para>In XProtect Smart Client, you will normally see a "Private" view group which is unique to your user account, and zero or more additional view groups depending on your system configuration. These view groups cannot directly contain views, but they can contain one or more child view groups. Views and view groups can be nested.</maml:para>
      <maml:para>Use this command to retrieve view groups and inspect or modify their contents, or adjust permissions for roles using the `*-VmsViewGroupAcl` commands.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
          <maml:name>Id</maml:name>
          <maml:description>
            <maml:para>Specifies the ID of a specific view group. It can be a top-level, or child view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsViewGroup</maml:name>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the view group name with support for wildcards.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Parent</maml:name>
          <maml:description>
            <maml:para>Specifies a parent view group object. Useful for retrieving child view groups from a specific parent view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Recurse</maml:name>
          <maml:description>
            <maml:para>Specifies that all child view groups should be returned recursively.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
        <maml:name>Id</maml:name>
        <maml:description>
          <maml:para>Specifies the ID of a specific view group. It can be a top-level, or child view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
        <dev:type>
          <maml:name>Guid</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the view group name with support for wildcards.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Parent</maml:name>
        <maml:description>
          <maml:para>Specifies a parent view group object. Useful for retrieving child view groups from a specific parent view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Recurse</maml:name>
        <maml:description>
          <maml:para>Specifies that all child view groups should be returned recursively.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsViewGroup
 
&lt;# OUTPUT
DisplayName Id LastModified
----------- -- ------------
Private 5C72A7B2-E3A8-4FF1-9F97-85C99D91E9D1 10/5/2017 5:21:01 PM
Main View Group 95DA86DD-386D-4159-87D8-00885CE29407 10/22/2017 9:38:44 PM
LPR B3E356AF-1F4A-4557-A8D5-CAE7641384D6 10/19/2018 11:03:10 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of all view groups.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$viewgroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$viewGroup | Get-VmsViewGroup -Recurse
 
&lt;# OUTPUT
DisplayName Id LastModified
----------- -- ------------
New Group 9CDCFC6C-CE51-403E-8410-C8EB1F317D12 3/13/2019 9:27:21 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example you will be prompted to select from one of the top-level view groups, and then all child view groups, recursively, will be returned.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>Get-VmsViewGroup -Name 'Main View Group' -Recurse | Get-VmsView
 
&lt;# OUTPUT
DisplayName ViewSize Shortcut Id LastModified
----------- -------- -------- -- ------------
New View (1 x 2) 2 78904DC2-20FF-4F47-97... 3/25/2020 3:23:19 PM
New View (1 + 7) 8 7BE65A12-2997-4783-A5... 3/25/2020 1:24:12 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example, we recursively seek all view groups inside the top-level 'Main View Group` group, and then return all views in all child view groups.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-VmsViewGroupAcl</command:name>
      <command:verb>Get</command:verb>
      <command:noun>VmsViewGroupAcl</command:noun>
      <maml:description>
        <maml:para>Gets the security permissions for one or more roles on a given XProtect Smart Client view group.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Top-level view groups defined in the Management Client can be accessed and modified only if a user's role has permission to that top-level view group. This command enables you to retrieve the permissions, or "access control list" (ACL), for a view group. You may modify the permissions and push the changes back to the Management Server using the Set-VmsViewGroupAcl command.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-VmsViewGroupAcl</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Role</maml:name>
          <maml:description>
            <maml:para>Specifies one or more existing, user-defined roles. If you omit this parameter, the ACL for every user-defined role will be returned.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Role[]</command:parameterValue>
          <dev:type>
            <maml:name>Role[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the view group from which to retrieve the ACL(s).</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsViewGroupAcl</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>RoleId</maml:name>
          <maml:description>
            <maml:para>Specifies the ID of a given role.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Role</command:parameterValue>
          <dev:type>
            <maml:name>Role</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the view group from which to retrieve the ACL(s).</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-VmsViewGroupAcl</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>RoleName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of a given role with support for wildcards.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the view group from which to retrieve the ACL(s).</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Role</maml:name>
        <maml:description>
          <maml:para>Specifies one or more existing, user-defined roles. If you omit this parameter, the ACL for every user-defined role will be returned.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Role[]</command:parameterValue>
        <dev:type>
          <maml:name>Role[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>RoleId</maml:name>
        <maml:description>
          <maml:para>Specifies the ID of a given role.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Role</command:parameterValue>
        <dev:type>
          <maml:name>Role</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>RoleName</maml:name>
        <maml:description>
          <maml:para>Specifies the display name of a given role with support for wildcards.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the view group from which to retrieve the ACL(s).</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Role[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Role</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VmsViewGroupAcl</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single -Title "Select a View Group"
$roles = Get-Role | Where-Object RoleType -eq 'UserDefined'
$role = $roles | Out-GridView -OutputMode Single -Title "Select a Role"
 
$acl = $viewGroup | Get-VmsViewGroupAcl -Role $role
$acl
 
&lt;# OUTPUT
Role Path SecurityAttributes
---- ---- ------------------
Remote Guard ViewGroup[2B9E3912-3145-4EE8-8C44-244848D1A1C5] {OPERATE, GENERIC_READ...}</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we prompt for a view group selection, and a role selection. The ACL for role on the specified view group is then displayed.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$acl.SecurityAttributes
 
&lt;# OUTPUT
  Name Value
  ---- -----
  OPERATE False
  GENERIC_READ False
  DELETE False
  GENERIC_WRITE False
#&gt;
 
$acl.SecurityAttributes.GENERIC_READ = 'True'
$acl.SecurityAttributes.OPERATE = 'True'
$acl | Set-VmsViewGroupAcl -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>Continuing from the previous example, the security attributes are expanded so we can read them all. Then, we change the permissions and push the changes back to the Management Server using the `Set-VmsViewGroupAcl` cmdlet.</maml:para>
          <maml:para>The -WhatIf switch parameter is present, so we see what would happen, without making any changes. Remove the -WhatIf switch to make permanent changes, and add the -Verbose switch to see which changes are made.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Import-HardwareCsv</command:name>
      <command:verb>Import</command:verb>
      <command:noun>HardwareCsv</command:noun>
      <maml:description>
        <maml:para>[Deprecated] Adds hardware to a Milestone VMS using a CSV file</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This command is deprecated in favor of Import-VmsHardware.</maml:para>
      <maml:para>Adds hardware to a Milestone VMS using a CSV file. The required columns include</maml:para>
      <maml:para>- RecordingServerName - The display name of the Recording Server where the device should be added</maml:para>
      <maml:para>- HardwareAddress - The address of the device to be added in the format "http://ip.add.re.ss"</maml:para>
      <maml:para>- HardwareName - The desired display name of the new hardware device</maml:para>
      <maml:para>- UserName - The user name on the device - typically 'root' or 'admin'</maml:para>
      <maml:para>- Password - The password for the given UserName on the device</maml:para>
      <maml:para>- GroupPath - Optional.</maml:para>
      <maml:para>Defines the camera group where new cameras will be placed. Default is '/New Cameras' - DriverNumber - Optional. Add-Hardware is much faster when you know the driver to use. Specify the driver number when possible, but if you leave it blank, the Recording Server will try to scan the hardware to discover the driver.</maml:para>
      <maml:para>When importing with the Full parameter, a separate file for each row of the CSV file is expected to be found adjascent to the CSV file with a name like "csvname_guid.json" where csvname is the filename of the CSV file provided in -Path, and guid is an ID matching the ConfigurationId column from the CSV file.</maml:para>
      <maml:para>This command will make an effort to match all settings present in the adjascent JSON files. However, some settings are not available through Configuration API, and advanced settings like secondary streams, or events are not included.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Import-HardwareCsv</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Path to the location of the CSV file from where the hardware information will be imported</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Full</maml:name>
          <maml:description>
            <maml:para>Perform a deep copy of the configuration using the adjascent JSON files generated by the Export-HardwareToCsv command.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Override the Recording Servers designated in the CSV file and add all hardware in the CSV file to this Recording Server instead.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Full</maml:name>
        <maml:description>
          <maml:para>Perform a deep copy of the configuration using the adjascent JSON files generated by the Export-HardwareToCsv command.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Path to the location of the CSV file from where the hardware information will be imported</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Override the Recording Servers designated in the CSV file and add all hardware in the CSV file to this Recording Server instead.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -Server localhost</dev:code>
        <dev:remarks>
          <maml:para>Import-HardwareFromCsv -Path C:\hardware.csv</maml:para>
          <maml:para>Logs into the local Management Server as the current Windows user and imports hardware defined in C:\hardware.csv</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/import-hardwarecsv/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Import-VmsHardware</command:name>
      <command:verb>Import</command:verb>
      <command:noun>VmsHardware</command:noun>
      <maml:description>
        <maml:para>Imports devices from a CSV file and adds them to Milestone XProtect recording servers.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Imports devices from a CSV file and adds them to Milestone XProtect recording servers. There are many supported columns to define enabled devices, names, device groups and more. However there are only three mandatory columns: Address, UserName, and Password. And technically you can even omit UserName and Password to force a scan using the default driver passwords.</maml:para>
      <maml:para>The CSV file is read using Import-Csv, so the order of the columns is not important. However it is required to define the column names in the first row. Like most things in PowerShell, the column names are not case-sensitive. You can also safely add custom columns that you might use for other purposes as long as the column names do not collide with the columns supported by this command.</maml:para>
      <maml:para>There are some columns which accept multiple values using semicolons to delimit values. Because of this, and because there is currently no support for escaping characters in the CSV, the use of semicolons is not allowed as part of a device name. Below you will find a list of all supported columns with descriptions and examples. You can also use the SaveTemplate switch to save a sample CSV file that you can use as a template.</maml:para>
      <maml:para>- Address Address can be provided in IPv4, IPv6, or hostname/fqdn format, and if using HTTPS or a custom port number, address can be provided as a URI like http://192.168.1.100:8080.</maml:para>
      <maml:para>- UserName, Password, Username2, Password2, Username3, Pasword3, UseDefaultCredentials You can provide zero, or up to 3 credentials to try for each camera. If you do not specify any credentials, UseDefaultCredentials defaults to True, even if the parameter is not present.</maml:para>
      <maml:para>- DriverNumber, DriverFamily For the best performance you should provide at least one DriverNumber, and as few additional drivers as possible. The DriverNumber values can be found on the Supported Hardware List at https://www.milestonesys.com/community/business-partner-tools/supported-devices/ listed as the "Hardware id". You can also discover them from existing Recording Servers or Hardware in PowerShell using the Get-HardwareDriver cmdlet.</maml:para>
      <maml:para>The DriverFamily column provides an easy shortcut to select all driver numbers under the group in a similar fashion to the Add Hardware dialog in Management Client. The valid DriverFamily values can be found by running `Get-RecordingServer | Select-Object -First 1 | Get-HardwareDriver | Select-Object -ExpandProperty GroupName -Unique`</maml:para>
      <maml:para>Multiple values for either DriverNumber or DriverFamily can be specified by separating each value with a semicolon (;) symbol.</maml:para>
      <maml:para>- HardwareName Cameras are represented in Milestone with the "physical" hardware as a child of the Recording Server, and then each camera channel, microphone, speaker and other devices attached as children of the hardware. The HardwareName field allows you to provide a meaningful name for the hardware. If this field is left blank, the hardware will retain the default name which looks like "Bosch Dinion IP Starlight 8000 MP (192.168.1.100)" with the make, model and IP.</maml:para>
      <maml:para>Note: If you provide a HardwareName and no names for cameras and other child devices, then all child devices will be named like "HardwareName - DeviceType ChannelNumber". For example, "Bosch Dinion IP Starlight 8000 MP (192.168.1.100) - Camera 1".</maml:para>
      <maml:para>- CameraName, MicrophoneName, SpeakerName, MetadataName, InputName, OutputName If any device names are provided, then the default value will be replaced with the values in the csv. Multiple values can be provided, so you can name all 4 cameras on a 4-channel device by delimiting each value with a semicolon (;) symbol. The first camera, which is considered channel 0, would be named by the first value, and camera 2, which is considered channel 1, would be named by the value after the first semicolon.</maml:para>
      <maml:para>If you wanted to provide a name for Camera 1 and Camera 3, but not other cameras, you would enter the value like "cam1;;cam3". Note that the second value is empty because there is no text between the two semicolons. So the second camera channel would not be renamed.</maml:para>
      <maml:para>- EnabledCameraChannels, EnabledMicrophoneChannels, Enabled*Channels The various Enabled*Channels provide a way for you to decide which channels should be enabled automatically after the Add-VmsHardware process is complete. By default, the hardware, and the first camera channel are enabled while all other devices are disabled. To change the behavior you can specify channel numbers, counting from zero, and delimited by semicolons (;).</maml:para>
      <maml:para>Example: "0;2;3" would enable the first, third, and fourth channels.</maml:para>
      <maml:para>You can also specify "All" and it will be treated as if you specified channels 0-511.</maml:para>
      <maml:para>- CameraGroup, MicrophoneGroup, SpeakerGroup, MetadataGroup, InputGroup, OutputGroup Devices are not placed in a device group by default. To place devices in a group, you must provide at least one group path, and multiple groups can be entered by delimiting values with a semicolon (;) symbol.</maml:para>
      <maml:para>Example: /Indoor Cameras/Second Floor/Stairs</maml:para>
      <maml:para>The camera would be added to a group named "Stairs" which is a child group of "Second Floor" which itself is a child of the root group named "Indoor Cameras". If any group in the path does not exist already, then it will be created.</maml:para>
      <maml:para>Example: /New cameras;/Indoor Cameras/Stairs</maml:para>
      <maml:para>This camera would be added to both a "New cameras" group at the root of the camera group list as well as the "Stairs" subgroup of "Indoor Cameras".</maml:para>
      <maml:para>- RecordingServer While the Import-VmsHardware command accepts a RecordingServer object to specify which server to which the devices should be added, each row of the CSV file can override the default server by specifying an existing Recording Server name. The name should match the display name shown in Management Client for the destination Recording Server, but the value is not case sensitive.</maml:para>
      <maml:para>Only one Recording Server can be specified per row, but you can add the same camera to multiple servers by having more than one row for the same camera.</maml:para>
      <maml:para>- Description The default hardware description is "Added using PowerShell on &lt;datetime&gt;". You can provide your own hardware description, or if you want to avoid setting a description you can put in the special value "blank". You cannot set a description for the camera or other devices using Import-VmsHardware at this time.</maml:para>
      <maml:para>Suggestion: If you want to do some extra configuration after the hardware has been added using Import-VmsHardware, you could put a unique value such as a GUID in the Description column, then match the Hardware objects in the VMS back to the CSV row using this unique value. Since you can add any number of additional custom columns to your CSV, this is a good way to extend this command to do additional custom configuration like changing stream settings.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Import-VmsHardware</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Minimal</maml:name>
          <maml:description>
            <maml:para>Specifies that a minimilist template should be saved. There are a lot of columns you can fill, but only a few are mandatory. Only mandatory columns are included in the template when this is parameter is used, with the exception of the Description column. Descriptions are not required but is included in the minimal template as a way to offer more detail about the values in each row.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the file path to the CSV file to import. If you're not sure what format the CSV should be in, use the SaveTemplate switch to save a template file to the path specified in this parameter.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SaveTemplate</maml:name>
          <maml:description>
            <maml:para>Instead of importing a CSV file, this will save a CSV file to the path specified. The CSV file can be used as a template.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Import-VmsHardware</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the file path to the CSV file to import. If you're not sure what format the CSV should be in, use the SaveTemplate switch to save a template file to the path specified in this parameter.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies the Recording Server instance where cameras should be added. If rows contain a recording server name in the RecordingServer column, the value in the CSV file will override this parameter for that row. Think of this parameter as a "default recording server" which will be used unless a more specific recording server is specified in the CSV file.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Minimal</maml:name>
        <maml:description>
          <maml:para>Specifies that a minimilist template should be saved. There are a lot of columns you can fill, but only a few are mandatory. Only mandatory columns are included in the template when this is parameter is used, with the exception of the Description column. Descriptions are not required but is included in the minimal template as a way to offer more detail about the values in each row.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the file path to the CSV file to import. If you're not sure what format the CSV should be in, use the SaveTemplate switch to save a template file to the path specified in this parameter.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies the Recording Server instance where cameras should be added. If rows contain a recording server name in the RecordingServer column, the value in the CSV file will override this parameter for that row. Think of this parameter as a "default recording server" which will be used unless a more specific recording server is specified in the CSV file.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>SaveTemplate</maml:name>
        <maml:description>
          <maml:para>Instead of importing a CSV file, this will save a CSV file to the path specified. The CSV file can be used as a template.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Import-VmsHardware -Path ~\Desktop\new-hardware.csv</dev:code>
        <dev:remarks>
          <maml:para>Imports all hardware defined in new-hardware.csv. Since the RecordingServer parameter was not specified, the RecordingServer column must be specified for each row in the CSV file.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-RecordingServer -Name Server5 | Import-VmsHardware -Path ~\Desktop\new-hardware.csv</dev:code>
        <dev:remarks>
          <maml:para>Imports all hardware defined in new-hardware.csv. Since the RecordingServer parameter was specified, cameras will be added to Server5. If a row has a RecordingServer value specified in the CSV, then the camera will be added to that recording server instead.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>Import-VmsHardware -Path ~\Desktop\new-hardware-template.csv -SaveTemplate</dev:code>
        <dev:remarks>
          <maml:para>Saves a CSV template to new-hardware-template.csv. The template will provide examples of all supported columns and some information about how the values are entered.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 4 --------------------------</maml:title>
        <dev:code>Import-VmsHardware -Path ~\Desktop\new-hardware-minimal-template.csv -SaveTemplate -Minimal</dev:code>
        <dev:remarks>
          <maml:para>Saves a CSV template to new-hardware-minimal-template.csv. The template will provides the minimal set of columns required to successfully use Import-VmsHardware.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/import-vmshardware/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Import-VmsLicense</command:name>
      <command:verb>Import</command:verb>
      <command:noun>VmsLicense</command:noun>
      <maml:description>
        <maml:para>Imports a Milestone XProtect VMS initial license file or activated license file.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Imports a Milestone XProtect VMS initial license file or activated license file. This function cannot be used to change to a different software license code. For that, you must use Set-VmsLicense instead.</maml:para>
      <maml:para>You will typically use this function in tandem with Export-VmsLicenseRequest. The expected workflow would be:</maml:para>
      <maml:para>1. Export a license request file from the VMS because it doesn't have an internet connection. 2. Take the license request file to an internet-connected PC to perform a manual license activation on My Milestone and download the activated license file. 3. Copy the activated license file to the VMS server or network, and import the activated license file.</maml:para>
      <maml:para>Alternatively, you might need to import a new "Initial license file" in order to enable a new licensed feature before you can perform license activation. In that case you would import the initial license file, export a license request, activate the license request and import the activated license file.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Import-VmsLicense</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to an existing license file on disk. Typically this file has a .LIC extension.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path to an existing license file on disk. Typically this file has a .LIC extension.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Support for license management in Milestone's MIP SDK / Configuration API was introduced in version 2020 R2. If the Management Server version is earlier than 2020 R2, this function will not work.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Import-VmsLicense -Path C:\path\to\license.lic</dev:code>
        <dev:remarks>
          <maml:para>Imports the license file 'license.lic' and if successful, returns updated license information properties.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/import-vmslicense/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Import-VmsViewGroup</command:name>
      <command:verb>Import</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Exports an XProtect Smart Client view group and all contents to a JSON file.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Imports an XProtect Smart Client view group from a JSON file previously generated using the `Export-VmsViewGroup` command. You may import an exported view group on the same Management Server, or a different Management Server than the original view group.</maml:para>
      <maml:para>The selected view group can be a top-level view group, or a child view group. However, if you import a view group which has directly-attached views that are not nested in a child view group, those views will be lost when importing the view group as a top-level view group.</maml:para>
      <maml:para>When a parent ViewGroup is provided in the ParentViewGroup parameter, the imported view group will be inserted as a child of the designated parent.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Import-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to a file where a JSON representation of the view group will be imported. The file should be generated using Export-VmsViewGroup.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>NewName</maml:name>
          <maml:description>
            <maml:para>Specifies an optional new name for the imported view group. If a view group with the same name already exists, the import will not proceed.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>ParentViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies an optional parent view group within which the imported view group should be nested. If omitted, the imported view group will become a new top-level view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>NewName</maml:name>
        <maml:description>
          <maml:para>Specifies an optional new name for the imported view group. If a view group with the same name already exists, the import will not proceed.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>ParentViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies an optional parent view group within which the imported view group should be nested. If omitted, the imported view group will become a new top-level view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path to a file where a JSON representation of the view group will be imported. The file should be generated using Export-VmsViewGroup.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$viewGroup | Export-VmsViewGroup -Path C:\temp\viewgroup.json -Force
Import-VmsViewGroup -Path 'C:\temp\viewgroup.json' -NewName "$($viewGroup.DisplayName) Copy"</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we prompt for a view group selection. The selected view group is then exported to a json file at C:\temp\viewgroup.json. Next, the view group is imported under the same name with "Copy" appended to it.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$viewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$viewGroup | Export-VmsViewGroup -Path C:\temp\viewgroup.json -Force
 
$viewGroup = New-VmsViewGroup -Name "$($viewGroup.DisplayName) Copy" -Force
$dstViewGroup = $viewGroup | New-VmsViewGroup -Name "Child View Group"
$params = @{
    Path = 'C:\temp\viewgroup.json'
    ParentViewGroup = $dstViewGroup
    NewName = 'Example 2'
}
Import-VmsViewGroup @params</dev:code>
        <dev:remarks>
          <maml:para>This example demonstrates that it is possible to export a top-level view group and then import the view group as a nested child view group inside a different parent view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Install-StableFPS</command:name>
      <command:verb>Install</command:verb>
      <command:noun>StableFPS</command:noun>
      <maml:description>
        <maml:para>Install the StableFPS driver on a Recording Server</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The StableFPS driver is used to add any number of virtual cameras simulated from static video files. It includes support for multiple video codecs, audio, metadata, input and output. See the Milestone MIP SDK documentation for more information.</maml:para>
      <maml:para>This command must be run with elevated permissions due to the fact it must add/modify files in the Device Pack installation path which is typically placed in the protected C:\Program Files (x86)\ path. It also must stop and start the Recording Server service in order for the new driver to be made available.</maml:para>
      <maml:para>If you re-install the StableFPS driver with different parameters, or if you add new video/audio to the %DevicePackPath%\StableFPS_DATA folder, you will need to perform "Replace Hardware" on each StableFPS hardware device you require to use the new settings/media.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Install-StableFPS</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Source</maml:name>
          <maml:description>
            <maml:para>The path to the StableFPS folder included with the MIP SDK installation. The default path is "C:\Program Files\Milestone\MIPSDK\Tools\StableFPS". To execute this command on a system without MIP SDK installed, make sure to copy the StableFPS folder to a path available to the target system. If you specify "-Path C:\StableFPS" then this command expects to find the folders C:\StableFPS\StableFPS_DATA and C:\StableFPS\vLatest</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>C:\Program Files\Milestone\MIPSDK\Tools\StableFPS</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Cameras</maml:name>
          <maml:description>
            <maml:para>Each StableFPS hardware device can have between 1 and 200 camera channels associated with it. The default value is 32.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>32</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Streams</maml:name>
          <maml:description>
            <maml:para>Each camera channel can provide up to 5 streams. By default, each channel will provide only one stream.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>1</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>DevicePackPath</maml:name>
          <maml:description>
            <maml:para>By default the DevicePackPath will be determined from the Get-RecorderConfig cmdlet which assumes the StableFPS driver is intended to be installed on the local machine which is also a Recording Server. In some cases you may wish to install the StableFPS driver to a remote machine. If this property is provided, then the driver will be deployed to the path without attempting to restart any Recording Server service or validating the presence of a Recording Server installation. It will then be your responsibility to restart the remote Recording Server to make the new driver available.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Cameras</maml:name>
        <maml:description>
          <maml:para>Each StableFPS hardware device can have between 1 and 200 camera channels associated with it. The default value is 32.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>32</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>DevicePackPath</maml:name>
        <maml:description>
          <maml:para>By default the DevicePackPath will be determined from the Get-RecorderConfig cmdlet which assumes the StableFPS driver is intended to be installed on the local machine which is also a Recording Server. In some cases you may wish to install the StableFPS driver to a remote machine. If this property is provided, then the driver will be deployed to the path without attempting to restart any Recording Server service or validating the presence of a Recording Server installation. It will then be your responsibility to restart the remote Recording Server to make the new driver available.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Source</maml:name>
        <maml:description>
          <maml:para>The path to the StableFPS folder included with the MIP SDK installation. The default path is "C:\Program Files\Milestone\MIPSDK\Tools\StableFPS". To execute this command on a system without MIP SDK installed, make sure to copy the StableFPS folder to a path available to the target system. If you specify "-Path C:\StableFPS" then this command expects to find the folders C:\StableFPS\StableFPS_DATA and C:\StableFPS\vLatest</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>C:\Program Files\Milestone\MIPSDK\Tools\StableFPS</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Streams</maml:name>
        <maml:description>
          <maml:para>Each camera channel can provide up to 5 streams. By default, each channel will provide only one stream.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>1</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Install-StableFPS -Source C:\StableFPS -Cameras 4 -Streams 2</dev:code>
        <dev:remarks>
          <maml:para>Installs the StableFPS driver from the source already present at C:\StableFPS. Each StableFPS device added to the Recording Server will have 4 camera channels, each with the option of up to 2 streams.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/install-stablefps/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Invoke-LicenseActivation</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>LicenseActivation</command:noun>
      <maml:description>
        <maml:para>{{ Fill in the Synopsis }}</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>{{ Fill in the Description }}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-LicenseActivation</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Credential</maml:name>
          <maml:description>
            <maml:para>{{ Fill Credential Description }}</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
          <dev:type>
            <maml:name>PSCredential</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EnableAutomaticActivation</maml:name>
          <maml:description>
            <maml:para>{{ Fill EnableAutomaticActivation Description }}</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Passthru</maml:name>
          <maml:description>
            <maml:para>{{ Fill Passthru Description }}</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Credential</maml:name>
        <maml:description>
          <maml:para>{{ Fill Credential Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
        <dev:type>
          <maml:name>PSCredential</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EnableAutomaticActivation</maml:name>
        <maml:description>
          <maml:para>{{ Fill EnableAutomaticActivation Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Passthru</maml:name>
        <maml:description>
          <maml:para>{{ Fill Passthru Description }}</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>{{ Add example code here }}</dev:code>
        <dev:remarks>
          <maml:para>{{ Add example description here }}</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/invoke-licenseactivation/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Invoke-ServerConfigurator</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>ServerConfigurator</command:noun>
      <maml:description>
        <maml:para>Invokes the Milestone Server Configurator utility using command-line arguments</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Server Configurator is the utility responsible for managing the registration of Management Servers, Recording Servers and Data Collectors as well as the configuration of certificates for Management/Recorder communication, Client/Recorder communication and Mobile Server/Web Client/Mobile communication.</maml:para>
      <maml:para>In the 2020 R3 release, command-line parameters were introduced for the Server Configurator making it possible to automate registration and certificate configuration processes. Since PowerShell offers a more rich environment for discovering parameters and valid values as well as more useful object-based output, this cmdlet was written to wrap the utility with a PowerShell-friendly interface.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-ServerConfigurator</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AuthAddress</maml:name>
          <maml:description>
            <maml:para>Specifies the address of the Authorization Server which is usually the Management Server address. A [uri] value is expected, but only the URI host value will be used. The scheme and port will be inferred based on whether encryption is enabled/disabled and is fixed to port 80/443 as this is how Server Configurator is currently designed.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Uri</command:parameterValue>
          <dev:type>
            <maml:name>Uri</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the standard output from the Server Configurator utility should be written after the operation is completed. The output will include the following properties: - StandardOutput</maml:para>
            <maml:para>- StandardError</maml:para>
            <maml:para>- ExitCode</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Server Configurator utility. Omit this path and the path will be discovered using Get-RecorderConfig or Get-ManagementServerConfig by locating the installation path of the Management Server or Recording Server and assuming the Server Configurator is located in the same path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Register</maml:name>
          <maml:description>
            <maml:para>Register all local components with the optionally specified AuthAddress. If no AuthAddress is provided, the last-known address will be used.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Invoke-ServerConfigurator</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>CertificateGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the CertificateGroup [guid] identifying which component for which encryption should be enabled or disabled</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EnableEncryption</maml:name>
          <maml:description>
            <maml:para>Enable encryption for the CertificateGroup specified</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the standard output from the Server Configurator utility should be written after the operation is completed. The output will include the following properties: - StandardOutput</maml:para>
            <maml:para>- StandardError</maml:para>
            <maml:para>- ExitCode</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Server Configurator utility. Omit this path and the path will be discovered using Get-RecorderConfig or Get-ManagementServerConfig by locating the installation path of the Management Server or Recording Server and assuming the Server Configurator is located in the same path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Thumbprint</maml:name>
          <maml:description>
            <maml:para>Specifies the thumbprint of the certificate to be used to encrypt communications with the component designated by the CertificateGroup id.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Invoke-ServerConfigurator</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>CertificateGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the CertificateGroup [guid] identifying which component for which encryption should be enabled or disabled</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
          <dev:type>
            <maml:name>Guid</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DisableEncryption</maml:name>
          <maml:description>
            <maml:para>Disable encryption for the CertificateGroup specified</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the standard output from the Server Configurator utility should be written after the operation is completed. The output will include the following properties: - StandardOutput</maml:para>
            <maml:para>- StandardError</maml:para>
            <maml:para>- ExitCode</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Server Configurator utility. Omit this path and the path will be discovered using Get-RecorderConfig or Get-ManagementServerConfig by locating the installation path of the Management Server or Recording Server and assuming the Server Configurator is located in the same path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Invoke-ServerConfigurator</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ListCertificateGroups</maml:name>
          <maml:description>
            <maml:para>List the available certificate groups on the local machine. Output will be a [hashtable] where the keys are the certificate group names (which may contain spaces) and the values are the associated [guid] id's.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Server Configurator utility. Omit this path and the path will be discovered using Get-RecorderConfig or Get-ManagementServerConfig by locating the installation path of the Management Server or Recording Server and assuming the Server Configurator is located in the same path.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AuthAddress</maml:name>
        <maml:description>
          <maml:para>Specifies the address of the Authorization Server which is usually the Management Server address. A [uri] value is expected, but only the URI host value will be used. The scheme and port will be inferred based on whether encryption is enabled/disabled and is fixed to port 80/443 as this is how Server Configurator is currently designed.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Uri</command:parameterValue>
        <dev:type>
          <maml:name>Uri</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>CertificateGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the CertificateGroup [guid] identifying which component for which encryption should be enabled or disabled</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid</command:parameterValue>
        <dev:type>
          <maml:name>Guid</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DisableEncryption</maml:name>
        <maml:description>
          <maml:para>Disable encryption for the CertificateGroup specified</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EnableEncryption</maml:name>
        <maml:description>
          <maml:para>Enable encryption for the CertificateGroup specified</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ListCertificateGroups</maml:name>
        <maml:description>
          <maml:para>List the available certificate groups on the local machine. Output will be a [hashtable] where the keys are the certificate group names (which may contain spaces) and the values are the associated [guid] id's.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the standard output from the Server Configurator utility should be written after the operation is completed. The output will include the following properties: - StandardOutput</maml:para>
          <maml:para>- StandardError</maml:para>
          <maml:para>- ExitCode</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path to the Server Configurator utility. Omit this path and the path will be discovered using Get-RecorderConfig or Get-ManagementServerConfig by locating the installation path of the Management Server or Recording Server and assuming the Server Configurator is located in the same path.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Register</maml:name>
        <maml:description>
          <maml:para>Register all local components with the optionally specified AuthAddress. If no AuthAddress is provided, the last-known address will be used.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Thumbprint</maml:name>
        <maml:description>
          <maml:para>Specifies the thumbprint of the certificate to be used to encrypt communications with the component designated by the CertificateGroup id.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Invoke-ServerConfigurator -ListCertificateGroups</dev:code>
        <dev:remarks>
          <maml:para>Lists the available Certificate Groups such as 'Server certificate', 'Streaming media certificate' and 'Mobile streaming media certificate', and their ID's.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Invoke-ServerConfigurator -Register -AuthAddress http://MGMT -PassThru</dev:code>
        <dev:remarks>
          <maml:para>Registers all local Milestone components with the authorization server at http://MGMT and outputs a [pscustomobject] with the exit code, and standard output/error from the invocation of the Server Configurator executable.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/invoke-serverconfigurator/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Invoke-VmsLicenseActivation</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>VmsLicenseActivation</command:noun>
      <maml:description>
        <maml:para>Perform an online license activation using My Milestone credentials.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Perform an online license activation using My Milestone credentials. Requires that the Management Server have an internet connection and access to the Milestone Systems license activation service on HTTPS port 443.</maml:para>
      <maml:para>The credentials used for license activation must match a valid My Milestone user with at least License User privelege and the software license code must already be registered to the company account.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-VmsLicenseActivation</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Credential</maml:name>
          <maml:description>
            <maml:para>Specifies a My Milestone username and password. The username is usually your e-mail address.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
          <dev:type>
            <maml:name>PSCredential</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>EnableAutoActivation</maml:name>
          <maml:description>
            <maml:para>Specifies that any system changes requiring license activation should trigger an automatic license activation using these credentials in the future. If omitted, automatic license activation will be disabled if it is currently enabled.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Credential</maml:name>
        <maml:description>
          <maml:para>Specifies a My Milestone username and password. The username is usually your e-mail address.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">PSCredential</command:parameterValue>
        <dev:type>
          <maml:name>PSCredential</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>EnableAutoActivation</maml:name>
        <maml:description>
          <maml:para>Specifies that any system changes requiring license activation should trigger an automatic license activation using these credentials in the future. If omitted, automatic license activation will be disabled if it is currently enabled.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Support for license management in Milestone's MIP SDK / Configuration API was introduced in version 2020 R2. If the Management Server version is earlier than 2020 R2, this function will not work.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Invoke-VmsLicenseActivation -Credential (Get-Credential)</dev:code>
        <dev:remarks>
          <maml:para>Performs an online license activation and does not enable automatic license activation.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/invoke-vmslicenseactivation/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>New-VmsView</command:name>
      <command:verb>New</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Creates a new view as a child item of the specified XProtect Smart Client view group.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Creates a new XProtect Smart Client view in the specified view group and places cameras into the view if one or more camera objects are provided.</maml:para>
      <maml:para>Views have a complex layout defined in XML, and this command offers advanced users an easy way to create new views with their own custom layout and view item definitions. However, the command also enables simple view creation without the need to construct or manipulate XML data.</maml:para>
      <maml:para>The default parameter set will accept a collection of cameras, and automatically build a view with enough columns and rows. The simple layout generation has simple logic where the number of columns and rows will always be equal.</maml:para>
      <maml:para>If you pass in four cameras, you will receive a 2x2 view layout and all view items will receive a camera. And if you pass in 5 cameras, a 3x3 view layout will be created, and only the first 5 view items will receive a camera, leaving four empty view items.</maml:para>
      <maml:para>The custom parameter set will let you specify the cameras, and a number of columns and rows. The layout will then be generated for you and all cameras will be placed in the view if there are enough view items. If you pass in 10 cameras but specify only a 3x2 view layout, then the first 6 cameras will fill the view and the last four will be discarded with a warning.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the new view. Names must be unique within a specific view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Cameras</maml:name>
          <maml:description>
            <maml:para>Specifies one or more cameras to place into the view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Columns</maml:name>
          <maml:description>
            <maml:para>Specifies the number of columns the view should have. Think of columns and rows like a spreadsheet where each cell can contain a view item like a camera, map, or other type of view item.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Rows</maml:name>
          <maml:description>
            <maml:para>Specifies the number of rows the view should have. Think of columns and rows like a spreadsheet where each cell can contain a view item like a camera, map, or other type of view item.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the parent view group within which the new view will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>New-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the new view. Names must be unique within a specific view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Cameras</maml:name>
          <maml:description>
            <maml:para>Specifies one or more cameras to place into the view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>LayoutDefinitionXml</maml:name>
          <maml:description>
            <maml:para>Specifies the XML definition for the view layout. This is only needed if automating the creation of views with complex view layouts that cannot be accomplished by defining row and column counts. It is recommended to manually create a view in XProtect Smart Client, and then inspect the LayoutDefinitionXml for that view to see what format and information is required.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the parent view group within which the new view will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ViewItemDefinitionXml</maml:name>
          <maml:description>
            <maml:para>Specifies the XML definition for each view item in the view. This is only needed if automating the creation of views that have non-camera elements in them. It is recommended to manually create a view in XProtect Smart Client, and then inspect the ViewItemDefinitionXml for that view to see what format and information is required.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>New-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the new view. Names must be unique within a specific view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Cameras</maml:name>
          <maml:description>
            <maml:para>Specifies one or more cameras to place into the view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>StreamName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the camera stream to use for live viewing by default. If no matching stream can be found for a given camera, the default live stream will be used.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies the parent view group within which the new view will be created.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Cameras</maml:name>
        <maml:description>
          <maml:para>Specifies one or more cameras to place into the view.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
        <dev:type>
          <maml:name>Camera[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Columns</maml:name>
        <maml:description>
          <maml:para>Specifies the number of columns the view should have. Think of columns and rows like a spreadsheet where each cell can contain a view item like a camera, map, or other type of view item.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>LayoutDefinitionXml</maml:name>
        <maml:description>
          <maml:para>Specifies the XML definition for the view layout. This is only needed if automating the creation of views with complex view layouts that cannot be accomplished by defining row and column counts. It is recommended to manually create a view in XProtect Smart Client, and then inspect the LayoutDefinitionXml for that view to see what format and information is required.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the new view. Names must be unique within a specific view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Rows</maml:name>
        <maml:description>
          <maml:para>Specifies the number of rows the view should have. Think of columns and rows like a spreadsheet where each cell can contain a view item like a camera, map, or other type of view item.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>StreamName</maml:name>
        <maml:description>
          <maml:para>Specifies the display name of the camera stream to use for live viewing by default. If no matching stream can be found for a given camera, the default live stream will be used.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies the parent view group within which the new view will be created.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ViewItemDefinitionXml</maml:name>
        <maml:description>
          <maml:para>Specifies the XML definition for each view item in the view. This is only needed if automating the creation of views that have non-camera elements in them. It is recommended to manually create a view in XProtect Smart Client, and then inspect the ViewItemDefinitionXml for that view to see what format and information is required.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$topViewGroup = Get-VmsViewGroup | Out-GridView -OutputMode Single
$newViewGroup = $topViewGroup | New-VmsViewGroup -Name 'New-VmsView Test'
$cameras = Select-Camera -AllowFolders
$newView = $newViewGroup | New-VmsView -Name 'Example 1' -Camera $cameras
$newView
 
&lt;# OUTPUT
  DisplayName ViewSize Shortcut Id LastModified
  ----------- -------- -------- -- ------------
  Example 1 25 184AB678-C9DC-4149-B925-... 2/18/2022 3:53:34 PM
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we prompt for a view group selection, and then create a child group in the selected view group named "New-VmsView Test".</maml:para>
          <maml:para>Then, we prompt for a selection of cameras to place in the view. Inside the new view group, we create a new view named "Example 1" large enough for all cameras and place the selected cameras into the view.</maml:para>
          <maml:para>The new view object is then displayed in the terminal. There are more properties available on the view object than are displayed by default - these are only the most interesting and display-friendly properties.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>function BuildViewsFromCameraGroups {
    param(
        [VideoOS.Platform.ConfigurationItems.ViewGroup]$StartingGroup,
        [VideoOS.Platform.ConfigurationItems.CameraGroup[]]$CameraGroups,
        [int]$MaxViewSize = 4
    )
 
    Clear-VmsCache
    $ms = Get-VmsManagementServer
 
    $stack = [system.collections.generic.stack[hashtable]]::new()
    if ($null -eq $CameraGroups) {
        $CameraGroups = $ms.CameraGroupFolder.CameraGroups
    }
    foreach ($group in $CameraGroups) {
        $stack.Push(
            @{
                ParentViewGroup = $StartingGroup
                CameraGroup = $group
            }
        )
    }
 
    while ($stack.Count -gt 0) {
        $entry = $stack.Pop()
        $vgParams = @{
            Name = $entry.CameraGroup.Name
            Parent = $entry.ParentViewGroup
            Force = $true
        }
        $viewGroup = New-VmsViewGroup @vgParams
 
        if ($entry.CameraGroup.CameraFolder.Cameras.Count -gt 0) {
            for ($i = 0; $i -lt $entry.CameraGroup.CameraFolder.Cameras.Count; $i += $MaxViewSize) {
                $start = $i
                $end = [math]::min($i + $MaxViewSize, $entry.CameraGroup.CameraFolder.Cameras.Count) - 1
                $viewName = if ($start -eq 0 -and $end -eq $entry.CameraGroup.CameraFolder.Cameras.Count - 1) {
                    $viewGroup.DisplayName
                } else {
                    '{0} {1}' -f $viewGroup.DisplayName, (($i / $MaxViewSize) + 1)
                }
                $null = $viewGroup | New-VmsView -Name $viewName -Camera $entry.CameraGroup.CameraFolder.Cameras[$start..$end]
            }
        }
 
        foreach ($childGroup in $entry.CameraGroup.CameraGroupFolder.CameraGroups) {
            $stack.Push(
                @{
                    ParentViewGroup = $viewGroup
                    CameraGroup = $childGroup
                }
            )
        }
    }
}
 
Connect-ManagementServer -ShowDialog -AcceptEula -Force
$cameraGroups = Select-VideoOSItem -AllowFolders -HideServerTab -Kind ([VideoOS.Platform.Kind]::Camera) | Foreach-Object {
    try {
        $item = $_
        [VideoOS.Platform.ConfigurationItems.CameraGroup]::new($_.FQID.ServerId, "CameraGroup[$($item.FQID.ObjectId)]")
    } catch {
        Write-Error "Camera Group '$($item.Name)' not found."
    }
}
$viewGroupName = Read-Host -Prompt "New view group name"
$viewgroup = New-VmsViewGroup -Name $viewGroupName -Force
BuildViewsFromCameraGroups -StartingGroup $viewgroup -CameraGroups $cameraGroups -MaxViewSize 9</dev:code>
        <dev:remarks>
          <maml:para>This example prompts the user to login to the Management Server, and then select one or more camera groups. After receiving a new view group name from a prompt at the terminal, those camera groups are used as templates to generate view groups and views in a new top-level view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>New-VmsViewGroup</command:name>
      <command:verb>New</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Creates a new top-level or child view group for XProtect Smart Client.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>There are two types of view groups - top-level view groups which are usually created or removed in Management Client, and can have permissions applied on a per-role level, and cannot directly contain view child items, and child view groups which can be nested within a top-level view group, and may contain views, and share the permissions of the top-level view group above it.</maml:para>
      <maml:para>This command can be used to create any type of view group - the Milestone SDK does not differentiate between the two, except that you cannot add views directly to a top-level view group, and you cannot change permissions on a child view group.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the new view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies the view group description which is only displayed in Management Client for top-level view groups.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the view group should be created, and if it already exists, the existing view group should be returned without error.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Parent</maml:name>
          <maml:description>
            <maml:para>Specifies the parent view group. This parameter is required when creating a nested or "child" view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies the view group description which is only displayed in Management Client for top-level view groups.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Specifies that the view group should be created, and if it already exists, the existing view group should be returned without error.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the new view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Parent</maml:name>
        <maml:description>
          <maml:para>Specifies the parent view group. This parameter is required when creating a nested or "child" view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$parentViewGroup = New-VmsViewGroup -Name 'New-VmsViewGroup Test' -Force
$subgroup1 = $parentViewGroup | New-VmsViewGroup -Name 'SubGroup 1' -Force
$subgroup2 = New-VmsViewGroup -Name 'SubGroup 2' -Parent $subgroup1 -Force</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, three nested groups are created with the top-level view group 'New-VmsViewGroup Test' having a child view group named "SubGroup 1" and the child view group having it's own child view group named "SubGroup 2".</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-Hardware</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>Hardware</command:noun>
      <maml:description>
        <maml:para>Removes a Milestone XProtect VMS hardware device and all child devices.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Removes a Milestone XProtect VMS hardware device and all child devices. Any video, audio, and metadata associated with the device will be immediately, and irreverisbly deleted.</maml:para>
      <maml:para>This command supports -WhatIf, and has a ConfirmImpact rating of "High". When running commands interactively, it's a good idea to take advantage of the -WhatIf parameter switch to see what would happen if you really ran the command.</maml:para>
      <maml:para>If you do not want to confirm the operation, you can add -Confirm:$false to your command to disable confirmation.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-Hardware</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Hardware</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Hardware objects to be removed from the VMS. Use Get-Hardware to retrieve the devices you want to delete.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
          <dev:type>
            <maml:name>Hardware[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Hardware</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Hardware objects to be removed from the VMS. Use Get-Hardware to retrieve the devices you want to delete.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hardware[]</command:parameterValue>
        <dev:type>
          <maml:name>Hardware[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>linenums="1"
Connect-ManagementServer -ShowDialog -Force -AcceptEula
Get-Hardware | Out-GridView -OutputMode Single | Remove-Hardware -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>1. Show a Milestone XProtect login dialog, disconnect from any existing session if present, and accept the end-user license agreement for MIP SDK. 2. Present a list of all hardware on the VMS from which one entry can be selected. The selected hardware will be passed to Remove-Hardware. 3. Thanks to the `-WhatIf` switch parameter, the hardware will not be removed. Instead, the operation will be logged to the terminal to show you what would have happened.</maml:para>
          <maml:para>Note: To actually remove hardware, remove the -WhatIf switch. And if you expect to do this a lot, such as on a test system, you can add `-Confirm:$false` to disable confirmation.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/remove-hardware/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-MobileServerCertificate</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>MobileServerCertificate</command:noun>
      <maml:description>
        <maml:para>DEPRECATED - Use Set-XProtectCertificate</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Removes the current sslcert binding for Milestone XProtect Mobile Server. The current binding is found by calling Get-MobileServerInfo, and if the CertHash value is -ne $null we call netsh http delete sslcert ipport=$HttpsIp:$HttpsPort.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-MobileServerCertificate</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Remove-MobileServerCertificate</dev:code>
        <dev:remarks>
          <maml:para>Removes the Mobile Server certificate if preset and bound to the service.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/remove-mobileservercertificate/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-VmsArchiveStorage</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>VmsArchiveStorage</command:noun>
      <maml:description>
        <maml:para>Removes a Milestone XProtect recording server archive storage configuration</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>If the specified archive is the the last one in the archive chain (it has the largest RetainMinutes value), this function removes the archive from the storage configuration.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-VmsArchiveStorage</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>ArchiveStorage</maml:name>
          <maml:description>
            <maml:para>Specifies the ArchiveStorage object to be removed</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ArchiveStorage</command:parameterValue>
          <dev:type>
            <maml:name>ArchiveStorage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Remove-VmsArchiveStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the existing archive storage configuration to look for on the specified storage configuration</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Storage</maml:name>
          <maml:description>
            <maml:para>Specifies the Storage object from which to look for matching archive storage configurations</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
          <dev:type>
            <maml:name>Storage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>ArchiveStorage</maml:name>
        <maml:description>
          <maml:para>Specifies the ArchiveStorage object to be removed</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ArchiveStorage</command:parameterValue>
        <dev:type>
          <maml:name>ArchiveStorage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the existing archive storage configuration to look for on the specified storage configuration</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Storage</maml:name>
        <maml:description>
          <maml:para>Specifies the Storage object from which to look for matching archive storage configurations</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
        <dev:type>
          <maml:name>Storage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer | Get-VmsStorage -Name 'Example Storage' | Remove-VmsArchiveStorage -Name 'Retired NAS Storage'</dev:code>
        <dev:remarks>
          <maml:para>Removes all archive storages named 'Retired NAS Storage' from all storage configurations named 'Example Storage' on all recording servers</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/remove-vmsarchivestorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-VmsFailoverGroup</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>VmsFailoverGroup</command:noun>
      <maml:description>
        <maml:para>Removes an existing failover group from the current Milestone XProtect VMS site.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The `Remove-VmsFailoverGroup` cmdlet removes an existing failover group, which can each contain one or more failover recording servers.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-VmsFailoverGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>FailoverGroup</maml:name>
          <maml:description>
            <maml:para>Specifies a FailoverGroup object returned by the `Get-VmsFailoverGroup` cmdlet.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">FailoverGroup</command:parameterValue>
          <dev:type>
            <maml:name>FailoverGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>FailoverGroup</maml:name>
        <maml:description>
          <maml:para>Specifies a FailoverGroup object returned by the `Get-VmsFailoverGroup` cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">FailoverGroup</command:parameterValue>
        <dev:type>
          <maml:name>FailoverGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.FailoverGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
 
Get-VmsFailoverGroup | Select-Object -First 1 | Remove-VmsFailoverGroup -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>Prompts user to login to a Milestone VMS, then attempts to remove the first failover group returned by `Get-VmsFailoverGroup` but does not actually remove the failover group thanks to the `-WhatIf` switch.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/remove-vmsfailovergroup/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-VmsStorage</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>VmsStorage</command:noun>
      <maml:description>
        <maml:para>Removes a Milestone XProtect recording server storage configuration and all of the child archive storages if present</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>If the specified storage is not marked as the default storage, and there are no devices configured to record to the storage, this function removes the storage configuration including any and all archive storages attached to the live drive represented by the storage configuration.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-VmsStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies the name of the existing storage configuration to look for on the specified recording server</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies the RecordingServer object from which to look for matching storage configurations</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Remove-VmsStorage</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Storage</maml:name>
          <maml:description>
            <maml:para>Specifies the Storage object to be removed</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
          <dev:type>
            <maml:name>Storage</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies the name of the existing storage configuration to look for on the specified recording server</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies the RecordingServer object from which to look for matching storage configurations</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Storage</maml:name>
        <maml:description>
          <maml:para>Specifies the Storage object to be removed</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Storage</command:parameterValue>
        <dev:type>
          <maml:name>Storage</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer | Remove-VmsStorage -Name 'Old Storage Config'</dev:code>
        <dev:remarks>
          <maml:para>Removes the storage configuration named 'Old Storage Config' from all recording servers</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/remove-vmsstorage/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-VmsView</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Removes one or more XProtect Smart Client views.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Views are typically used in XProtect Smart Client and can contain one or more camera view items or other types of view items like maps, alarm lists, and images and browsers.</maml:para>
      <maml:para>This cmdlet allows you to permanently delete one or more views.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>View</maml:name>
          <maml:description>
            <maml:para>Specifies one or more views to be deleted. Views are easily selected using Get-VmsView.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
          <dev:type>
            <maml:name>View[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>View</maml:name>
        <maml:description>
          <maml:para>Specifies one or more views to be deleted. Views are easily selected using Get-VmsView.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">View[]</command:parameterValue>
        <dev:type>
          <maml:name>View[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-VmsView | Out-GridView -OutputMode Single | Remove-VmsView -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of all views in all view groups, present a grid view dialog where one view may be selected, and this view is passed to `Remove-VmsView` with the -WhatIf switch to ensure that no views are actually deleted.</maml:para>
          <maml:para>To delete a view, you can omit the -WhatIf switch parameter. Add the -Verbose switch to see detailed messages for each deleted view.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Remove-VmsViewGroup</command:name>
      <command:verb>Remove</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Removes one or more XProtect Smart Client view groups.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Views groups are typically used in XProtect Smart Client and can contain one or more views with camera view items or other types of view items like maps, alarm lists, and images and browsers.</maml:para>
      <maml:para>This cmdlet allows you to permanently delete one or more views group containers.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Remove-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>Specifies one or more view groups to be permanently removed.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Recurse</maml:name>
          <maml:description>
            <maml:para>Specifies that all child members, including views and view groups, should be recursively removed.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Recurse</maml:name>
        <maml:description>
          <maml:para>Specifies that all child members, including views and view groups, should be recursively removed.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>Specifies one or more view groups to be permanently removed.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup[]</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>On Milestone versions older than 2022 R2, the -Recurse switch does not work. You must delete all child views and view groups before you can delete the parent view group.</maml:para>
        <maml:para>This is an issue with the configuration api service on the Management Server.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = Get-VmsViewGroup -Recurse | Out-GridView -OutputMode Single
$viewGroup | Remove-VmsViewGroup -Recurse -WhatIf</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a list of all view groups, present a grid view dialog where one view group may be selected, and this view group is passed to `Remove-VmsViewGroup` with the -WhatIf switch to ensure that no view groups are actually deleted.</maml:para>
          <maml:para>To delete a view group, you can omit the -WhatIf switch parameter. Add the -Verbose switch to see detailed messages for each deleted view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Resize-Image</command:name>
      <command:verb>Resize</command:verb>
      <command:noun>Image</command:noun>
      <maml:description>
        <maml:para>Resizes a [System.Drawing.Image] object to the given height with the same aspect ratio.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Resizes a [System.Drawing.Image] object to the given height with the same aspect ratio and outputs a new Image object which uses the same codec as the original image unless otherwise specified.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Resize-Image</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Image</maml:name>
          <maml:description>
            <maml:para>Specifies the Image object to be resized</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Image</command:parameterValue>
          <dev:type>
            <maml:name>Image</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Height</maml:name>
          <maml:description>
            <maml:para>Specifies the new desired height for the resulting resized image</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>0</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Quality</maml:name>
          <maml:description>
            <maml:para>Specifies the desired image quality of the resulting resized image</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int64</command:parameterValue>
          <dev:type>
            <maml:name>Int64</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>95</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>OutputFormat</maml:name>
          <maml:description>
            <maml:para>Specifies the desired output format such as 'BMP', 'JPEG', 'GIF', 'TIFF', 'PNG'</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">BMP</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">JPEG</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">GIF</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TIFF</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">PNG</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DisposeSource</maml:name>
          <maml:description>
            <maml:para>Specifies that the original image object should be disposed.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DisposeSource</maml:name>
        <maml:description>
          <maml:para>Specifies that the original image object should be disposed.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Height</maml:name>
        <maml:description>
          <maml:para>Specifies the new desired height for the resulting resized image</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>0</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Image</maml:name>
        <maml:description>
          <maml:para>Specifies the Image object to be resized</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Image</command:parameterValue>
        <dev:type>
          <maml:name>Image</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>OutputFormat</maml:name>
        <maml:description>
          <maml:para>Specifies the desired output format such as 'BMP', 'JPEG', 'GIF', 'TIFF', 'PNG'</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Quality</maml:name>
        <maml:description>
          <maml:para>Specifies the desired image quality of the resulting resized image</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int64</command:parameterValue>
        <dev:type>
          <maml:name>Int64</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>95</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>[System.Drawing.Image]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>[System.Drawing.Image]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Don't forget to call Dispose() when you're done with the image!</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>$image = $camera | Get-Snapshot -Live | ConvertFrom-Snapshot | Resize-Image -Height 200 -DisposeSource</dev:code>
        <dev:remarks>
          <maml:para>Get's a live snapshot from $camera and converts it to a System.Drawing.Image object, resizes it to 200 pixels tall and disposes the original image.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/resize-image/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Resolve-VmsDeviceGroupPath</command:name>
      <command:verb>Resolve</command:verb>
      <command:noun>VmsDeviceGroupPath</command:noun>
      <maml:description>
        <maml:para>Returns a string representing the device group path in a way MilestonePSTools understands.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The -DeviceGroup commands accept device groups in a unix file path format like "/first level/second level/third level" where each name separated by a slash is a child group of the group preceeding it.</maml:para>
      <maml:para>The Get-DeviceGroup command returns an object representing a single device group and it is not immediately obvious what the hierarchy of the group is when inspecting the single group object. To remedy this, Resolve-VmsDeviceGroupPath will recursively look at the ParentPath property of the group and enumerate upward through the hierarchy until reaching the root of the device group tree. The names of all the parent groups along the path will be returned along with the name of the group.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Resolve-VmsDeviceGroupPath</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>DeviceGroup</maml:name>
          <maml:description>
            <maml:para>Specifies a device group object returned by commands like Get-DeviceGroup.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">IConfigurationItem</command:parameterValue>
          <dev:type>
            <maml:name>IConfigurationItem</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>DeviceGroup</maml:name>
        <maml:description>
          <maml:para>Specifies a device group object returned by commands like Get-DeviceGroup.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">IConfigurationItem</command:parameterValue>
        <dev:type>
          <maml:name>IConfigurationItem</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-DeviceGroup -DeviceCategory camera -Path / -Recurse | Resolve-DeviceGroupPath</dev:code>
        <dev:remarks>
          <maml:para>Returns all camera device group paths, recursively, as strings.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/resolve-vmsdevicegrouppath/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Select-Camera</command:name>
      <command:verb>Select</command:verb>
      <command:noun>Camera</command:noun>
      <maml:description>
        <maml:para>Offers a UI dialog for selecting items, similar to the item selection interface in Management Client.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet implements the VideoOS.Platform.UI.ItemPickerUserControl in a custom form to allow the user to select one or more items of any kind using a friendly and customizable user interface.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Select-Camera</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Title</maml:name>
          <maml:description>
            <maml:para>Specifies the text in the title-bar of the Item Picker window. The default is "Select Camera(s)".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Select Camera(s)</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AllowFolders</maml:name>
          <maml:description>
            <maml:para>Device groups are considered folders and are not selectable by default. To allow for selecting many items with one click, include this parameter. Consider using this with the FlattenOutput switch unless you specifically need to select a folder item instead of it's child items.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AllowServers</maml:name>
          <maml:description>
            <maml:para>Supply this switch to enable selection of servers. You might choose to do this if you want to select Recording Servers, or you want to select all child items, such as cameras, from a server. Consider using this with the FlattenOutput switch unless you specifically need to select a server item instead of it's child items.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>OutputAsItem</maml:name>
          <maml:description>
            <maml:para>Output cameras as VideoOS.Platform.Item objects instead of converting them to Configuration API Camera objects. Depending on your needs, it may be more performant to use OutputAsItem. For example, if you are using a cmdlet like Get-Snapshot, you can extract the $item.FQID.ObjectId and provide that Guid in the CameraId parameter to avoid an unnecessary conversion between Item, ConfigurationItem, and back again.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RemoveDuplicates</maml:name>
          <maml:description>
            <maml:para>Automatically remove duplicate cameras from the output before outputing them. Useful when you select a folder which may have the same cameras in more than one child folder.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SingleSelect</maml:name>
          <maml:description>
            <maml:para>The ItemPicker allows for multiple items by default. Supply this parameter to force selection of a single item.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AllowFolders</maml:name>
        <maml:description>
          <maml:para>Device groups are considered folders and are not selectable by default. To allow for selecting many items with one click, include this parameter. Consider using this with the FlattenOutput switch unless you specifically need to select a folder item instead of it's child items.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AllowServers</maml:name>
        <maml:description>
          <maml:para>Supply this switch to enable selection of servers. You might choose to do this if you want to select Recording Servers, or you want to select all child items, such as cameras, from a server. Consider using this with the FlattenOutput switch unless you specifically need to select a server item instead of it's child items.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>OutputAsItem</maml:name>
        <maml:description>
          <maml:para>Output cameras as VideoOS.Platform.Item objects instead of converting them to Configuration API Camera objects. Depending on your needs, it may be more performant to use OutputAsItem. For example, if you are using a cmdlet like Get-Snapshot, you can extract the $item.FQID.ObjectId and provide that Guid in the CameraId parameter to avoid an unnecessary conversion between Item, ConfigurationItem, and back again.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RemoveDuplicates</maml:name>
        <maml:description>
          <maml:para>Automatically remove duplicate cameras from the output before outputing them. Useful when you select a folder which may have the same cameras in more than one child folder.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>SingleSelect</maml:name>
        <maml:description>
          <maml:para>The ItemPicker allows for multiple items by default. Supply this parameter to force selection of a single item.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Title</maml:name>
        <maml:description>
          <maml:para>Specifies the text in the title-bar of the Item Picker window. The default is "Select Camera(s)".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Select Camera(s)</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Select-Camera -AllowFolders -AllowServers -RemoveDuplicates</dev:code>
        <dev:remarks>
          <maml:para>Launch the Item Picker and allow the user to add servers or whole groups/folders. The output will be de-duplicated in the event the user-defined groups have the same camera(s) present in more than one child folder. The objects returned will be the same kind of object returned by the Get-Camera cmdlet.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Select-Camera -OutputAsItem | % { Get-Snapshot -CameraId $_.FQID.ObjectId -Live }</dev:code>
        <dev:remarks>
          <maml:para>Launch the Item Picker and use the resulting Item.FQID.ObjectId properties of the camera(s) to get a live snapshot from the Get-Snapshot cmdlet.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/select-camera/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Select-VideoOSItem</command:name>
      <command:verb>Select</command:verb>
      <command:noun>VideoOSItem</command:noun>
      <maml:description>
        <maml:para>Offers a UI dialog for selecting items, similar to the item selection interface in Management Client.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet implements the VideoOS.Platform.UI.ItemPickerUserControl in a custom form to allow the user to select one or more items of any kind using a friendly and customizable user interface.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Select-VideoOSItem</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Title</maml:name>
          <maml:description>
            <maml:para>Specifies the text in the title-bar of the Item Picker window. The default is "Select Item(s)".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>Select Item(s)</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Kind</maml:name>
          <maml:description>
            <maml:para>One or more Guids representing a type of object in Milestone. Use Get-Kind -List to see the available Kinds or use [VideoOS.Platform.Kind] to access a set of static Kind guids, such as [VideoOS.Platform.Kind]::Camera. Omitting a value means the list in the picker will be unfiltered.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
          <dev:type>
            <maml:name>Guid[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Category</maml:name>
          <maml:description>
            <maml:para>One or more [VideoOS.Platform.Admin.Category] values representing the types of items to populate in the picker, such as [VideoOS.Platform.Admin.Category]::VideoIn. Omitting a value means the list in the picker will be unfiltered.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Server</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">VideoIn</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">VideoOut</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">AudioIn</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">AudioOut</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TriggerIn</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">TriggerOut</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Text</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Unknown</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Layout</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">Category[]</command:parameterValue>
          <dev:type>
            <maml:name>Category[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AllowFolders</maml:name>
          <maml:description>
            <maml:para>Device groups are considered folders and are not selectable by default. To allow for selecting many items with one click, include this parameter. Consider using this with the FlattenOutput switch unless you specifically need to select a folder item instead of it's child items.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>AllowServers</maml:name>
          <maml:description>
            <maml:para>Supply this switch to enable selection of servers. You might choose to do this if you want to select Recording Servers, or you want to select all child items, such as cameras, from a server. Consider using this with the FlattenOutput switch unless you specifically need to select a server item instead of it's child items.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>CategoryUserSelectable</maml:name>
          <maml:description>
            <maml:para>Supply this switch to enable a drop-down list in the UI for the user to filter the Category themselves.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>FlattenOutput</maml:name>
          <maml:description>
            <maml:para>When you allow groups/folders to be selectable, the result will not directly include the child items of those folders unless you supply this switch.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>HideGroupsTab</maml:name>
          <maml:description>
            <maml:para>Supply this switch to hide the Groups tab, leaving only the Server tab which shows the "SystemDefined" hierarchy.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>HideServerTab</maml:name>
          <maml:description>
            <maml:para>Supply this switch to hide the Server tab, leaving only the Groups tab which shows the "UserDefined" hierarchy.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>KindUserSelectable</maml:name>
          <maml:description>
            <maml:para>Supply this switch to enable a drop-down list in the UI for the user to filter the Kind themselves.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>SingleSelect</maml:name>
          <maml:description>
            <maml:para>The ItemPicker allows for multiple items by default. Supply this parameter to force selection of a single item.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AllowFolders</maml:name>
        <maml:description>
          <maml:para>Device groups are considered folders and are not selectable by default. To allow for selecting many items with one click, include this parameter. Consider using this with the FlattenOutput switch unless you specifically need to select a folder item instead of it's child items.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>AllowServers</maml:name>
        <maml:description>
          <maml:para>Supply this switch to enable selection of servers. You might choose to do this if you want to select Recording Servers, or you want to select all child items, such as cameras, from a server. Consider using this with the FlattenOutput switch unless you specifically need to select a server item instead of it's child items.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Category</maml:name>
        <maml:description>
          <maml:para>One or more [VideoOS.Platform.Admin.Category] values representing the types of items to populate in the picker, such as [VideoOS.Platform.Admin.Category]::VideoIn. Omitting a value means the list in the picker will be unfiltered.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Category[]</command:parameterValue>
        <dev:type>
          <maml:name>Category[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>CategoryUserSelectable</maml:name>
        <maml:description>
          <maml:para>Supply this switch to enable a drop-down list in the UI for the user to filter the Category themselves.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>FlattenOutput</maml:name>
        <maml:description>
          <maml:para>When you allow groups/folders to be selectable, the result will not directly include the child items of those folders unless you supply this switch.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>HideGroupsTab</maml:name>
        <maml:description>
          <maml:para>Supply this switch to hide the Groups tab, leaving only the Server tab which shows the "SystemDefined" hierarchy.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>HideServerTab</maml:name>
        <maml:description>
          <maml:para>Supply this switch to hide the Server tab, leaving only the Groups tab which shows the "UserDefined" hierarchy.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Kind</maml:name>
        <maml:description>
          <maml:para>One or more Guids representing a type of object in Milestone. Use Get-Kind -List to see the available Kinds or use [VideoOS.Platform.Kind] to access a set of static Kind guids, such as [VideoOS.Platform.Kind]::Camera. Omitting a value means the list in the picker will be unfiltered.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Guid[]</command:parameterValue>
        <dev:type>
          <maml:name>Guid[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>KindUserSelectable</maml:name>
        <maml:description>
          <maml:para>Supply this switch to enable a drop-down list in the UI for the user to filter the Kind themselves.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>SingleSelect</maml:name>
        <maml:description>
          <maml:para>The ItemPicker allows for multiple items by default. Supply this parameter to force selection of a single item.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Title</maml:name>
        <maml:description>
          <maml:para>Specifies the text in the title-bar of the Item Picker window. The default is "Select Item(s)".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>Select Item(s)</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>PS Select-VideoOSItem -Title "Select Microphone(s)" -AllowServers -HideGroupsTab -Kind ([VideoOS.Platform.Kind]::Microphone) | % { Send-MipMessage -MessageId 'Control.StartRecordingCommand' -DestinationEndpoint $_.FQID -UseEnvironmentManager }</dev:code>
        <dev:remarks>
          <maml:para>Launch the Item Picker and hide the Groups tab, showing only the system-definied hierarchy of servers under the Server tab, and filter the items to only Microphones. For each selected Microphone, send a manual "Start Recording" message.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/select-videoositem/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-ConfigurationItemProperty</command:name>
      <command:verb>Set</command:verb>
      <command:noun>ConfigurationItemProperty</command:noun>
      <maml:description>
        <maml:para>Sets the value of a given ConfigurationItem property by key</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>A ConfigurationItem may have zero or more Property objects in the Properties array. Each property has a key name and a value. Since the Properties property on a ConfigurationItem has no string-based indexer, you are required to search the array of properties for the one with the Key you're interested in, and then set the Value property on it.</maml:para>
      <maml:para>This cmdlet is a simple wrapper which does the Where-Object for you, throws an error if the Key does not exist, and optionally passes the modified ConfigurationItem back into the pipeline.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-ConfigurationItemProperty</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>InputObject</maml:name>
          <maml:description>
            <maml:para>A [VideoOS.ConfigurationApi.ClientService.ConfigurationItem] with a property to be modified.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ConfigurationItem</command:parameterValue>
          <dev:type>
            <maml:name>ConfigurationItem</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Key</maml:name>
          <maml:description>
            <maml:para>A string representing the key of the property to be modified.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Value</maml:name>
          <maml:description>
            <maml:para>A string value to be used as the new value for the property named by the given key.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Pass the modified ConfigurationItem from $InputObject back into the pipeline.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>InputObject</maml:name>
        <maml:description>
          <maml:para>A [VideoOS.ConfigurationApi.ClientService.ConfigurationItem] with a property to be modified.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ConfigurationItem</command:parameterValue>
        <dev:type>
          <maml:name>ConfigurationItem</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Key</maml:name>
        <maml:description>
          <maml:para>A string representing the key of the property to be modified.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Pass the modified ConfigurationItem from $InputObject back into the pipeline.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Value</maml:name>
        <maml:description>
          <maml:para>A string value to be used as the new value for the property named by the given key.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-ConfigurationItem -Path / | Set-ConfigurationItemProperty -Key Description -Value 'A new description' -PassThru | Set-ConfigurationItem</dev:code>
        <dev:remarks>
          <maml:para>Gets a ConfigurationItem representing the Management Server, changes the Description property, and pushes the change to the Management Server using Set-ConfigurationItem.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-configurationitemproperty/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-MobileServerCertificate</command:name>
      <command:verb>Set</command:verb>
      <command:noun>MobileServerCertificate</command:noun>
      <maml:description>
        <maml:para>Sets the sslcert binding for Milestone XProtect Mobile Server</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Sets the sslcert binding for Milestone XProtect Mobile Server when provided with a certificate, an object with a Thumbprint property, or when the -Thumbprint parameter is explicitly provided.</maml:para>
      <maml:para>The Thumbprint must represent a publicly signed and trusted certificate located in Cert:\LocalMachine\My where the private key is present.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-MobileServerCertificate</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>Thumbprint</maml:name>
          <maml:description>
            <maml:para>The certificate hash, commonly referred to as Thumbprint, representing a certificate which is present in the path Cert:\LocalMachine\My</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>X509Certificate</maml:name>
          <maml:description>
            <maml:para>A [System.Security.Cryptography.X509Certificates.X509Certificate2] object representing a certificate which is present in the path Cert:\LocalMachine\My</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">X509Certificate2</command:parameterValue>
          <dev:type>
            <maml:name>X509Certificate2</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
        <maml:name>Thumbprint</maml:name>
        <maml:description>
          <maml:para>The certificate hash, commonly referred to as Thumbprint, representing a certificate which is present in the path Cert:\LocalMachine\My</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>X509Certificate</maml:name>
        <maml:description>
          <maml:para>A [System.Security.Cryptography.X509Certificates.X509Certificate2] object representing a certificate which is present in the path Cert:\LocalMachine\My</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">X509Certificate2</command:parameterValue>
        <dev:type>
          <maml:name>X509Certificate2</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>gci Cert:\LocalMachine\My | ? Subject -eq 'CN=mobile.example.com' | Set-MobileServerCertificate</dev:code>
        <dev:remarks>
          <maml:para>Gets a certificate for mobile.example.com from Cert:\LocalMachine\My and pipes it to Set-MobileServerCertificate</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Submit-Renewal | Set-MobileServerCertificate</dev:code>
        <dev:remarks>
          <maml:para>Submits an ACME certificate renewal using the Posh-ACME module, and if the certificate is renewed, updates the Mobile Server sslcert binding by piping the output to Set-MobileServerCertificate. The Submit-Renewal and New-PACertificate cmdlets return an object with a Thumbprint property.</maml:para>
          <maml:para>If using Posh-ACME, you must ensure the New-PACertificate command is executed with elevated permissions, and used with the -Install switch so that the new certificate is installed into the Cert:\LocalMachine\My path. If you have done this, then subsequent executions of Submit-Renewal from an elevated session under the same user context will result the renewed certs being installed as well.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-mobileservercertificate/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsCamera</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsCamera</command:noun>
      <maml:description>
        <maml:para>Sets one or more property values on the specified camera or cameras.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Uses Milestone's Configuration API to modify properties of cameras and saves the changes to the Management Server. Most parameters represent the Milestone MIP SDK property names of the underlying camera object. However, there are a few custom parameter names including "Coordinates", "Direction", "FieldOfView" and "Depth" which accept values that are easier to understand than the values expected by the MIP SDK.</maml:para>
      <maml:para>This cmdlet supports the "-WhatIf" parameter switch. Use this to test to see what would happen and if the changes made are what you would expect to see. You may also use the "-Verbose" switch without the "-WhatIf" switch, and you will see all the changes applied to the camera(s).</maml:para>
      <maml:para>You do not need to use this cmdlet to make configuration changes to cameras. You could choose to modify the properties directly on the camera objects, and then call the ".Save()" method on the object(s) when you're ready to push those changes to the Management Server. However, this cmdlet provides an idiomatic PowerShell option to accomplish the same task with less effort.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsCamera</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Milestone Configuration API camera objects such as those returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies a new name for the camera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="10" aliases="none">
          <maml:name>CoverageFieldOfView</maml:name>
          <maml:description>
            <maml:para>Specifies the angle of the field of view of the camera in degrees, expressed as a value between 0 and 1. For example, a value of 0.25 represents 90 degrees and a value of 0.5 represents 180 degrees. You can produce the right value by dividing the field of view in degrees, by 360.</maml:para>
            <maml:para>Alternatively, you may choose to use the FieldOfView parameter which allows for specifying a value in degrees between 0 and 360. If the FieldOfView parameter is provided, it takes precedence over CoverageFieldOfView.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="11" aliases="none">
          <maml:name>Depth</maml:name>
          <maml:description>
            <maml:para>Specifies the depth of the field of view, either in meters, or in feet, depending on the region settings of the environment in which PowerShell is running. If PowerShell is running in a PC configured in a region of the United States, the value will be treated as a measurement in feet. In most other cases the value will be treated as a measurement of meters. To override the regional default or explicitly include the units in your script, you may use the Units parameter.</maml:para>
            <maml:para>This parameter overrides the CoverageDepth parameter if that parameter is also provided.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="12" aliases="none">
          <maml:name>CoverageDepth</maml:name>
          <maml:description>
            <maml:para>Specifies the depth of the camera's field of view in meters.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="13" aliases="none">
          <maml:name>Units</maml:name>
          <maml:description>
            <maml:para>Specifies whether the unit of measurement provided in the Depth parameter is in feet or meters. By default, the value will be interpreted based on your PowerShell environment's region settings. Set Units to Metric to explicitly specify that the Depth value represents meters. Set it to Imperial to specify that the Depth value represents feet.</maml:para>
            <maml:para>This parameter does not affect the behavior of the CoverageDepth parameter. That value is always interpreted as meters.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Metric</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Imperial</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="14" aliases="none">
          <maml:name>PrebufferEnabled</maml:name>
          <maml:description>
            <maml:para>Specifies that the pre-buffer feature should be enabled or disabled.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="15" aliases="none">
          <maml:name>PrebufferInMemory</maml:name>
          <maml:description>
            <maml:para>Specifies that the pre-buffer feature should pre-buffer to memory, or to disk. When PrebufferInMemory is set to $false, then the pre-buffer will reside on disk.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="16" aliases="none">
          <maml:name>PrebufferSeconds</maml:name>
          <maml:description>
            <maml:para>Specifies the size of the pre-buffer in seconds. The maximum size for the pre-buffer is 15 seconds when pre-buffering to memory. When pre-buffering to disk, the maximum value is 10000.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="17" aliases="none">
          <maml:name>RecordingEnabled</maml:name>
          <maml:description>
            <maml:para>Specifies whether or not recording is enabled for this camera. When enabled, recording can be triggered manually from a client application or automatically based on the configured set of rules. When disabled, the camera cannot be recorded, and any existing recordings cannot be played back.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="18" aliases="none">
          <maml:name>RecordingFramerate</maml:name>
          <maml:description>
            <maml:para>Specifies the desired recording frame rate. This applies only when the recorded stream is in MJPEG format. This setting has no impact when the recorded stream is MPEG4, H264, or H265.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="19" aliases="none">
          <maml:name>RecordKeyframesOnly</maml:name>
          <maml:description>
            <maml:para>Specifies that only key-frames should be recorded. Typically, key frames are received once per second but the value can vary widely depending on stream settings.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
          <maml:name>ShortName</maml:name>
          <maml:description>
            <maml:para>Specifies the new short-name for the camera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="20" aliases="none">
          <maml:name>RecordOnRelatedDevices</maml:name>
          <maml:description>
            <maml:para>Specifies whether or not related devices should be recorded whenever recording is triggered for the camera. Related devices typically include microphones, speakers and metadata associated with the camera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="21" aliases="none">
          <maml:name>EdgeStorageEnabled</maml:name>
          <maml:description>
            <maml:para>Specifies that edge storage may or may not be used.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="22" aliases="none">
          <maml:name>EdgeStoragePlaybackEnabled</maml:name>
          <maml:description>
            <maml:para>Specifies that playback may or may not be done directly from edge storage.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="23" aliases="none">
          <maml:name>ManualRecordingTimeoutEnabled</maml:name>
          <maml:description>
            <maml:para>Specifies that the timeout used to stop a manual recording session should be enabled or disabled.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="24" aliases="none">
          <maml:name>ManualRecordingTimeoutMinutes</maml:name>
          <maml:description>
            <maml:para>Specifies the maximum time the camera can be recording due to a manual recording trigger.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="3" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies the desired camera description. This is visible in the Management Client and may be searchable in some clients or utilities.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="4" aliases="none">
          <maml:name>Enabled</maml:name>
          <maml:description>
            <maml:para>Specifies that the camera should be enabled or disabled.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
          <dev:type>
            <maml:name>Boolean</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="5" aliases="none">
          <maml:name>Coordinates</maml:name>
          <maml:description>
            <maml:para>Specifies GPS coordinates in a "latitude, longitude" format where latitude and longitude are positive or negative numberic values with no alphabetic characters. For example, "45.4171601197572, -122.732137977298".</maml:para>
            <maml:para>To remove the coordinates from a camera, you may set the value to $null or ''.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="6" aliases="none">
          <maml:name>GisPoint</maml:name>
          <maml:description>
            <maml:para>Specifies the GPS coordinates of the camera in a custom format. The value is accepted as a string in the format "POINT EMPTY" to "un-set" the coordinates, or "POINT (X Y [Z])" where the elevation field "Z" is optional and not usually provided, X represents the longitude, and Y represents the latitude. It's important to note that this format reverses the standard "latitude, longitude" order because it is expressed internally in Milestone as a "point" with X/Y coordinates.</maml:para>
            <maml:para>You may use the Coordinates parameter for a more user-friendly format for setting coordinates.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="7" aliases="none">
          <maml:name>Direction</maml:name>
          <maml:description>
            <maml:para>Specifies the compass orientation of the camera in degrees between 0 and 360. This parameter overrides the CoverageDirection parameter if that parameter is also provided.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="8" aliases="none">
          <maml:name>CoverageDirection</maml:name>
          <maml:description>
            <maml:para>Specifies the orientation of the camera as a 360-degree compass bearing expressed as a value between 0 and 1. For example, a value of 0 represents North while a value of 0.5 represents South, and 0.75 represents West. You can produce the right value by dividing the compass heading value, such as 270 degrees (East), by 360, for a value of 0.75.</maml:para>
            <maml:para>Alternatively, you may choose to use the Direction parameter which allows for specifying a value in degrees between 0 and 360. If the Direction parameter is provided, it takes priority over CoverageDirection.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="9" aliases="none">
          <maml:name>FieldOfView</maml:name>
          <maml:description>
            <maml:para>Specifies the field of view of the camera in degrees between 0 and 360. This parameter overrides the CoverageFieldOfView parameter if that parameter is also provided.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
          <dev:type>
            <maml:name>Double</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the modified camera object should be returned to the pipeline or caller. No output is produced by this cmdlet by default.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Milestone Configuration API camera objects such as those returned by Get-VmsCamera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
        <dev:type>
          <maml:name>Camera[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="5" aliases="none">
        <maml:name>Coordinates</maml:name>
        <maml:description>
          <maml:para>Specifies GPS coordinates in a "latitude, longitude" format where latitude and longitude are positive or negative numberic values with no alphabetic characters. For example, "45.4171601197572, -122.732137977298".</maml:para>
          <maml:para>To remove the coordinates from a camera, you may set the value to $null or ''.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="12" aliases="none">
        <maml:name>CoverageDepth</maml:name>
        <maml:description>
          <maml:para>Specifies the depth of the camera's field of view in meters.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="8" aliases="none">
        <maml:name>CoverageDirection</maml:name>
        <maml:description>
          <maml:para>Specifies the orientation of the camera as a 360-degree compass bearing expressed as a value between 0 and 1. For example, a value of 0 represents North while a value of 0.5 represents South, and 0.75 represents West. You can produce the right value by dividing the compass heading value, such as 270 degrees (East), by 360, for a value of 0.75.</maml:para>
          <maml:para>Alternatively, you may choose to use the Direction parameter which allows for specifying a value in degrees between 0 and 360. If the Direction parameter is provided, it takes priority over CoverageDirection.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="10" aliases="none">
        <maml:name>CoverageFieldOfView</maml:name>
        <maml:description>
          <maml:para>Specifies the angle of the field of view of the camera in degrees, expressed as a value between 0 and 1. For example, a value of 0.25 represents 90 degrees and a value of 0.5 represents 180 degrees. You can produce the right value by dividing the field of view in degrees, by 360.</maml:para>
          <maml:para>Alternatively, you may choose to use the FieldOfView parameter which allows for specifying a value in degrees between 0 and 360. If the FieldOfView parameter is provided, it takes precedence over CoverageFieldOfView.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="11" aliases="none">
        <maml:name>Depth</maml:name>
        <maml:description>
          <maml:para>Specifies the depth of the field of view, either in meters, or in feet, depending on the region settings of the environment in which PowerShell is running. If PowerShell is running in a PC configured in a region of the United States, the value will be treated as a measurement in feet. In most other cases the value will be treated as a measurement of meters. To override the regional default or explicitly include the units in your script, you may use the Units parameter.</maml:para>
          <maml:para>This parameter overrides the CoverageDepth parameter if that parameter is also provided.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="3" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies the desired camera description. This is visible in the Management Client and may be searchable in some clients or utilities.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="7" aliases="none">
        <maml:name>Direction</maml:name>
        <maml:description>
          <maml:para>Specifies the compass orientation of the camera in degrees between 0 and 360. This parameter overrides the CoverageDirection parameter if that parameter is also provided.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="21" aliases="none">
        <maml:name>EdgeStorageEnabled</maml:name>
        <maml:description>
          <maml:para>Specifies that edge storage may or may not be used.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="22" aliases="none">
        <maml:name>EdgeStoragePlaybackEnabled</maml:name>
        <maml:description>
          <maml:para>Specifies that playback may or may not be done directly from edge storage.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="4" aliases="none">
        <maml:name>Enabled</maml:name>
        <maml:description>
          <maml:para>Specifies that the camera should be enabled or disabled.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="9" aliases="none">
        <maml:name>FieldOfView</maml:name>
        <maml:description>
          <maml:para>Specifies the field of view of the camera in degrees between 0 and 360. This parameter overrides the CoverageFieldOfView parameter if that parameter is also provided.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Double</command:parameterValue>
        <dev:type>
          <maml:name>Double</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="6" aliases="none">
        <maml:name>GisPoint</maml:name>
        <maml:description>
          <maml:para>Specifies the GPS coordinates of the camera in a custom format. The value is accepted as a string in the format "POINT EMPTY" to "un-set" the coordinates, or "POINT (X Y [Z])" where the elevation field "Z" is optional and not usually provided, X represents the longitude, and Y represents the latitude. It's important to note that this format reverses the standard "latitude, longitude" order because it is expressed internally in Milestone as a "point" with X/Y coordinates.</maml:para>
          <maml:para>You may use the Coordinates parameter for a more user-friendly format for setting coordinates.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="23" aliases="none">
        <maml:name>ManualRecordingTimeoutEnabled</maml:name>
        <maml:description>
          <maml:para>Specifies that the timeout used to stop a manual recording session should be enabled or disabled.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="24" aliases="none">
        <maml:name>ManualRecordingTimeoutMinutes</maml:name>
        <maml:description>
          <maml:para>Specifies the maximum time the camera can be recording due to a manual recording trigger.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies a new name for the camera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the modified camera object should be returned to the pipeline or caller. No output is produced by this cmdlet by default.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="14" aliases="none">
        <maml:name>PrebufferEnabled</maml:name>
        <maml:description>
          <maml:para>Specifies that the pre-buffer feature should be enabled or disabled.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="15" aliases="none">
        <maml:name>PrebufferInMemory</maml:name>
        <maml:description>
          <maml:para>Specifies that the pre-buffer feature should pre-buffer to memory, or to disk. When PrebufferInMemory is set to $false, then the pre-buffer will reside on disk.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="16" aliases="none">
        <maml:name>PrebufferSeconds</maml:name>
        <maml:description>
          <maml:para>Specifies the size of the pre-buffer in seconds. The maximum size for the pre-buffer is 15 seconds when pre-buffering to memory. When pre-buffering to disk, the maximum value is 10000.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="19" aliases="none">
        <maml:name>RecordKeyframesOnly</maml:name>
        <maml:description>
          <maml:para>Specifies that only key-frames should be recorded. Typically, key frames are received once per second but the value can vary widely depending on stream settings.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="20" aliases="none">
        <maml:name>RecordOnRelatedDevices</maml:name>
        <maml:description>
          <maml:para>Specifies whether or not related devices should be recorded whenever recording is triggered for the camera. Related devices typically include microphones, speakers and metadata associated with the camera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="17" aliases="none">
        <maml:name>RecordingEnabled</maml:name>
        <maml:description>
          <maml:para>Specifies whether or not recording is enabled for this camera. When enabled, recording can be triggered manually from a client application or automatically based on the configured set of rules. When disabled, the camera cannot be recorded, and any existing recordings cannot be played back.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Boolean</command:parameterValue>
        <dev:type>
          <maml:name>Boolean</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="18" aliases="none">
        <maml:name>RecordingFramerate</maml:name>
        <maml:description>
          <maml:para>Specifies the desired recording frame rate. This applies only when the recorded stream is in MJPEG format. This setting has no impact when the recorded stream is MPEG4, H264, or H265.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
        <maml:name>ShortName</maml:name>
        <maml:description>
          <maml:para>Specifies the new short-name for the camera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="13" aliases="none">
        <maml:name>Units</maml:name>
        <maml:description>
          <maml:para>Specifies whether the unit of measurement provided in the Depth parameter is in feet or meters. By default, the value will be interpreted based on your PowerShell environment's region settings. Set Units to Metric to explicitly specify that the Depth value represents meters. Set it to Imperial to specify that the Depth value represents feet.</maml:para>
          <maml:para>This parameter does not affect the behavior of the CoverageDepth parameter. That value is always interpreted as meters.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Boolean</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Double</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Int32</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Get-Hardware | Get-VmsCamera -Channel (1..63) -Verbose | Set-VmsCamera -Enabled $false
 
&lt;# OUTPUT
VERBOSE: Performing the operation "Changing Enabled from True to False" on target "Cash Register".
VERBOSE: Performing the operation "Saving changes" on target "Cash Register".
VERBOSE: Performing the operation "Changing Enabled from True to False" on target "Entrance".
VERBOSE: Performing the operation "Saving changes" on target "Entrance".
VERBOSE: Performing the operation "Changing Enabled from True to False" on target "LPR".
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example, we first ensure we are logged in to the Management Server. Then we gets all enabled cameras with a channel number between 1 and 63 (camera 2 to camera 64), and disable them. You might do this if you only use the first channel on every camera, and all other channels should be disabled. In this case, channels higher than 63 would be unchanged. If you had devices with more unused channels than this, you could use "(1..511)" to select all cameras from the 2nd to the 512th channel.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$selectedCameras = Select-Camera -AllowFolders -AllowServers -RemoveDuplicates
$props = @{
    PrebufferEnabled = $true
    PrebufferSeconds = 10
    PrebufferInMemory = $true
    Verbose = $true
}
$selectedCameras | Set-VmsCamera @props
 
&lt;# OUTPUT
VERBOSE: Performing the operation "Changing PrebufferSeconds from 3 to 10" on target "Camera 1".
VERBOSE: Performing the operation "Saving changes" on target "Camera 1".
VERBOSE: Performing the operation "Changing PrebufferSeconds from 3 to 10" on target "Camera 2".
VERBOSE: Performing the operation "Saving changes" on target "Camera 2".
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>Prompts for a camera selection and accepts the selection of camera groups or recording servers, and removes duplicate entries in the results just in case the same cameras are present in multiple groups or subgroups. Cameras are retrieved from the selected group(s) recursively.</maml:para>
          <maml:para>Next, each camera is configured to use an in-memory pre-buffer of up to 10 seconds. All changes made are logged to the verbose stream so each configuration change made to each camera will be displayed in the console.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>$vmsCameraParams = @{
    Camera = Get-VmsCamera -Name 'Office Entrance'
    Coordinates = '45.4171601197572, -122.732137977298'
    Direction = 90
    FieldOfView = 180
    Depth = 15
    Verbose = $true
}
 
Set-VmsCamera @vmsCameraParams
 
&lt;# OUTPUT
VERBOSE: Performing the operation "Changing CoverageDirection from 0.505555555555556 to 0.25" on target "Cam Lab Camera".
VERBOSE: Performing the operation "Changing CoverageFieldOfView from 0.125 to 0.5" on target "Cam Lab Camera".
VERBOSE: Performing the operation "Changing CoverageDepth from 37.49040000015 to 4.57200000001829" on target "Cam Lab Camera".
VERBOSE: Performing the operation "Saving changes" on target "Cam Lab Camera".
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>A hashtable named $vmsCameraParams is defined with all the parameters needed to change the GPS location, direction, field of view, and depth of field for the camera(s) named "Office Entrance". The hashtable is then "splatted" into the cmdlet and because we included the Verbose switch, all changes made to the camera are logged to the console.</maml:para>
          <maml:para>Note that if the settings already matched these values, there would be nothing logged to the console because no changes had to be made.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/get-vmscamera/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsCameraGeneralSetting</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsCameraGeneralSetting</command:noun>
      <maml:description>
        <maml:para>Sets one or more general setting values for a camera.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet enables one or more settings to be updated on one or more cameras with minimal effort.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsCameraGeneralSetting</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Settings</maml:name>
          <maml:description>
            <maml:para>Accepts a hashtable of settings used to update the general settings for a given camera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
          <dev:type>
            <maml:name>Hashtable</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Camera</maml:name>
          <maml:description>
            <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
          <dev:type>
            <maml:name>Camera[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Camera</maml:name>
        <maml:description>
          <maml:para>Specifies one or more camera objects such as are returned by Get-VmsCamera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Camera[]</command:parameterValue>
        <dev:type>
          <maml:name>Camera[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Settings</maml:name>
        <maml:description>
          <maml:para>Accepts a hashtable of settings used to update the general settings for a given camera.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
        <dev:type>
          <maml:name>Hashtable</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.Camera[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Collections.Hashtable</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$settings = @{
    BlackAndWhiteMode = 'Yes'
}
$camera | Set-VmsCameraGeneralSetting -Settings $settings -Verbose
 
&lt;# OUTPUT
VERBOSE: Performing the operation "Changing BlackAndWhiteMode from No to Yes" on target "Elevator".
VERBOSE: Performing the operation "Save changes" on target "Elevator".
#&gt;
 
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$camera | Set-VmsCameraGeneralSetting -Settings $settings -Verbose
 
&lt;# OUTPUT (no BlackAndWhiteMode setting available)
WARNING: A general setting named 'BlackAndWhiteMode' was not found on Garage.
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>In this example we login to the Management Server, present a camera selection dialog, and then attempt to update the BlackAndWhiteMode value to "Yes" which, perhaps counter-intuitively, represents "Color" based on the ValueTypeInfo for the camera used for testing.</maml:para>
          <maml:para>We then present another camera selection dialog, where you can choose a different camera lacking a "BlackAndWhiteMode" general setting, and demonstrate the warning message you can expect when attempting to update general settings that are not present on a camera.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-vmscamerageneralsetting/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsCameraStream</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsCameraStream</command:noun>
      <maml:description>
        <maml:para>Sets properties of one or more video stream.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Use this cmdlet to update specific properties of a video stream such as the framerate, resolution, or codec, as well as to specify how the VMS should use the stream. For example, if a stream should no longer be used by the VMS, you may disable it. Or if you wish to enable a stream, and configure it as the new default live stream, you may enable it and indicate that it should be the LiveDefault stream from now on.</maml:para>
      <maml:para>When viewing camera settings in Management Client, there are two tabs for configuring stream settings. The "Settings" tab shows general settings that may apply to all streams or control general streaming behavior of the camera, as well as one or more video streams each with a set of properties exclusive to that stream.</maml:para>
      <maml:para>The "Streams" tab is where you can indicate which of the available streams from the camera to use, and how they should be used. By default, a single stream usage is present in the Streams tab, and it usually is associated with "Video stream 1". This stream is both the LiveDefault and the Recorded stream, and the LiveMode may be "WhenNeeded" or "Always".</maml:para>
      <maml:para>This cmdlet consolidates both the Settings tab, and the Streams tab, to simplify the configuration of all properties associated with streams and how they are used by the VMS.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsCameraStream</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Disabled</maml:name>
          <maml:description>
            <maml:para>Specifies that the stream should be disabled. This is the same as clicking the "Delete" button in the Streams tab for a camera in Management Client.</maml:para>
            <maml:para>Note that while Management Client will automatically reassign the "LiveDefault" and "Record" properties to another video stream when the deleted stream was the default live, and/or recorded stream, this cmdlet will not. If the stream to be disabled is the recorded, or default live stream, you must re-assign those responsibilities to another stream first.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Stream</maml:name>
          <maml:description>
            <maml:para>Accepts a VmsCameraStreamConfig as is returned by the Get-VmsCameraStream cmdlet.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">VmsCameraStreamConfig[]</command:parameterValue>
          <dev:type>
            <maml:name>VmsCameraStreamConfig[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Set-VmsCameraStream</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies a new name to be displayed to users when selecting streams in client applications. Specifying this parameter is the same as entering an new name in the "Name" column in the Streams tab in Management Client.</maml:para>
            <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>LiveDefault</maml:name>
          <maml:description>
            <maml:para>Specifies that the stream should be used by default for live viewing.</maml:para>
            <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>LiveMode</maml:name>
          <maml:description>
            <maml:para>Specifies the LiveMode for the stream which can be either Always, Never, or WhenNeeded.</maml:para>
            <maml:para>A value of "Always" means the recording server will request a live stream from the camera at all times, even when that stream is not requested by a client.</maml:para>
            <maml:para>A value of "WhenNeeded" means the recording server will only request a live stream from the camera when required, such as when a client is requesting that stream, or when that stream is required by a recording rule.</maml:para>
            <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Always</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Never</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">WhenNeeded</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false"></command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false"></command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Recorded</maml:name>
          <maml:description>
            <maml:para>Specifies that the stream should be recorded. Each camera in the VMS may have only one recorded stream.</maml:para>
            <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Settings</maml:name>
          <maml:description>
            <maml:para>Accepts a hashtable of settings used to update the properties of a given stream. A warning will be issued if a key does not match known settings for the stream. Settings may be changed on disabled video streams without enabling them.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
          <dev:type>
            <maml:name>Hashtable</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>Stream</maml:name>
          <maml:description>
            <maml:para>Accepts a VmsCameraStreamConfig as is returned by the Get-VmsCameraStream cmdlet.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">VmsCameraStreamConfig[]</command:parameterValue>
          <dev:type>
            <maml:name>VmsCameraStreamConfig[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Disabled</maml:name>
        <maml:description>
          <maml:para>Specifies that the stream should be disabled. This is the same as clicking the "Delete" button in the Streams tab for a camera in Management Client.</maml:para>
          <maml:para>Note that while Management Client will automatically reassign the "LiveDefault" and "Record" properties to another video stream when the deleted stream was the default live, and/or recorded stream, this cmdlet will not. If the stream to be disabled is the recorded, or default live stream, you must re-assign those responsibilities to another stream first.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DisplayName</maml:name>
        <maml:description>
          <maml:para>Specifies a new name to be displayed to users when selecting streams in client applications. Specifying this parameter is the same as entering an new name in the "Name" column in the Streams tab in Management Client.</maml:para>
          <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>LiveDefault</maml:name>
        <maml:description>
          <maml:para>Specifies that the stream should be used by default for live viewing.</maml:para>
          <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>LiveMode</maml:name>
        <maml:description>
          <maml:para>Specifies the LiveMode for the stream which can be either Always, Never, or WhenNeeded.</maml:para>
          <maml:para>A value of "Always" means the recording server will request a live stream from the camera at all times, even when that stream is not requested by a client.</maml:para>
          <maml:para>A value of "WhenNeeded" means the recording server will only request a live stream from the camera when required, such as when a client is requesting that stream, or when that stream is required by a recording rule.</maml:para>
          <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Recorded</maml:name>
        <maml:description>
          <maml:para>Specifies that the stream should be recorded. Each camera in the VMS may have only one recorded stream.</maml:para>
          <maml:para>Note: Specifying a value for this parameter will automatically add the stream to the Streams tab if it is not already enabled.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Settings</maml:name>
        <maml:description>
          <maml:para>Accepts a hashtable of settings used to update the properties of a given stream. A warning will be issued if a key does not match known settings for the stream. Settings may be changed on disabled video streams without enabling them.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Hashtable</command:parameterValue>
        <dev:type>
          <maml:name>Hashtable</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>Stream</maml:name>
        <maml:description>
          <maml:para>Accepts a VmsCameraStreamConfig as is returned by the Get-VmsCameraStream cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">VmsCameraStreamConfig[]</command:parameterValue>
        <dev:type>
          <maml:name>VmsCameraStreamConfig[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VmsCameraStreamConfig</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$camera = Select-Camera -SingleSelect -Title 'Select a camera (double-click)'
$stream = $camera | Get-VmsCameraStream -LiveDefault
$settings = @{
    FPS = 10
    Codec = 'h265'
}
$stream | Set-VmsCameraStream -Settings $settings -Verbose
 
&lt;# OUTPUT
VERBOSE: Performing the operation "Changing FPS from 15 to 10" on target "Video stream 1 on Cam Lab Camera".
VERBOSE: Performing the operation "Save changes" on target "Video stream 1 on Cam Lab Camera".
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After ensuring that we are connected to the Management Server, and prompting to select a camera, we select the default live stream for the camera. Next, a hashtable with the settings we want to apply is created, and we pass that hashtable to Set-VmsCameraStream.</maml:para>
          <maml:para>With the "-Verbose" switch present, we get detailed output which tells us exactly which changes were made. In this case, the FPS was changed from 15 to 10, but the codec wasn't changed because it was already set to h265.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>foreach ($camera in Select-Camera -AllowFolders -RemoveDuplicates) {
    $streams = $camera | Get-VmsCameraStream
 
    $streams | Where-Object LiveMode -eq 'Never' | Set-VmsCameraStream -LiveMode WhenNeeded
    $streams[0] | Set-VmsCameraStream -LiveDefault -Recorded
 
    if ($streams.Count -gt 1 ) {
        $streams[1..($streams.Count - 1)] | Set-VmsCameraStream -Disabled
    }
}</dev:code>
        <dev:remarks>
          <maml:para>Disable all except for one stream on the selected cameras. Before making the first stream the default live stream, and recorded stream, we ensure that none of the streams have a LiveMode value of "Never" by switching all enabled streams to a LiveMode value of "WhenNeeded".</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-vmscamerastream/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsLicense</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsLicense</command:noun>
      <maml:description>
        <maml:para>Sets the Milestone XProtect VMS software license code to a new software license code.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Useful for changing the software license code. You may do this when moving from a pilot license to a production license, or when upgrading or downgrading the licensed VMS edition.</maml:para>
      <maml:para>If you're importing a new "initial license file" for the same software license code, or importing an activated software license file downloaded from My Milestone, it is recommended to use Import-VmsLicense instead.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsLicense</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the path to an existing license file on disk. Typically this file has a .LIC extension.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the path to an existing license file on disk. Typically this file has a .LIC extension.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.LicenseInformation</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Support for license management in Milestone's MIP SDK / Configuration API was introduced in version 2020 R2. If the Management Server version is earlier than 2020 R2, this function will not work.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Set-VmsLicense -Path C:\path\to\license.lic</dev:code>
        <dev:remarks>
          <maml:para>Invokes the ChangeLicense method in Configuration API to import license.lic.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-vmslicense/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsSiteInfo</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsSiteInfo</command:noun>
      <maml:description>
        <maml:para>Sets the value for one Site Information property such as name, address, or administrator contact number.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This cmdlet is used to add or update values displayed in the Management Client under Site / Basics / Site Information, just under the License Information node.</maml:para>
      <maml:para>There are several predefined property names with keys like "address.Name", and the VMS allows you to add one or more values for the same field. For example, you could add multiple entries, or lines, for address, or phone number. Each line can be up to 256 characters in length.</maml:para>
      <maml:para>The lines are returned by Get-VmsSiteInfo and displayed in the Management Client in the order they were created. If you want to add a second value for a given property, you can include the `-Append` switch (see the examples.)</maml:para>
      <maml:para>In order for this command to remain flexible in the event the available fields change in the future, the parameters are simplified and accept a property name, and a value. The valid property names are available with tab or list completion, so you may type "-Property " and then press tab, or CTRL+Space, and the supported property names will be displayed. The currently available values as of XProtect VMS version 2022 R2 are...</maml:para>
      <maml:para>address.Name, address.Address, address.State, address.Phone, address.Country, address.ZipCode, admin.Name, admin.Address, admin.Phone, additional.AdditionalInfo</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsSiteInfo</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>Property</maml:name>
          <maml:description>
            <maml:para>Specifies the property name to add or update. The available property names are dynamically discovered from the Management Server and provided as argument completions using tab, or CTRL+Space.</maml:para>
            <maml:para>The values as of 2022 R2 are: address.Name, address.Address, address.State, address.Phone, address.Country, address.ZipCode, admin.Name, admin.Address, admin.Phone, additional.AdditionalInfo</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="none">
          <maml:name>Value</maml:name>
          <maml:description>
            <maml:para>Specifies the value for the given property name. The value can be any string up to 256 characters in length.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Append</maml:name>
          <maml:description>
            <maml:para>Specifies that if a value already exists for the specified Property, an additional line should be added for the same property name. This allows you to have two Address lines, and more than one phone number associated with a site.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Append</maml:name>
        <maml:description>
          <maml:para>Specifies that if a value already exists for the specified Property, an additional line should be added for the same property name. This allows you to have two Address lines, and more than one phone number associated with a site.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>Property</maml:name>
        <maml:description>
          <maml:para>Specifies the property name to add or update. The available property names are dynamically discovered from the Management Server and provided as argument completions using tab, or CTRL+Space.</maml:para>
          <maml:para>The values as of 2022 R2 are: address.Name, address.Address, address.State, address.Phone, address.Country, address.ZipCode, admin.Name, admin.Address, admin.Phone, additional.AdditionalInfo</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="1" aliases="none">
        <maml:name>Value</maml:name>
        <maml:description>
          <maml:para>Specifies the value for the given property name. The value can be any string up to 256 characters in length.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
Clear-VmsSiteInfo -Verbose
Set-VmsSiteInfo -Property address.Name -Value 'Milestone Systems' -Verbose
Set-VmsSiteInfo -Property address.Address -Value '5300 Meadows Rd STE 400' -Verbose
Set-VmsSiteInfo -Property address.Address -Value 'Lake Oswego, OR 97035' -Append -Verbose
Set-VmsSiteInfo -Property address.Country -Value 'United States' -Verbose
Set-VmsSiteInfo -Property address.Phone -Value '+1 503-350-1100' -Verbose</dev:code>
        <dev:remarks>
          <maml:para>After connecting to the Management Server, we clear the site information and set the name, address, and phone number for the site. Notice that instead of using the address.State and address.ZipCode fields, we chose to enter the city, state and zipcode as a second address.Address property by including the -Append switch. Without the -Append switch, the second address.Address value would have replaced the first.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code># Export current site's site info to csv
Get-VmsSiteInfo | Export-Csv ~\Desktop\siteinfo.csv
 
# Update the site info on a different site to be identical
Clear-VmsSiteInfo -Verbose
Import-Csv ~\Desktop\siteinfo.csv | Set-VmsSiteInfo -Append -Verbose</dev:code>
        <dev:remarks>
          <maml:para>This example shows how you might export the site information, and then import that information on a different site. On the new site, we first use Clear-VmsSiteInfo to ensure that we don't add new data to existing site info properties. Then we import the rows from the csv file which as the columns "DisplayName", "Property", and "Value" by default because that is the name of the properties returned by Get-VmsSiteInfo.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-vmssiteinfo/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsView</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsView</command:noun>
      <maml:description>
        <maml:para>Sets properties of an existing XProtect Smart Client view.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Sets properties of an existing view.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsView</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>View</maml:name>
          <maml:description>
            <maml:para>Specifies the view to be updated. It is recommended to use Get-VmsView to retrieve a value for this parameter.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">View</command:parameterValue>
          <dev:type>
            <maml:name>View</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies a new name of the view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies a new description for the view.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>Shortcut</maml:name>
          <maml:description>
            <maml:para>Specifies a numeric shortcut for accessing the view in XProtect Smart Client using the keyboard shortcut "* [shortcut] ENTER".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
          <maml:name>ViewItemDefinition</maml:name>
          <maml:description>
            <maml:para>Specifies an array of strings containing the ViewItemDefinitionXml content to place in the respective view item within the view. It is recommended to inspect existing views using Get-VmsView to determine the necessary XML schema for the view item definitions.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the modified view should be passed through to the pipeline or out to the terminal.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies a new description for the view.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies a new name of the view.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the modified view should be passed through to the pipeline or out to the terminal.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
        <maml:name>Shortcut</maml:name>
        <maml:description>
          <maml:para>Specifies a numeric shortcut for accessing the view in XProtect Smart Client using the keyboard shortcut "* [shortcut] ENTER".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>View</maml:name>
        <maml:description>
          <maml:para>Specifies the view to be updated. It is recommended to use Get-VmsView to retrieve a value for this parameter.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">View</command:parameterValue>
        <dev:type>
          <maml:name>View</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="4" aliases="none">
        <maml:name>ViewItemDefinition</maml:name>
        <maml:description>
          <maml:para>Specifies an array of strings containing the ViewItemDefinitionXml content to place in the respective view item within the view. It is recommended to inspect existing views using Get-VmsView to determine the necessary XML schema for the view item definitions.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.View</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
foreach ($view in Get-VmsView) {
    $updateView = $false
    foreach ($viewItem in $view.ViewItemChildItems) {
        $xml = [xml]$viewItem.ViewItemDefinitionXml
        if ($xml.viewitem.type -ne 'VideoOS.RemoteClient.Application.Data.ContentTypes.CameraContentType.CameraViewItem, VideoOS.RemoteClient.Application') {
            continue
        }
        $attribNode = $xml.viewitem.iteminfo.Attributes['imagequality']
        if ($null -ne $attribNode -and $attribNode.Value -ne '100') {
            $attribNode.Value = '100'
            $updateView = $true
        }
        $propNode = $xml.viewitem.properties.property | Where-Object name -eq 'imagequality'
        if ($null -ne $propNode -and $propNode.Value -ne '100') {
            $propNode.Value = '100'
            $updateView = $true
        }
        $viewItem.ViewItemDefinitionXml = $xml.OuterXml
    }
 
    if ($updateView) {
        $view | Set-VmsView -ViewItemDefinition $view.ViewItemChildItems.ViewItemDefinitionXml -Verbose
    }
}</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we enumerate through all views in all public view groups (and the current user's private view group) recursively. If any views are found with one or more view items with an image quality other than "Full", the quality is reset to 100 or "Full" and the view is updated.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsViewGroup</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsViewGroup</command:noun>
      <maml:description>
        <maml:para>Sets properties of an existing XProtect Smart Client view group.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This command is used to update the name or description of any top-level or child view group. Note that the description is currently only displayed in Management Client for top-level view groups. The descriptions of nested child view groups are not used by XProtect Smart Client.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsViewGroup</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>ViewGroup</maml:name>
          <maml:description>
            <maml:para>The view group to be updated. Typically retrieved using Get-VmsViewGroup.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
          <dev:type>
            <maml:name>ViewGroup</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Name</maml:name>
          <maml:description>
            <maml:para>Specifies a new name for the view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Description</maml:name>
          <maml:description>
            <maml:para>Specifies a new description for the view group.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the modified view group should be returned to the pipeline.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Description</maml:name>
        <maml:description>
          <maml:para>Specifies a new description for the view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Name</maml:name>
        <maml:description>
          <maml:para>Specifies a new name for the view group.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the modified view group should be returned to the pipeline.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>ViewGroup</maml:name>
        <maml:description>
          <maml:para>The view group to be updated. Typically retrieved using Get-VmsViewGroup.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">ViewGroup</command:parameterValue>
        <dev:type>
          <maml:name>ViewGroup</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VideoOS.Platform.ConfigurationItems.ViewGroup</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$viewGroup = New-VmsViewGroup -Name 'MilestonePSTools Example' -Force
$viewGroup | Set-VmsViewGroup -Name 'Example 1' -PassThru
$viewGroup | Remove-VmsViewGroup</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we create a view group to test with. On the third line, the view group is renamed and thanks to the -PassThru switch, we see the updated view group properties in the terminal.</maml:para>
          <maml:para>Finally, we clean up by removing the newly created view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-VmsViewGroupAcl</command:name>
      <command:verb>Set</command:verb>
      <command:noun>VmsViewGroupAcl</command:noun>
      <maml:description>
        <maml:para>Sets the security permissions for one or more XProtect Smart Client view groups.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The permissions for a role on a given view group can be retrieved using the `Get-VmsViewGroupAcl` command. After modifying the SecurityAttributes property of the VmsViewGroupAcl object (see examples), you can pass the ACL to this command to push the changes to the Management Server.</maml:para>
      <maml:para>"GENERIC_READ" enables the right to see the view group in the clients, Management Client, or through MIP integrations such as MilestonePSTools.</maml:para>
      <maml:para>"GENERIC_WRITE" enables the right to edit properties of view groups in Management Client, or through MIP integrations such as MilestonePSTools.</maml:para>
      <maml:para>"DELETE" enables the right to delete view groups in Management Client, or through MIP integrations such as MilestonePSTools.</maml:para>
      <maml:para>"OPERATE" enables the right to modify view groups in XProtect Smart Client such as to create and delete subgroups and views.</maml:para>
      <maml:para>Note: Permissions on private view groups can not be modified.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-VmsViewGroupAcl</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
          <maml:name>ViewGroupAcl</maml:name>
          <maml:description>
            <maml:para>The modified object returned from calling Get-VmsViewGroupAcl.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">VmsViewGroupAcl[]</command:parameterValue>
          <dev:type>
            <maml:name>VmsViewGroupAcl[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="0" aliases="none">
        <maml:name>ViewGroupAcl</maml:name>
        <maml:description>
          <maml:para>The modified object returned from calling Get-VmsViewGroupAcl.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">VmsViewGroupAcl[]</command:parameterValue>
        <dev:type>
          <maml:name>VmsViewGroupAcl[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>None</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Object</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>Connect-ManagementServer -ShowDialog -AcceptEula
$role = Get-role -Name 'MilestonePSTools' -ErrorAction Ignore
if ($null -eq $role) {
    $role = Add-Role -Name 'MilestonePSTools'
}
$viewGroup = New-VmsViewGroup -Name 'MilestonePSTools' -Force
$acl = $viewGroup | Get-VmsViewGroupAcl -Role $role
foreach ($key in @($acl.SecurityAttributes.Keys)) {
    $acl.SecurityAttributes[$key] = 'True'
}
$acl | Set-VmsViewGroupAcl -Verbose
 
&lt;# OUTPUT
  VERBOSE: Performing the operation "Updating security permissions for role MilestonePSTools" on target "View group "MilestonePSTools"".
  VERBOSE: Performing the operation "Changing OPERATE from False to True" on target "View group "MilestonePSTools"".
  VERBOSE: Performing the operation "Changing GENERIC_READ from False to True" on target "View group "MilestonePSTools"".
  VERBOSE: Performing the operation "Changing DELETE from False to True" on target "View group "MilestonePSTools"".
  VERBOSE: Performing the operation "Changing GENERIC_WRITE from False to True" on target "View group "MilestonePSTools"".
  VERBOSE: Performing the operation "Saving security permission changes for role MilestonePSTools" on target "View group "MilestonePSTools"".
#&gt;</dev:code>
        <dev:remarks>
          <maml:para>After ensuring there is an open connection to the Management Server, we retrieve a role named "MilestonePSTools" or create one if it doesn't exist. Then we create a new view group with the same name. If it already exists, no changes are made and we return the existing view group. Next, we get the ACL for the MilestonePSTools view group and the matching role, and ensure all security attributes are set to 'True' before updating the permissions for the view group on the Management Server.</maml:para>
          <maml:para>With verbose output, we can see each modification made, if any. If no changes need to be made, you will see only the "Updating securiy permissions..." message.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>$role = Get-role -Name 'MilestonePSTools' -ErrorAction Ignore
if ($null -eq $role) {
    $role = Add-Role -Name 'MilestonePSTools'
}
foreach ($viewGroup in Get-VmsViewGroup) {
    if ($viewGroup.DisplayName -eq 'Private') {
        # We can not modify private view group permissions
        continue
    }
    $acl = $viewGroup | Get-VmsViewGroupAcl -Role $role
    $acl.SecurityAttributes.GENERIC_READ = 'True'
    $acl.SecurityAttributes.OPERATE = 'True'
    $acl.SecurityAttributes.GENERIC_WRITE = 'False'
    $acl.SecurityAttributes.DELETE = 'False'
    $acl | Set-VmsViewGroupAcl -Verbose
}</dev:code>
        <dev:remarks>
          <maml:para>In this example we get, or create a role named "MilestonePSTools", and give the role permission to see and modify the contents of all view groups in XProtect Smart Client. At the same time, we ensure the role cannot rename or delete the top-level view group.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>View Group Permissions</maml:linkText>
        <maml:uri>https://doc.milestonesys.com/latest/en-us/standard_features/sf_mc/sf_ui/mc_roles_security.htm#ViewGrouptabroles</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Set-XProtectCertificate</command:name>
      <command:verb>Set</command:verb>
      <command:noun>XProtectCertificate</command:noun>
      <maml:description>
        <maml:para>Sets the certificate to use for a given Milestone XProtect VMS service</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Sets the certificate to use for a given Milestone XProtect VMS service. Compatible Milestone components include XProtect Management Server, Recording Server, and Mobile Server.</maml:para>
      <maml:para>The Milestone Server Configurator CLI is used to apply the certificate, and CLI support was introduced in version 2020 R3. If you're running an older version of Milestone XProtect software, you must upgrade to at least version 2020 R3 to use this function.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Set-XProtectCertificate</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Disable</maml:name>
          <maml:description>
            <maml:para>Specifies that encryption for the specified Milestone XProtect service should be disabled</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the Server Configurator process should be terminated if it's currently running</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ServerConfiguratorPath</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Milestone Server Configurator executable. The default location is C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>VmsComponent</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone component on which to update the certificate - Server: Applies to communication between Management Server and Recording Server, as well as client connections to the HTTPS port for the Management Server.</maml:para>
            <maml:para>- StreamingMedia: Applies to all connections to Recording Servers.</maml:para>
            <maml:para>Typically on port 7563. - MobileServer: Applies to HTTPS connections to the Milestone Mobile Server.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Server</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">StreamingMedia</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">MobileServer</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Set-XProtectCertificate</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Force</maml:name>
          <maml:description>
            <maml:para>Specifies that the Server Configurator process should be terminated if it's currently running</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RemoveOldCert</maml:name>
          <maml:description>
            <maml:para>Specifies that all certificates issued to</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>ServerConfiguratorPath</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the Milestone Server Configurator executable. The default location is C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
          <maml:name>Thumbprint</maml:name>
          <maml:description>
            <maml:para>Specifies the thumbprint of the certificate to apply to Milestone XProtect service</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UserName</maml:name>
          <maml:description>
            <maml:para>Specifies the Windows user account for which read access to the private key is required</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>VmsComponent</maml:name>
          <maml:description>
            <maml:para>Specifies the Milestone component on which to update the certificate - Server: Applies to communication between Management Server and Recording Server, as well as client connections to the HTTPS port for the Management Server.</maml:para>
            <maml:para>- StreamingMedia: Applies to all connections to Recording Servers.</maml:para>
            <maml:para>Typically on port 7563. - MobileServer: Applies to HTTPS connections to the Milestone Mobile Server.</maml:para>
          </maml:description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Server</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">StreamingMedia</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">MobileServer</command:parameterValue>
          </command:parameterValueGroup>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Disable</maml:name>
        <maml:description>
          <maml:para>Specifies that encryption for the specified Milestone XProtect service should be disabled</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Force</maml:name>
        <maml:description>
          <maml:para>Specifies that the Server Configurator process should be terminated if it's currently running</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RemoveOldCert</maml:name>
        <maml:description>
          <maml:para>Specifies that all certificates issued to</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>ServerConfiguratorPath</maml:name>
        <maml:description>
          <maml:para>Specifies the path to the Milestone Server Configurator executable. The default location is C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>C:\Program Files\Milestone\Server Configurator\ServerConfigurator.exe</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="named" aliases="none">
        <maml:name>Thumbprint</maml:name>
        <maml:description>
          <maml:para>Specifies the thumbprint of the certificate to apply to Milestone XProtect service</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>UserName</maml:name>
        <maml:description>
          <maml:para>Specifies the Windows user account for which read access to the private key is required</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>VmsComponent</maml:name>
        <maml:description>
          <maml:para>Specifies the Milestone component on which to update the certificate - Server: Applies to communication between Management Server and Recording Server, as well as client connections to the HTTPS port for the Management Server.</maml:para>
          <maml:para>- StreamingMedia: Applies to all connections to Recording Servers.</maml:para>
          <maml:para>Typically on port 7563. - MobileServer: Applies to HTTPS connections to the Milestone Mobile Server.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para>Use the Verbose switch to see the command-line arguments provided to the Server Configurator utility.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Set-XProtectCertificate -VmsComponent MobileServer -Thumbprint $thumbprint -RemoveOldCert -Force</dev:code>
        <dev:remarks>
          <maml:para>Sets the Milestone Mobile Server to use the certificate with thumbprint matching the string in the $thumbprint variable and if successfull, it removes any other certificates with a matching subject name from the Cert:\LocalMachine\My certificate store. Since the Force switch is provided, the Server Configurator will be closed if it's currently open.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Set-XProtectCertificate -VmsComponent MobileServer -Disable -Force</dev:code>
        <dev:remarks>
          <maml:para>Kills the Server Configurator process if it's currently running, then disables encryption for the Milestone Mobile Server.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/set-xprotectcertificate/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Start-VmsHardwareScan</command:name>
      <command:verb>Start</command:verb>
      <command:noun>VmsHardwareScan</command:noun>
      <maml:description>
        <maml:para>Starts either an express, or a manual hardware scan on one or more recording servers</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The hardware scan process allows you to discover cameras using the "Express" parameter, or check specific camera IPs or ranges to see if any cameras matching one or more drivers/credentials are found. The resulting VmsHardwareScanResult object contains all the information needed for Add-VmsHardware to add the camera to the recording server.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Start-VmsHardwareScan</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Address</maml:name>
          <maml:description>
            <maml:para>Specifies the IP or HTTP/HTTPS URI to scan.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Uri[]</command:parameterValue>
          <dev:type>
            <maml:name>Uri[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>@()</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Cidr</maml:name>
          <maml:description>
            <maml:para>Specifies a range of IPv4 or IPv6 addresses to scan in CIDR notation. Example: 192.168.1.0/24 for 192.168.1.1 - 192.168.1.254.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Credential</maml:name>
          <maml:description>
            <maml:para>Specifies the credential to use when scanning for cameras.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">PSCredential[]</command:parameterValue>
          <dev:type>
            <maml:name>PSCredential[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DriverFamily</maml:name>
          <maml:description>
            <maml:para>Specifies a device driver group name or "family" such as "Axis", "Bosch" or "Milestone". All applicable device driver ID's will be discovered automatically.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>DriverNumber</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Milestone device drivers to scan for. It's recommended to always provide at least one driver and the fewer the better/faster the scan.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32[]</command:parameterValue>
          <dev:type>
            <maml:name>Int32[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>@()</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>End</maml:name>
          <maml:description>
            <maml:para>Specifies the end of an IPv4 or IPv6 range to scan.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">IPAddress</command:parameterValue>
          <dev:type>
            <maml:name>IPAddress</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>HttpPort</maml:name>
          <maml:description>
            <maml:para>Specifies an alternate HTTP/HTTPS port to use in case you don't use the defaults of 80/443.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>80</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the Milestone "Tasks" should be returned to the pipeline immediately instead of the default behavior of waiting for all scan operations to complete and returning a VmsHardwareScanResult object.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Recording Server objects on which to run hardware scans. Scans on multiple recorders can be run in parallel.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Start</maml:name>
          <maml:description>
            <maml:para>Specifies the start of an IPv4 or IPv6 range to scan.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">IPAddress</command:parameterValue>
          <dev:type>
            <maml:name>IPAddress</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseDefaultCredentials</maml:name>
          <maml:description>
            <maml:para>Specifies to use the driver default credentials if applicable.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseHttps</maml:name>
          <maml:description>
            <maml:para>Specifies that a secure HTTPS connection should be made to cameras during the scan instead of an HTTP connection. If you provide a full uri like https://192.168.1.1 in the Address parameter, then this property is redundant. However if you choose to perform a range scan, this is how you would specify which HTTP scheme to use during the scan.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Start-VmsHardwareScan</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Credential</maml:name>
          <maml:description>
            <maml:para>Specifies the credential to use when scanning for cameras.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">PSCredential[]</command:parameterValue>
          <dev:type>
            <maml:name>PSCredential[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Express</maml:name>
          <maml:description>
            <maml:para>Specifies that the Express hardware scan option should be used. This can be considerably faster than a range scan, but it can also fail to discover cameras under certian network conditions.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>PassThru</maml:name>
          <maml:description>
            <maml:para>Specifies that the Milestone "Tasks" should be returned to the pipeline immediately instead of the default behavior of waiting for all scan operations to complete and returning a VmsHardwareScanResult object.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>RecordingServer</maml:name>
          <maml:description>
            <maml:para>Specifies one or more Recording Server objects on which to run hardware scans. Scans on multiple recorders can be run in parallel.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
          <dev:type>
            <maml:name>RecordingServer[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseDefaultCredentials</maml:name>
          <maml:description>
            <maml:para>Specifies to use the driver default credentials if applicable.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>UseHttps</maml:name>
          <maml:description>
            <maml:para>Specifies that a secure HTTPS connection should be made to cameras during the scan instead of an HTTP connection. If you provide a full uri like https://192.168.1.1 in the Address parameter, then this property is redundant. However if you choose to perform a range scan, this is how you would specify which HTTP scheme to use during the scan.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Address</maml:name>
        <maml:description>
          <maml:para>Specifies the IP or HTTP/HTTPS URI to scan.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Uri[]</command:parameterValue>
        <dev:type>
          <maml:name>Uri[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>@()</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Cidr</maml:name>
        <maml:description>
          <maml:para>Specifies a range of IPv4 or IPv6 addresses to scan in CIDR notation. Example: 192.168.1.0/24 for 192.168.1.1 - 192.168.1.254.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Credential</maml:name>
        <maml:description>
          <maml:para>Specifies the credential to use when scanning for cameras.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">PSCredential[]</command:parameterValue>
        <dev:type>
          <maml:name>PSCredential[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DriverFamily</maml:name>
        <maml:description>
          <maml:para>Specifies a device driver group name or "family" such as "Axis", "Bosch" or "Milestone". All applicable device driver ID's will be discovered automatically.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DriverNumber</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Milestone device drivers to scan for. It's recommended to always provide at least one driver and the fewer the better/faster the scan.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32[]</command:parameterValue>
        <dev:type>
          <maml:name>Int32[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>@()</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>End</maml:name>
        <maml:description>
          <maml:para>Specifies the end of an IPv4 or IPv6 range to scan.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">IPAddress</command:parameterValue>
        <dev:type>
          <maml:name>IPAddress</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Express</maml:name>
        <maml:description>
          <maml:para>Specifies that the Express hardware scan option should be used. This can be considerably faster than a range scan, but it can also fail to discover cameras under certian network conditions.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>HttpPort</maml:name>
        <maml:description>
          <maml:para>Specifies an alternate HTTP/HTTPS port to use in case you don't use the defaults of 80/443.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>80</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>PassThru</maml:name>
        <maml:description>
          <maml:para>Specifies that the Milestone "Tasks" should be returned to the pipeline immediately instead of the default behavior of waiting for all scan operations to complete and returning a VmsHardwareScanResult object.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
        <maml:name>RecordingServer</maml:name>
        <maml:description>
          <maml:para>Specifies one or more Recording Server objects on which to run hardware scans. Scans on multiple recorders can be run in parallel.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">RecordingServer[]</command:parameterValue>
        <dev:type>
          <maml:name>RecordingServer[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Start</maml:name>
        <maml:description>
          <maml:para>Specifies the start of an IPv4 or IPv6 range to scan.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">IPAddress</command:parameterValue>
        <dev:type>
          <maml:name>IPAddress</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>UseDefaultCredentials</maml:name>
        <maml:description>
          <maml:para>Specifies to use the driver default credentials if applicable.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>UseHttps</maml:name>
        <maml:description>
          <maml:para>Specifies that a secure HTTPS connection should be made to cameras during the scan instead of an HTTP connection. If you provide a full uri like https://192.168.1.1 in the Address parameter, then this property is redundant. However if you choose to perform a range scan, this is how you would specify which HTTP scheme to use during the scan.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>VmsHardwareScanResult</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Get-RecordingServer | Out-GridView -OutputMode Single | Start-VmsHardwareScan -Express</dev:code>
        <dev:remarks>
          <maml:para>Prompts the user to select one Recording Server from a list, and then initiates an express hardware scan from that Recording Server. The results when displayed in a PowerShell terminal will appear as follows. Note that there are additional properties available that are not displayed by the default formatter.</maml:para>
          <maml:para>HardwareAddress UserName MacAddress Validated ExistsLocally ExistsGlobally RecordingServer --------------- -------- ---------- --------- ------------- -------------- --------------- http://192.168.1.1/ admin 123456789123 True True False TestServer http://192.168.1.2/ admin 123456789124 True False False TestServer http://192.168.1.3/ admin 123456789125 False False False TestServer</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>$recorder | Start-VmsHardwareScan -Start 192.168.1.1 -End 192.168.1.10 -DriverFamily Axis -Credential (Get-Credential), (Get-Credential) -UseDefaultCredentials</dev:code>
        <dev:remarks>
          <maml:para>Prompts the user for two sets of credentials to try against a range of 10 cameras on the recording server in the $recorder variable. All drivers under the Axis group name will be tried. A result for each address scanned will be returned to the pipeline even if no camera was found. The results will look similar to Example #1 for cameras that are found, while the entries for unresponsive IP addresses will look like the following table.</maml:para>
          <maml:para>HardwareAddress UserName MacAddress Validated ExistsLocally ExistsGlobally RecordingServer --------------- -------- ---------- --------- ------------- -------------- --------------- False False False TestServer False False False TestServer False False False TestServer</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 3 --------------------------</maml:title>
        <dev:code>$recorder | Start-VmsHardwareScan -Cidr 192.168.1.0/30 -DriverNumber 707 -UseDefaultCredentials</dev:code>
        <dev:remarks>
          <maml:para>A range of 4 IP addresses is defined using CIDR notation and the default driver credentials for the "Infinova G/T/H PTZ Series" driver will be used against each IP. The first and last IP of the CIDR range will be skipped since those represent the network address and broadcast address for the subnet.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/start-vmshardwarescan/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Wait-VmsTask</command:name>
      <command:verb>Wait</command:verb>
      <command:noun>VmsTask</command:noun>
      <maml:description>
        <maml:para>Polls a Milestone XProtect Task item until the task completes.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Some long running operations like hardware scans and adding hardware return a "Task" item which provides status and progress information, and when the status of the task reaches either Error or Success, the properties of the task will contain useful information about a new item or other data depending on the operation. Or if there was an error, the ErrorCode and ErrorText properties will be filled in.</maml:para>
      <maml:para>Wait-VmsTask provides you with a way to monitor one or more tasks simultaneously, and block until all tasks have completed. If $ProgressPreference is set to Continue (default) then you will also get a progress bar showing a rough % complete and estimated remaining time value.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Wait-VmsTask</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
          <maml:name>Path</maml:name>
          <maml:description>
            <maml:para>Specifies the Task path in Milestone's Configuration API format. Example: Task[100].</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Title</maml:name>
          <maml:description>
            <maml:para>Specifies the activity name to display in the progress bar. The default is "Waiting for VMS Task(s) to complete".</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Cleanup</maml:name>
          <maml:description>
            <maml:para>Specifies whether the "TaskCleanup" method should be called on each task as it completes.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Cleanup</maml:name>
        <maml:description>
          <maml:para>Specifies whether the "TaskCleanup" method should be called on each task as it completes.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="0" aliases="none">
        <maml:name>Path</maml:name>
        <maml:description>
          <maml:para>Specifies the Task path in Milestone's Configuration API format. Example: Task[100].</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Title</maml:name>
        <maml:description>
          <maml:para>Specifies the activity name to display in the progress bar. The default is "Waiting for VMS Task(s) to complete".</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes />
    <command:returnValues />
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 1 --------------------------</maml:title>
        <dev:code>Wait-VmsTask -Path ($recorder | Start-VmsHardwareScan -Express -PassThru).Path -Cleanup</dev:code>
        <dev:remarks>
          <maml:para>Starts an "express" hardware scan on the Recording Server specified in the $recorder variable. The Start-VmsHardwareScan normally calls Wait-VmsTask for you, but with the PassThru parameter the scan will be started and the task returned to you. We then pass all the paths into the Path parameter on Wait-VmsTask and when the tasks complete, they will be cleaned up and returned to the pipeline for the next step.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Help</maml:linkText>
        <maml:uri>https://www.milestonepstools.com/functions/wait-vmstask/</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
</helpItems>