en-GB/Elizium.Loopz-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-Appendage</command:name>
      <command:verb>Add</command:verb>
      <command:noun>Appendage</command:noun>
      <maml:description>
        <maml:para>The core appendage action function principally used by Rename-Many. Adds either a prefix or suffix to the Value.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a new string that reflects the addition of an appendage, which can be Prepend or Append. The appendage itself can be static text, or can act like a formatter supporting Copy named group reference s, if present. The user can decide to reference the whole Copy match with ${_c}, or if it contains named captures, these can be referenced inside the appendage as ${&lt;group-name-ref&gt;}</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Add-Appendage</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The source value against which regular expressions are applied.</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>Appendage</maml:name>
          <maml:Description>
            <maml:para>String to either prepend or append to Value. Supports named captures inside Copy regex 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="2" aliases="none">
          <maml:name>Type</maml:name>
          <maml:Description>
            <maml:para>Denotes the appendage type, can be 'Prepend' or 'Append'.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Prepend</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Append</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="3" aliases="none">
          <maml:name>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to $Value, indicating a portion which should be copied and inserted into the Appendage. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Appendage.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>CopyOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l</maml:para>
            <maml:para>* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors.</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>Appendage</maml:name>
        <maml:Description>
          <maml:para>String to either prepend or append to Value. Supports named captures inside Copy regex 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="False" position="3" aliases="none">
        <maml:name>Copy</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to $Value, indicating a portion which should be copied and inserted into the Appendage. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Appendage.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>CopyOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l</maml:para>
          <maml:para>* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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>Diagnose</maml:name>
        <maml:Description>
          <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors.</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>Type</maml:name>
        <maml:Description>
          <maml:para>Denotes the appendage type, can be 'Prepend' or 'Append'.</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="0" aliases="none">
        <maml:name>Value</maml:name>
        <maml:Description>
          <maml:para>The source value against which regular expressions are applied.</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.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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Edit-RemoveSingleSubString</command:name>
      <command:verb>Edit</command:verb>
      <command:noun>RemoveSingleSubString</command:noun>
      <maml:description>
        <maml:para>Removes a sub-string from the target string provided.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Either the first or the last occurrence of a single substring can be removed depending on whether the Last flag has been set.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Edit-RemoveSingleSubString</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Insensitive</maml:name>
          <maml:Description>
            <maml:para>Flag to indicate if the search is case sensitive or not. By default, search is case sensitive.</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>Last</maml:name>
          <maml:Description>
            <maml:para>Flag to indicate whether the last occurrence of a sub string is to be removed from the Target.</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>Subtract</maml:name>
          <maml:Description>
            <maml:para>The sub string to subtract from the Target.</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>Target</maml:name>
          <maml:Description>
            <maml:para>The string from which the subtraction is to occur.</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>Insensitive</maml:name>
        <maml:Description>
          <maml:para>Flag to indicate if the search is case sensitive or not. By default, search is case sensitive.</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>Last</maml:name>
        <maml:Description>
          <maml:para>Flag to indicate whether the last occurrence of a sub string is to be removed from the Target.</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>Subtract</maml:name>
        <maml:Description>
          <maml:para>The sub string to subtract from the Target.</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>Target</maml:name>
        <maml:Description>
          <maml:para>The string from which the subtraction is to occur.</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.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>$result = edit-RemoveSingleSubString -Target "Twilight and Willow's excellent adventure" -Subtract "excellent ";</dev:code>
        <dev:remarks>
          <maml:para>Returns "Twilight and Willow's adventure"</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Format-BooleanCellValue</command:name>
      <command:verb>Format</command:verb>
      <command:noun>BooleanCellValue</command:noun>
      <maml:description>
        <maml:para>Table Render callback that can be passed into Show-AsTable</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>For table cells containing boolean fields, this callback function will render the cell with alternative values other than 'true' or 'false'. Typically, the client would set the alternative representation of these boolean values (the default values are emoji values 'SWITCH-ON'/'SWITCH-OFF') in the table options.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Format-BooleanCellValue</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The original boolean value in string form.</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>TableOptions</maml:name>
          <maml:Description>
            <maml:para>The PSCustomObject that contains the alternative boolean values (./Values/True and ./Values/False)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>TableOptions</maml:name>
        <maml:Description>
          <maml:para>The PSCustomObject that contains the alternative boolean values (./Values/True and ./Values/False)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Value</maml:name>
        <maml:Description>
          <maml:para>The original boolean value in string form.</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.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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Format-Escape</command:name>
      <command:verb>Format</command:verb>
      <command:noun>Escape</command:noun>
      <maml:description>
        <maml:para>Escapes the regular expression specified. This is just a wrapper around the .net regex::escape method, but gives the user a much easier way to invoke it from the command line.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Various functions in Loopz have parameters that accept a regular expression. This function gives the user an easy way to escape the regex, without them having to do this manually themselves which could be tricky to get right depending on their requirements. NB: an alternative to using the 'esc' function is to add a ~ to the start of the pattern. The tilde is not taken as part of the pattern and is stripped off. If a partial escape is required, then split the value into parts that require escaping and the other parts that don't.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Format-Escape</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Source</maml:name>
          <maml:Description>
            <maml:para>The source string to escape.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Source</maml:name>
        <maml:Description>
          <maml:para>The source string to escape.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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.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 (Use with Rename-Many command) -----------</maml:title>
        <dev:code>Rename-Many -Pattern $(esc('(123)'))</dev:code>
        <dev:remarks>
          <maml:para>Use the 'esc' alias with the Rename-Many command, escaping the regex characters in the Pattern definition.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------- EXAMPLE 2 (Use with Rename-Many command) -----------</maml:title>
        <dev:code>Rename-Many -Pattern '~(123)'</dev:code>
        <dev:remarks>
          <maml:para>Use a leading '~' in the pattern definition, to escape the whole value.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------- EXAMPLE 3 (Use with Rename-Many command) -----------</maml:title>
        <dev:code>Rename-Many -Pattern $(esc('(123)') + '(?&lt;n&gt;\d{3})')</dev:code>
        <dev:remarks>
          <maml:para>Partial escape defined by concatenating patterns individually escaped or not.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Format-StructuredLine</command:name>
      <command:verb>Format</command:verb>
      <command:noun>StructuredLine</command:noun>
      <maml:description>
        <maml:para>Helper function to make it easy to generate a line to be displayed.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>A structured line is some text that includes embedded colour instructions that will be interpreted by the Krayola krayon writer. This function behaves like a layout manager for a single line.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Format-StructuredLine</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Exchange</maml:name>
          <maml:Description>
            <maml:para>The exchange hashtable object.</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="False" position="1" aliases="none">
          <maml:name>LineKey</maml:name>
          <maml:Description>
            <maml:para>The key used to index into the $Exchange hashtable to denote the core line.</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>CrumbKey</maml:name>
          <maml:Description>
            <maml:para>The key used to index into the $Exchange hashtable to denote which crumb is 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="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>MessageKey</maml:name>
          <maml:Description>
            <maml:para>The key used to index into the $Exchange hashtable to denote what message to display.</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>Krayon</maml:name>
          <maml:Description>
            <maml:para>The writer object which contains the Krayola theme.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Krayon</command:parameterValue>
          <dev:type>
            <maml:name>Krayon</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="5" aliases="none">
          <maml:name>Options</maml:name>
          <maml:Description>
            <maml:para>A PSCustomObject that allows further customisation of the structured line. Can contain the following fields:</maml:para>
            <maml:para>+ WingLength: The size of the lead and tail portions of the line + MinimumFlexSize: The smallest size that the flex part can shrink to, to accommodate the message. If the message is so large that is pushes up against the minimal flex size it will be truncated according to the presence of Truncate switch + Ellipses: When message truncation occurs, the ellipses string is used to indicate that the message has been truncated. + WithLead: boolean flag to indicate whether a leading wing is displayed which would precede the crumb. By default, there is no leading wing.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Truncate</maml:name>
          <maml:Description>
            <maml:para>switch parameter to indicate whether the message is truncated to fit the line length.</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>CrumbKey</maml:name>
        <maml:Description>
          <maml:para>The key used to index into the $Exchange hashtable to denote which crumb is 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="False" position="0" aliases="none">
        <maml:name>Exchange</maml:name>
        <maml:Description>
          <maml:para>The exchange hashtable object.</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="4" aliases="none">
        <maml:name>Krayon</maml:name>
        <maml:Description>
          <maml:para>The writer object which contains the Krayola theme.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Krayon</command:parameterValue>
        <dev:type>
          <maml:name>Krayon</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>LineKey</maml:name>
        <maml:Description>
          <maml:para>The key used to index into the $Exchange hashtable to denote the core line.</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>MessageKey</maml:name>
        <maml:Description>
          <maml:para>The key used to index into the $Exchange hashtable to denote what message to display.</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="5" aliases="none">
        <maml:name>Options</maml:name>
        <maml:Description>
          <maml:para>A PSCustomObject that allows further customisation of the structured line. Can contain the following fields:</maml:para>
          <maml:para>+ WingLength: The size of the lead and tail portions of the line + MinimumFlexSize: The smallest size that the flex part can shrink to, to accommodate the message. If the message is so large that is pushes up against the minimal flex size it will be truncated according to the presence of Truncate switch + Ellipses: When message truncation occurs, the ellipses string is used to indicate that the message has been truncated. + WithLead: boolean flag to indicate whether a leading wing is displayed which would precede the crumb. By default, there is no leading wing.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Truncate</maml:name>
        <maml:Description>
          <maml:para>switch parameter to indicate whether the message is truncated to fit the line length.</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.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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-AsTable</command:name>
      <command:verb>Get</command:verb>
      <command:noun>AsTable</command:noun>
      <maml:description>
        <maml:para>Selects the table header and data from source and meta data.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The client can override the behaviour to perform custom evaluation of table cell values. The default will space pad the cell value and align according the table options (./HeaderAlign and ./ValueAlign).</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-AsTable</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>MetaData</maml:name>
          <maml:Description>
            <maml:para>Hashtable instance which maps column titles to a PSCustomObject instance that contains display information pertaining to that column. The object must contain the following members:</maml:para>
            <maml:para>- FieldName: the name of the column</maml:para>
            <maml:para>- Max: the size of the largest value found in the table data for that column</maml:para>
            <maml:para>- Type: the type of data represented by that column</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="1" aliases="none">
          <maml:name>TableData</maml:name>
          <maml:Description>
            <maml:para>Hashtable containing the table data.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject[]</command:parameterValue>
          <dev:type>
            <maml:name>PSObject[]</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>Options</maml:name>
          <maml:Description>
            <maml:para>The table display options (See Get-TableDisplayOptions)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Evaluate</maml:name>
          <maml:Description>
            <maml:para>A script-block allowing client defined cell rendering logic. The Render script-block contains the following parameters:</maml:para>
            <maml:para>- Value: the current value of the cell being rendered.</maml:para>
            <maml:para>- columnData: column meta data</maml:para>
            <maml:para>- isHeader: flag to indicate if the current cell being evaluated is a header, if false</maml:para>
            <maml:para>then it is a data cell. - Options: The table display options</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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="3" aliases="none">
        <maml:name>Evaluate</maml:name>
        <maml:Description>
          <maml:para>A script-block allowing client defined cell rendering logic. The Render script-block contains the following parameters:</maml:para>
          <maml:para>- Value: the current value of the cell being rendered.</maml:para>
          <maml:para>- columnData: column meta data</maml:para>
          <maml:para>- isHeader: flag to indicate if the current cell being evaluated is a header, if false</maml:para>
          <maml:para>then it is a data cell. - Options: The table display options</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>MetaData</maml:name>
        <maml:Description>
          <maml:para>Hashtable instance which maps column titles to a PSCustomObject instance that contains display information pertaining to that column. The object must contain the following members:</maml:para>
          <maml:para>- FieldName: the name of the column</maml:para>
          <maml:para>- Max: the size of the largest value found in the table data for that column</maml:para>
          <maml:para>- Type: the type of data represented by that column</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="2" aliases="none">
        <maml:name>Options</maml:name>
        <maml:Description>
          <maml:para>The table display options (See Get-TableDisplayOptions)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>TableData</maml:name>
        <maml:Description>
          <maml:para>Hashtable containing the table data.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject[]</command:parameterValue>
        <dev:type>
          <maml:name>PSObject[]</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.Collections.Hashtable</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns 2 hashtable instances inside an array, the first represents the headers and the second the table data.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-FieldMetaData</command:name>
      <command:verb>Get</command:verb>
      <command:noun>FieldMetaData</command:noun>
      <maml:description>
        <maml:para>Derives the meta data from the table data provided.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The source table data is just an array of PSCustomObjects where each object represents a row in the table. The meta data is required to format the table cells correctly so that each cell is properly aligned.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-FieldMetaData</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Data</maml:name>
          <maml:Description>
            <maml:para>Hashtable containing the table data.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject[]</command:parameterValue>
          <dev:type>
            <maml:name>PSObject[]</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="0" aliases="none">
        <maml:name>Data</maml:name>
        <maml:Description>
          <maml:para>Hashtable containing the table data.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject[]</command:parameterValue>
        <dev:type>
          <maml:name>PSObject[]</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>A hashtable of the metadata required to display a table.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-FormattedSignal</command:name>
      <command:verb>Get</command:verb>
      <command:noun>FormattedSignal</command:noun>
      <maml:description>
        <maml:para>Controls and standardises the way that signals are displayed.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This function enables the display of key/value pairs where the key includes an emoji. The value may also include the emoji depending on how the function is used. Generally, this function returns either a Pair object or a single string. The user can define a format string (or simply use the default) which controls how the signal is displayed. If the function is invoked without a Value, then a formatted string is returned, otherwise a pair (couplet) object is returned.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-FormattedSignal</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:Description>
            <maml:para>The name of the signal</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>Format</maml:name>
          <maml:Description>
            <maml:para>A string defining the format defining how the signal is displayed. Should contain either {0} representing the signal's emoji or {1} the label. They can appear as many time as is required, but there should be at least either one of these.</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>Value</maml:name>
          <maml:Description>
            <maml:para>A string defining the Value displayed when the signal is a Key/Value pair.</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>Signals</maml:name>
          <maml:Description>
            <maml:para>The signals hashtable collection from which to select the signal from.</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="4" aliases="none">
          <maml:name>CustomLabel</maml:name>
          <maml:Description>
            <maml:para>An alternative label to display overriding the signal's defined label.</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="5" aliases="none">
          <maml:name>EmojiOnlyFormat</maml:name>
          <maml:Description>
            <maml:para>When the switch EmojiOnly is enabled, EmojiOnlyFormat defines the format used to create the result. Should contain at least 1 occurrence of {1} representing the emoji.</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>EmojiAsValue</maml:name>
          <maml:Description>
            <maml:para>switch which changes the result so that the emoji appears as part of the value as opposed to the key.</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>EmojiOnly</maml:name>
          <maml:Description>
            <maml:para>Changes what is returned, to be a single value only, formatted as EmojiOnlyFormat.</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="4" aliases="none">
        <maml:name>CustomLabel</maml:name>
        <maml:Description>
          <maml:para>An alternative label to display overriding the signal's defined label.</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>EmojiAsValue</maml:name>
        <maml:Description>
          <maml:para>switch which changes the result so that the emoji appears as part of the value as opposed to the key.</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>EmojiOnly</maml:name>
        <maml:Description>
          <maml:para>Changes what is returned, to be a single value only, formatted as EmojiOnlyFormat.</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="5" aliases="none">
        <maml:name>EmojiOnlyFormat</maml:name>
        <maml:Description>
          <maml:para>When the switch EmojiOnly is enabled, EmojiOnlyFormat defines the format used to create the result. Should contain at least 1 occurrence of {1} representing the emoji.</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>Format</maml:name>
        <maml:Description>
          <maml:para>A string defining the format defining how the signal is displayed. Should contain either {0} representing the signal's emoji or {1} the label. They can appear as many time as is required, but there should be at least either one of these.</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="0" aliases="none">
        <maml:name>Name</maml:name>
        <maml:Description>
          <maml:para>The name of the signal</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>Signals</maml:name>
        <maml:Description>
          <maml:para>The signals hashtable collection from which to select the signal from.</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="2" aliases="none">
        <maml:name>Value</maml:name>
        <maml:Description>
          <maml:para>A string defining the Value displayed when the signal is a Key/Value pair.</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-InverseSubString</command:name>
      <command:verb>Get</command:verb>
      <command:noun>InverseSubString</command:noun>
      <maml:description>
        <maml:para>Performs the opposite of [string]::Substring.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns the remainder of that part of the substring denoted by the $StartIndex $Length.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-InverseSubString</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Source</maml:name>
          <maml:Description>
            <maml:para>The source string</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>Length</maml:name>
          <maml:Description>
            <maml:para>The number of characters in the sub-string.</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>Marker</maml:name>
          <maml:Description>
            <maml:para>A character used to mark the position of the sub-string. If the client specifies a marker, then this marker is inserted between the head and the tail.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
          <dev:type>
            <maml:name>Char</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>Split</maml:name>
          <maml:Description>
            <maml:para>When getting the inverse sub-string there are two elements that are returned, the head (prior to sub-string) and the tail, what comes after the sub-string. This switch indicates whether the function returns the head and tail as separate entities in an array, or should simply return the tail appended to the head.</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>StartIndex</maml:name>
          <maml:Description>
            <maml:para>The index of sub-string.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Length</maml:name>
        <maml:Description>
          <maml:para>The number of characters in the sub-string.</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>Marker</maml:name>
        <maml:Description>
          <maml:para>A character used to mark the position of the sub-string. If the client specifies a marker, then this marker is inserted between the head and the tail.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
        <dev:type>
          <maml:name>Char</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>Source</maml:name>
        <maml:Description>
          <maml:para>The source string</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>Split</maml:name>
        <maml:Description>
          <maml:para>When getting the inverse sub-string there are two elements that are returned, the head (prior to sub-string) and the tail, what comes after the sub-string. This switch indicates whether the function returns the head and tail as separate entities in an array, or should simply return the tail appended to the head.</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>StartIndex</maml:name>
        <maml:Description>
          <maml:para>The index of sub-string.</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: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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-IsLocked</command:name>
      <command:verb>Get</command:verb>
      <command:noun>IsLocked</command:noun>
      <maml:description>
        <maml:para>Utility function to determine whether the environment variable specified denotes that it is set to $true to indicate the associated function is in a locked state.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a boolean indicating the 'locked' status of the associated functionality. Eg, for the Rename-Many command, a user can only use it for real when it has been unlocked by setting it's associated environment variable 'LOOPZ_REMY_LOCKED' to $false.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-IsLocked</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Variable</maml:name>
          <maml:Description>
            <maml:para>The environment variable to check.</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>Variable</maml:name>
        <maml:Description>
          <maml:para>The environment variable to check.</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.Boolean</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-LargestLength</command:name>
      <command:verb>Get</command:verb>
      <command:noun>LargestLength</command:noun>
      <maml:description>
        <maml:para>Get the size of the largest string item in the collection.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Get the size of the largest string item in the collection.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-LargestLength</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>items</maml:name>
          <maml:Description>
            <maml:para>The source collection to get largest length of.</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="0" aliases="none">
        <maml:name>items</maml:name>
        <maml:Description>
          <maml:para>The source collection to get largest length of.</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-PaddedLabel</command:name>
      <command:verb>Get</command:verb>
      <command:noun>PaddedLabel</command:noun>
      <maml:description>
        <maml:para>Controls and standardises the way that signals are displayed.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Pads out a string with leading or trailing spaces depending on alignment.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-PaddedLabel</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Label</maml:name>
          <maml:Description>
            <maml:para>The string to be padded</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>Align</maml:name>
          <maml:Description>
            <maml:para>Left or right alignment of the label.</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>Width</maml:name>
          <maml:Description>
            <maml:para>Size of the field into which the label is to be placed.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Align</maml:name>
        <maml:Description>
          <maml:para>Left or right alignment of the label.</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>Label</maml:name>
        <maml:Description>
          <maml:para>The string to be padded</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>Width</maml:name>
        <maml:Description>
          <maml:para>Size of the field into which the label is to be placed.</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: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.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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-PartitionedPcoHash</command:name>
      <command:verb>Get</command:verb>
      <command:noun>PartitionedPcoHash</command:noun>
      <maml:description>
        <maml:para>Partitions a hash of PSCustomObject (Pco)s by a specified field name.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Given a hashtable whose values are PSCustomObjects, will return a hashtable of hashtables, keyed by the field specified. This effectively re-groups the hashtable entries based on a custom field. The first level hash in the result is keyed, by the field specified. The second level has is the original hash key. So given the original hash [ORIGINAL-KEY]=&gt;[PSCustomObject], after partitioning, the same PSCustomObject can be accessed, via 2 steps $outputHash[$Field][ORIGINAL-KEY].</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-PartitionedPcoHash</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Hash</maml:name>
          <maml:Description>
            <maml:para>The input hashtable to partition</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="False" position="1" aliases="none">
          <maml:name>Field</maml:name>
          <maml:Description>
            <maml:para>The name of the field to partition by</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="1" aliases="none">
        <maml:name>Field</maml:name>
        <maml:Description>
          <maml:para>The name of the field to partition by</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="0" aliases="none">
        <maml:name>Hash</maml:name>
        <maml:Description>
          <maml:para>The input hashtable to partition</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: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>A hashtable of hashtable keyed by the field specified.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-PlatformName</command:name>
      <command:verb>Get</command:verb>
      <command:noun>PlatformName</command:noun>
      <maml:description>
        <maml:para>Get the name of the operating system.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>There are multiple ways to get the OS type in PowerShell but they are convoluted and can return an unfriendly name such as 'Win32NT'. This command simply returns 'windows', 'linux' or 'mac', simples! This function is typically used alongside Invoke-ByPlatform and Resolve-ByPlatform.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-PlatformName</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-PsObjectField</command:name>
      <command:verb>Get</command:verb>
      <command:noun>PsObjectField</command:noun>
      <maml:description>
        <maml:para>Simplifies getting the value of a field from a PSCustomObject.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns the value of the specified field. If the field is missing, then the default is returned.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-PsObjectField</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Object</maml:name>
          <maml:Description>
            <maml:para>The object to get the field value from.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Field</maml:name>
          <maml:Description>
            <maml:para>The field to get value of.</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>Default</maml:name>
          <maml:Description>
            <maml:para>Default value to return if the $Field doesn't exist on the $Object.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Default</maml:name>
        <maml:Description>
          <maml:para>Default value to return if the $Field doesn't exist on the $Object.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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>Field</maml:name>
        <maml:Description>
          <maml:para>The field to get value of.</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="0" aliases="none">
        <maml:name>Object</maml:name>
        <maml:Description>
          <maml:para>The object to get the field value from.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-Signals</command:name>
      <command:verb>Get</command:verb>
      <command:noun>Signals</command:noun>
      <maml:description>
        <maml:para>Returns a copy of the Signals hashtable.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The signals returned include the user defined signal overrides.</maml:para>
      <maml:para>NOTE: 3rd party commands need to register their signal usage with the signal registry. This can be done using command Register-CommandSignals and would be best performed at module initialisation stage invoked at import time.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-Signals</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>SourceSignals</maml:name>
          <maml:Description>
            <maml:para>The hashtable instance containing the source signal definitions. The actual signals returned are derived from the source. Does not need to be specified by the client as it is defaulted.</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="1" aliases="none">
          <maml:name>Custom</maml:name>
          <maml:Description>
            <maml:para>The hashtable instance containing custom overrides. Does not need to be specified by the client as it is defaulted.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Custom</maml:name>
        <maml:Description>
          <maml:para>The hashtable instance containing custom overrides. Does not need to be specified by the client as it is defaulted.</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="0" aliases="none">
        <maml:name>SourceSignals</maml:name>
        <maml:Description>
          <maml:para>The hashtable instance containing the source signal definitions. The actual signals returned are derived from the source. Does not need to be specified by the client as it is defaulted.</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: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.Collections.Hashtable</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>The resolved Signal definitions.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-SyntaxScheme</command:name>
      <command:verb>Get</command:verb>
      <command:noun>SyntaxScheme</command:noun>
      <maml:description>
        <maml:para>Get the scheme instance required by Command Syntax functionality in the parameter set tools.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The scheme is related to the Krayola theme. Some of the entries in the scheme are derived from the Krayola theme. The colours are subject to the presence of the environment variable 'KRAYOLA_LIGHT_TERMINAL', this is to prevent light foreground colours being selected when the background is also using light colours.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-SyntaxScheme</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Theme</maml:name>
          <maml:Description>
            <maml:para>The Krayola theme that the scheme will be associated with.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Theme</maml:name>
        <maml:Description>
          <maml:para>The Krayola theme that the scheme will be associated with.</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: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.Collections.Hashtable</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>A command Syntax related scheme</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-TableDisplayOptions</command:name>
      <command:verb>Get</command:verb>
      <command:noun>TableDisplayOptions</command:noun>
      <maml:description>
        <maml:para>Gets the default table display options.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The client can further customise by overwriting the members on the PSCustomObject returned.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-TableDisplayOptions</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Signals</maml:name>
          <maml:Description>
            <maml:para>The signals hashtable collection from which to select the signals.</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="1" aliases="none">
          <maml:name>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Select</maml:name>
          <maml:Description>
            <maml:para>An array of strings defining which columns are selected to be shown in the table.</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>Custom</maml:name>
          <maml:Description>
            <maml:para>A client defined PSCustomObject that will be populated under the ./Custom in the PSCustomObject returned.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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="3" aliases="none">
        <maml:name>Custom</maml:name>
        <maml:Description>
          <maml:para>A client defined PSCustomObject that will be populated under the ./Custom in the PSCustomObject returned.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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>Select</maml:name>
        <maml:Description>
          <maml:para>An array of strings defining which columns are selected to be shown in the table.</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>Signals</maml:name>
        <maml:Description>
          <maml:para>The signals hashtable collection from which to select the signals.</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: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.Management.Automation.PSObject</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>The table display options including client defined custom section.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-UniqueCrossPairs</command:name>
      <command:verb>Get</command:verb>
      <command:noun>UniqueCrossPairs</command:noun>
      <maml:description>
        <maml:para>Given 2 string arrays, returns an array of PSCustomObjects, containing First and Second properties. The result is a list of all unique pair combinations of the 2 input sequences.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Effectively, the result is a matrix with the first collection defining 1 axis and the other defining the other axis. Pairs where both elements are the same are omitted.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-UniqueCrossPairs</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>First</maml:name>
          <maml:Description>
            <maml:para>First string array to compare</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>Second</maml:name>
          <maml:Description>
            <maml:para>The other string array to compare</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>First</maml:name>
        <maml:Description>
          <maml:para>First string array to compare</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>Second</maml:name>
        <maml:Description>
          <maml:para>The other string array to compare</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.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-UniqueCrossPairs -first a,b,c -second a,c,d
 
Returns
 
  First Second
  ----- ------
  a c
  a d
  b a
  b c
  b d
  c d</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Get-UniqueCrossPairs -first a,b,c -second d
 
Returns
 
  First Second
  ----- ------
  d a
  d b
  d c</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Initialize-ShellOperant</command:name>
      <command:verb>Initialize</command:verb>
      <command:noun>ShellOperant</command:noun>
      <maml:description>
        <maml:para>Operant factory function.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>By default all operant related files are stored somewhere inside the home path. Actually, a predefined subpath under home is used. This can be customised by the user by them defining an alternative path (in the environment as 'LOOPZ_PATH'). This alternative path can be relative or absolute. Relative paths are relative to the home directory. The options specify how the operant is created and must be a PSCustomObject with the following fields (examples provided inside brackets relate to Rename-Many command):</maml:para>
      <maml:para>+ ShortCode ('remy'): a short string denoting the related command + OperantName ('UndoRename'): name of the operant class required + Shell ('PoShShell'): The type of shell that the command should be generated for. So for PowerShell the user would specify 'PoShShell' (which for the time being is the only shell supported). + BaseFilename ('undo-rename'): the core part of the file name which should reflect the nature of the operant (the operation, which ideally should be a verb noun pair but is not enforced) + DisabledEnVar ('LOOPZ_REMY_UNDO_DISABLED'): The environment variable used to disable this operant.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Initialize-ShellOperant</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>HomePath</maml:name>
          <maml:Description>
            <maml:para>User's home directory. (This parameter does not need to be set by client, just used for testing purposes.)</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>Options</maml:name>
          <maml:Description>
            <maml:para>(See command description for $Options field descriptions).</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>DryRun</maml:name>
          <maml:Description>
            <maml:para>Similar to WhatIf, but by passing ShouldProcess process for custom handling of dry run scenario. DryRun should be set if WhatIf is 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="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>DryRun</maml:name>
        <maml:Description>
          <maml:para>Similar to WhatIf, but by passing ShouldProcess process for custom handling of dry run scenario. DryRun should be set if WhatIf is 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="0" aliases="none">
        <maml:name>HomePath</maml:name>
        <maml:Description>
          <maml:para>User's home directory. (This parameter does not need to be set by client, just used for testing purposes.)</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>Options</maml:name>
        <maml:Description>
          <maml:para>(See command description for $Options field descriptions).</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Operant</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>[PSCustomObject]$operantOptions = [PSCustomObject]@{
    ShortCode = 'remy';
    OperantName = 'UndoRename';
    Shell = 'PoShShell';
    BaseFilename = 'undo-rename';
    DisabledEnVar = 'LOOPZ_REMY_UNDO_DISABLED';
  }</dev:code>
        <dev:remarks>
          <maml:para>Operant options for Rename-Many(remy) command</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-ByPlatform</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>ByPlatform</command:noun>
      <maml:description>
        <maml:para>Given a hashtable, invokes the function/script-block whose corresponding key matches the operating system name as returned by Get-PlatformName.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Provides a way to provide OS specific functionality. Returns $null if the $Hash does not contain an entry corresponding to the current platform. (Doesn't support invoking a function with named parameters; PowerShell doesn't currently support this, not even via splatting, if this changes, this will be implemented.)</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-ByPlatform</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Hash</maml:name>
          <maml:Description>
            <maml:para>A hashtable object whose keys are values that can be returned by Get-PlatformName. The values are of type PSCustomObject and can contain the following properties:</maml:para>
            <maml:para>+ FnInfo: A FunctionInfo instance. This can be obtained from an existing function by invoking Get-Command -Name &lt;function-name&gt; + Positional: an array of positional parameter values</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Hash</maml:name>
        <maml:Description>
          <maml:para>A hashtable object whose keys are values that can be returned by Get-PlatformName. The values are of type PSCustomObject and can contain the following properties:</maml:para>
          <maml:para>+ FnInfo: A FunctionInfo instance. This can be obtained from an existing function by invoking Get-Command -Name &lt;function-name&gt; + Positional: an array of positional parameter values</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: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>function invoke-winFn {
    param(
      [string]$name,
      [string]$colour
    )
 
    "win: Name:$name, Colour:$colour";
  }
 
  [hashtable]$platformsPositional = @{
    'windows' = [PSCustomObject]@{
      FnInfo = Get-Command -Name invoke-winFn -CommandType Function;
      Positional = @('cherry', 'red');
    };
    'linux' = [PSCustomObject]@{
      FnInfo = Get-Command -Name invoke-linuxFn -CommandType Function;
      Positional = @('grass', 'green');
    };
    'mac' = [PSCustomObject]@{
      FnInfo = Get-Command -Name invoke-macFn -CommandType Function;
      Positional = @('lagoon', 'blue');
    };
  }
  Invoke-ByPlatform -Hash $platformsPositional;</dev:code>
        <dev:remarks>
          <maml:para>(invoke-linuxFn, invoke-macFn, omitted above but defined with the same signature as invoke-winFn)</maml:para>
          <maml:para>On windows, Returns</maml:para>
          <maml:para>'win: Name:cherry, Colour:red'</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-ForeachFsItem</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>ForeachFsItem</command:noun>
      <maml:description>
        <maml:para>Allows a custom defined script-block or function to be invoked for all file system objects delivered through the pipeline.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>2 parameters sets are defined, one for invoking a named function (InvokeFunction) and the other (InvokeScriptBlock, the default) for invoking a script-block. An optional Summary script block can be specified which will be invoked at the end of the pipeline batch. The user should assemble the candidate items from the file system, be they files or directories typically using Get-ChildItem, or can be any other function that delivers file systems items via the PowerShell pipeline. For each item in the pipeline, Invoke-ForeachFsItem will invoke the script-block/function specified. Invoke-ForeachFsItem will deliver what ever is returned from the script-block/function, so the result of Invoke-ForeachFsItem can be piped to another command.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-ForeachFsItem</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Block</maml:name>
          <maml:Description>
            <maml:para>The script block to be invoked. The script block is invoked for each item in the pipeline that satisfy the Condition with the following positional parameters:</maml:para>
            <maml:para>* pipelineItem: the item from the pipeline</maml:para>
            <maml:para>* index: the 0 based index representing current pipeline item</maml:para>
            <maml:para>* Exchange: a hash table containing miscellaneous information gathered internally</maml:para>
            <maml:para>throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the pipeline. This is the responsibility of the client's block implementation. The trigger is only of use for state changing operations and can be ignored otherwise.</maml:para>
            <maml:para>In addition to these fixed positional parameters, if the invoked script-block is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParam and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>BlockParams</maml:name>
          <maml:Description>
            <maml:para>Optional array containing the excess parameters to pass into the script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Condition</maml:name>
          <maml:Description>
            <maml:para>This is a predicate script-block, which is invoked with either a DirectoryInfo or FileInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which file system objects are selected for function/script-block invocation.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Directory</maml:name>
          <maml:Description>
            <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle Directory objects.</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
          <maml:name>File</maml:name>
          <maml:Description>
            <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle FileInfo objects. Is mutually exclusive with the Directory switch. If neither switch is specified, then the invokee must be able to handle both therefore the Underscore parameter it defines must be declared as FileSystemInfo.</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>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the pipeline batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the pipeline batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). Also note that, if the script-block/function sets the Break flag causing further iteration to stop, then those subsequent items in the pipeline which have not been processed are not reflected in the skip count. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Top</maml:name>
          <maml:Description>
            <maml:para>Restricts the number of items processed in the rename batch, the remaining items are skipped. User can set this for experimental purposes.</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>pipelineItem</maml:name>
          <maml:Description>
            <maml:para>This is the pipeline object, so should not be specified explicitly and can represent a file object (System.IO.FileInfo) or a directory object (System.IO.DirectoryInfo).</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Invoke-ForeachFsItem</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Condition</maml:name>
          <maml:Description>
            <maml:para>This is a predicate script-block, which is invoked with either a DirectoryInfo or FileInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which file system objects are selected for function/script-block invocation.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Directory</maml:name>
          <maml:Description>
            <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle Directory objects.</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
          <maml:name>File</maml:name>
          <maml:Description>
            <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle FileInfo objects. Is mutually exclusive with the Directory switch. If neither switch is specified, then the invokee must be able to handle both therefore the Underscore parameter it defines must be declared as FileSystemInfo.</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>Functee</maml:name>
          <maml:Description>
            <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
            <maml:para>* Underscore: (See pipelineItem described above)</maml:para>
            <maml:para>* Index: (See index described above)</maml:para>
            <maml:para>* Exchange: (See PathThru described above)</maml:para>
            <maml:para>* Trigger: (See trigger described above)</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>FuncteeParams</maml:name>
          <maml:Description>
            <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
            <maml:para>* Underscore: (See pipelineItem described above)</maml:para>
            <maml:para>* Index: (See index described above)</maml:para>
            <maml:para>* Exchange: (See PathThru described above)</maml:para>
            <maml:para>* Trigger: (See trigger described above)</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="none">
          <maml:name>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the pipeline batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the pipeline batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). Also note that, if the script-block/function sets the Break flag causing further iteration to stop, then those subsequent items in the pipeline which have not been processed are not reflected in the skip count. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Top</maml:name>
          <maml:Description>
            <maml:para>Restricts the number of items processed in the rename batch, the remaining items are skipped. User can set this for experimental purposes.</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>pipelineItem</maml:name>
          <maml:Description>
            <maml:para>This is the pipeline object, so should not be specified explicitly and can represent a file object (System.IO.FileInfo) or a directory object (System.IO.DirectoryInfo).</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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="named" aliases="none">
        <maml:name>Block</maml:name>
        <maml:Description>
          <maml:para>The script block to be invoked. The script block is invoked for each item in the pipeline that satisfy the Condition with the following positional parameters:</maml:para>
          <maml:para>* pipelineItem: the item from the pipeline</maml:para>
          <maml:para>* index: the 0 based index representing current pipeline item</maml:para>
          <maml:para>* Exchange: a hash table containing miscellaneous information gathered internally</maml:para>
          <maml:para>throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the pipeline. This is the responsibility of the client's block implementation. The trigger is only of use for state changing operations and can be ignored otherwise.</maml:para>
          <maml:para>In addition to these fixed positional parameters, if the invoked script-block is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParam and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>BlockParams</maml:name>
        <maml:Description>
          <maml:para>Optional array containing the excess parameters to pass into the script block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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>Condition</maml:name>
        <maml:Description>
          <maml:para>This is a predicate script-block, which is invoked with either a DirectoryInfo or FileInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which file system objects are selected for function/script-block invocation.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Directory</maml:name>
        <maml:Description>
          <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle Directory objects.</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>Exchange</maml:name>
        <maml:Description>
          <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
        <maml:name>File</maml:name>
        <maml:Description>
          <maml:para>Switch to indicate that the invoked function/script-block (invokee) is to handle FileInfo objects. Is mutually exclusive with the Directory switch. If neither switch is specified, then the invokee must be able to handle both therefore the Underscore parameter it defines must be declared as FileSystemInfo.</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>Functee</maml:name>
        <maml:Description>
          <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
          <maml:para>* Underscore: (See pipelineItem described above)</maml:para>
          <maml:para>* Index: (See index described above)</maml:para>
          <maml:para>* Exchange: (See PathThru described above)</maml:para>
          <maml:para>* Trigger: (See trigger described above)</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>FuncteeParams</maml:name>
        <maml:Description>
          <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
          <maml:para>* Underscore: (See pipelineItem described above)</maml:para>
          <maml:para>* Index: (See index described above)</maml:para>
          <maml:para>* Exchange: (See PathThru described above)</maml:para>
          <maml:para>* Trigger: (See trigger described above)</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="none">
        <maml:name>Header</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the start of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* Exchange: (see Exchange previously described)</maml:para>
          <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
          <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
          <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
          <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Summary</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the end of the pipeline batch. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* count: the number of items processed in the pipeline batch.</maml:para>
          <maml:para>* skipped: the number of items skipped in the pipeline batch. An item is skipped if</maml:para>
          <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). Also note that, if the script-block/function sets the Break flag causing further iteration to stop, then those subsequent items in the pipeline which have not been processed are not reflected in the skip count. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Top</maml:name>
        <maml:Description>
          <maml:para>Restricts the number of items processed in the rename batch, the remaining items are skipped. User can set this for experimental purposes.</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>pipelineItem</maml:name>
        <maml:Description>
          <maml:para>This is the pipeline object, so should not be specified explicitly and can represent a file object (System.IO.FileInfo) or a directory object (System.IO.DirectoryInfo).</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
        <dev:type>
          <maml:name>FileSystemInfo</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>System.IO.FileSystemInfo</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>[scriptblock]$block = {
    param(
      [System.IO.FileInfo]$FileInfo,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
  Get-ChildItem './Tests/Data/fefsi' -Recurse -Filter '*.txt' -File | `
    Invoke-ForeachFsItem -File -Block $block;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block to handle .txt file objects from the same directory (without -Recurse): (NB: first parameter is of type FileInfo, -File specified on Get-ChildItem and Invoke-ForeachFsItem. If Get-ChildItem is missing -File, then any Directory objects passed in are filtered out by Invoke-ForeachFsItem. If -File is missing from Invoke-ForeachFsItem, then the script-block's first parameter, must be a FileSystemInfo to handle both types)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>function invoke-Target {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger,
      [string]$Format
    )
    ...
  }
 
  [hashtable]$parameters = @{
    'Format'
  }
  Get-ChildItem './Tests/Data/fefsi' -Recurse -Directory | `
    Invoke-ForeachFsItem -Directory -Functee 'invoke-Target' -FuncteeParams $parameters</dev:code>
        <dev:remarks>
          <maml:para>Invoke a function with additional parameters to handle directory objects from multiple directories (with -Recurse)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>[scriptblock]$block = {
    param(
      [System.IO.FileInfo]$FileInfo,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
  [scriptblock]$fileIsEmpty = {
    param(
      [System.IO.FileInfo]$FileInfo
    )
    return (0 -eq $FileInfo.Length)
  }
 
  Get-ChildItem './Tests/Data/fefsi' -Recurse -Filter '*.txt' -File | Invoke-ForeachFsItem `
    -Block $block -File -condition $fileIsEmpty;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block to handle empty .txt file objects from the same directory (without -Recurse)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code>[scriptblock]$block = {
    param(
      [System.IO.FileInfo]$FileInfo,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
[scriptblock]$filterDirectories = {
  [OutputType([boolean])]
  param(
    [System.IO.DirectoryInfo]$directoryInfo
  )
  Select-FsItem -Name $directoryInfo.Name -Includes 'A*';
}
 
  Get-ChildItem './Tests/Data/fefsi' -Directory | Invoke-ForeachFsItem `
    -Block $block -Directory -DirectoryIncludes $filterDirectories;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block only for directories whose name starts with "A" from the same directory (without -Recurse); Note the use of the LOOPZ function "Select-FsItem" in the directory include filter</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>[scriptblock]$block = {
    param(
      [System.IO.FileInfo]$FileInfo,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
  $exchange = @{
    'LOOPZ.KRAYOLA-THEME' = $(Get-KrayolaTheme);
    'LOOPZ.HEADER-BLOCK.MESSAGE' = 'The owls are not what they seem';
    'LOOPZ.HEADER-BLOCK.PROPERTIES' = @(@('A', 'One'), @('B', 'Two'), @('C', 'Three'));
    'LOOPZ.HEADER-BLOCK.LINE' = $LoopzUI.TildeLine;
    'LOOPZ.SUMMARY-BLOCK.LINE' = $LoopzUI.DashLine;
  }
 
  Get-ChildItem './Tests/Data/fefsi' -Recurse -Filter '*.txt' -File | `
    Invoke-ForeachFsItem -File -Block $block -Exchange $exchange `
      -Header $LoopzHelpers.DefaultHeaderBlock -Summary $LoopzHelpers.SimpleSummaryBlock;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block to handle .txt file objects from the same directory. This example illustrates the use of the Header and Summary blocks. Blocks predefined in LoopzHelpers are illustrated but the user can defined their own.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-MirrorDirectoryTree</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>MirrorDirectoryTree</command:noun>
      <maml:description>
        <maml:para>Mirrors a directory tree to a new location, invoking a custom defined scriptblock or function as it goes.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Copies a source directory tree to a new location applying custom functionality for each directory. 2 parameters set are defined, one for invoking a named function (InvokeFunction) and the other (InvokeScriptBlock, the default) for invoking a scriptblock. An optional Summary script block can be specified which will be invoked at the end of the mirroring batch.Copies a source directory tree to a new location applying custom functionality for each directory. 2 parameters set are defined, one for invoking a named function (InvokeFunction) and the other (InvokeScriptBlock, the default) for invoking a scriptblock. An optional Summary script block can be specified which will be invoked at the end of the mirroring batch.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-MirrorDirectoryTree</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Block</maml:name>
          <maml:Description>
            <maml:para>The script block to be invoked. The script block is invoked for each directory in the source directory tree that satisfy the specified Directory Include/Exclude filters with the following positional parameters:</maml:para>
            <maml:para>* underscore: the DirectoryInfo object representing the directory in the source tree</maml:para>
            <maml:para>* index: the 0 based index representing current directory in the source tree</maml:para>
            <maml:para>* Exchange object: a hash table containing miscellaneous information gathered internally</maml:para>
            <maml:para>throughout the mirroring batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's script-block/function implementation.</maml:para>
            <maml:para>In addition to these fixed positional parameters, if the invoked scriptblock is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParams and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
            <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>BlockParams</maml:name>
          <maml:Description>
            <maml:para>Optional array containing the excess parameters to pass into the script-block/function.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>CopyFiles</maml:name>
          <maml:Description>
            <maml:para>Switch parameter that indicates that files matching the specified filters should be copied.</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>CreateDirs</maml:name>
          <maml:Description>
            <maml:para>switch parameter indicates that directories should be created in the destination tree. If not set, then Invoke-MirrorDirectoryTree turns into a function that traverses the source directory invoking the function/script-block for matching directories.</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>DestinationPath</maml:name>
          <maml:Description>
            <maml:para>The destination Path denoting the root of the directory tree where the source tree will be mirrored to.</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>DirectoryExcludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If the directory matches any of the filters in the list, it will be mirrored in the destination tree. If DirectoryIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>DirectoryIncludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
          <maml:name>FileExcludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will NOT be mirrored in the destination tree. Any match in the FileExcludes overrides a match in FileIncludes, so a file that is matched in Include, can be excluded by the Exclude.</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>FileIncludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Hoist</maml:name>
          <maml:Description>
            <maml:para>switch parameter. Without Hoist being specified, the filters can prove to be too restrictive on matching against directories. If a directory does not match the filters then none of its descendants will be considered to be mirrored in the destination tree. When Hoist is specified then a descendant directory that does match the filters will be mirrored even though any of its ancestors may not match the filters.</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>The source Path denoting the root of the directory tree to be mirrored.</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>SessionHeader</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the mirroring batch. The script-block has the same signature as the Header script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>SessionSummary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the mirroring batch. The script-block has the same signature as the Summary script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Invoke-MirrorDirectoryTree</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>CopyFiles</maml:name>
          <maml:Description>
            <maml:para>Switch parameter that indicates that files matching the specified filters should be copied.</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>CreateDirs</maml:name>
          <maml:Description>
            <maml:para>switch parameter indicates that directories should be created in the destination tree. If not set, then Invoke-MirrorDirectoryTree turns into a function that traverses the source directory invoking the function/script-block for matching directories.</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>DestinationPath</maml:name>
          <maml:Description>
            <maml:para>The destination Path denoting the root of the directory tree where the source tree will be mirrored to.</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>DirectoryExcludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If the directory matches any of the filters in the list, it will be mirrored in the destination tree. If DirectoryIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>DirectoryIncludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
          <maml:name>FileExcludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will NOT be mirrored in the destination tree. Any match in the FileExcludes overrides a match in FileIncludes, so a file that is matched in Include, can be excluded by the Exclude.</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>FileIncludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Functee</maml:name>
          <maml:Description>
            <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
            <maml:para>* "Underscore": (See underscore described above)</maml:para>
            <maml:para>* "Index": (See index described above)</maml:para>
            <maml:para>* "Exchange": (See PathThru described above)</maml:para>
            <maml:para>* "Trigger": (See trigger described above)</maml:para>
            <maml:para></maml:para>
            <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</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>FuncteeParams</maml:name>
          <maml:Description>
            <maml:para>Optional hash-table containing the named parameters which are splatted into the Functee function invoke. As it's a hash table, order is not significant.</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="none">
          <maml:name>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Hoist</maml:name>
          <maml:Description>
            <maml:para>switch parameter. Without Hoist being specified, the filters can prove to be too restrictive on matching against directories. If a directory does not match the filters then none of its descendants will be considered to be mirrored in the destination tree. When Hoist is specified then a descendant directory that does match the filters will be mirrored even though any of its ancestors may not match the filters.</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>The source Path denoting the root of the directory tree to be mirrored.</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>SessionHeader</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the mirroring batch. The script-block has the same signature as the Header script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>SessionSummary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the mirroring batch. The script-block has the same signature as the Summary script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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="none">
        <maml:name>Block</maml:name>
        <maml:Description>
          <maml:para>The script block to be invoked. The script block is invoked for each directory in the source directory tree that satisfy the specified Directory Include/Exclude filters with the following positional parameters:</maml:para>
          <maml:para>* underscore: the DirectoryInfo object representing the directory in the source tree</maml:para>
          <maml:para>* index: the 0 based index representing current directory in the source tree</maml:para>
          <maml:para>* Exchange object: a hash table containing miscellaneous information gathered internally</maml:para>
          <maml:para>throughout the mirroring batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's script-block/function implementation.</maml:para>
          <maml:para>In addition to these fixed positional parameters, if the invoked scriptblock is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParams and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
          <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>BlockParams</maml:name>
        <maml:Description>
          <maml:para>Optional array containing the excess parameters to pass into the script-block/function.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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="False" position="named" aliases="none">
        <maml:name>CopyFiles</maml:name>
        <maml:Description>
          <maml:para>Switch parameter that indicates that files matching the specified filters should be copied.</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>CreateDirs</maml:name>
        <maml:Description>
          <maml:para>switch parameter indicates that directories should be created in the destination tree. If not set, then Invoke-MirrorDirectoryTree turns into a function that traverses the source directory invoking the function/script-block for matching directories.</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>DestinationPath</maml:name>
        <maml:Description>
          <maml:para>The destination Path denoting the root of the directory tree where the source tree will be mirrored to.</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>DirectoryExcludes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If the directory matches any of the filters in the list, it will be mirrored in the destination tree. If DirectoryIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>DirectoryIncludes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Exchange</maml:name>
        <maml:Description>
          <maml:para>A hash table containing miscellaneous information gathered internally throughout the pipeline batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
        <maml:name>FileExcludes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will NOT be mirrored in the destination tree. Any match in the FileExcludes overrides a match in FileIncludes, so a file that is matched in Include, can be excluded by the Exclude.</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>FileIncludes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each may contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be treated as a file suffix. If the file in the source tree matches any of the filters in the list, it will be mirrored in the destination tree. If FileIncludes contains just a single element which is the empty string, this means that nothing is included (rather than everything being included).</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>Functee</maml:name>
        <maml:Description>
          <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
          <maml:para>* "Underscore": (See underscore described above)</maml:para>
          <maml:para>* "Index": (See index described above)</maml:para>
          <maml:para>* "Exchange": (See PathThru described above)</maml:para>
          <maml:para>* "Trigger": (See trigger described above)</maml:para>
          <maml:para></maml:para>
          <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</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>FuncteeParams</maml:name>
        <maml:Description>
          <maml:para>Optional hash-table containing the named parameters which are splatted into the Functee function invoke. As it's a hash table, order is not significant.</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="none">
        <maml:name>Header</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* Exchange: (see Exchange previously described)</maml:para>
          <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
          <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
          <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
          <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Hoist</maml:name>
        <maml:Description>
          <maml:para>switch parameter. Without Hoist being specified, the filters can prove to be too restrictive on matching against directories. If a directory does not match the filters then none of its descendants will be considered to be mirrored in the destination tree. When Hoist is specified then a descendant directory that does match the filters will be mirrored even though any of its ancestors may not match the filters.</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>The source Path denoting the root of the directory tree to be mirrored.</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>SessionHeader</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the start of the mirroring batch. The script-block has the same signature as the Header script block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>SessionSummary</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the end of the mirroring batch. The script-block has the same signature as the Summary script block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Summary</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
          <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
          <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>function Test-Mirror {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger,
      [string]$Format
    )
    ...
  }
 
  [hashtable]$parameters = @{
    'Format' = '---- {0} ----';
  }
  Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' `
    -DestinationPath './Tests/Data/mirror' -CreateDirs `
    -Functee 'Test-Mirror' -FuncteeParams $parameters;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a named function for every directory in the source tree and mirror every directory in the destination tree. The invoked function has an extra parameter in it's signature, so the extra parameters must be passed in via FuncteeParams (the standard signature being the first 4 parameters shown.)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' `
    -DestinationPath './Tests/Data/mirror' -CreateDirs -CopyFiles -block {
      param(
        [System.IO.DirectoryInfo]$Underscore,
        [int]$Index,
        [hashtable]$Exchange,
        [boolean]$Trigger
      )
      ...
    };</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block for every directory in the source tree and copy all files</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' -DestinationPath './Tests/Data/mirror' `
    -DirectoryIncludes @('A*')</dev:code>
        <dev:remarks>
          <maml:para>Mirror a directory tree, including only directories beginning with A (filter A*)</maml:para>
          <maml:para>Note the possible issue with this example is that any descendants named A... which are located under an ancestor which is not named A..., will not be mirrored;</maml:para>
          <maml:para>eg './Tests/Data/fefsi/Audio/mp3/A/Amorphous Androgynous', even though "Audio", "A" and "Amorphous Androgynous" clearly match the A* filter, they will not be mirrored because the "mp3" directory, would be filtered out. See the following example for a resolution.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code>Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' -DestinationPath './Tests/Data/mirror' `
    -DirectoryIncludes @('A*') -CreateDirs -CopyFiles -Hoist</dev:code>
        <dev:remarks>
          <maml:para>Mirror a directory tree, including only directories beginning with A (filter A*) regardless of the matching of intermediate ancestors (specifying -Hoist flag resolves the possible issue in the previous example)</maml:para>
          <maml:para>Note that the directory filter must include a wild-card, otherwise it will be ignored. So a directory include of @('A'), is problematic, because A is not a valid directory filter so its ignored and there are no remaining filters that are able to include any directory, so no directory passes the filter.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' -DestinationPath './Tests/Data/mirror' `
    -FileIncludes @('flac', '*.wav') -CreateDirs -CopyFiles -Hoist</dev:code>
        <dev:remarks>
          <maml:para>Mirror a directory tree, including files with either .flac or .wav suffix</maml:para>
          <maml:para>Note that for files, a filter may or may not contain a wild-card. If the wild-card is missing then it is automatically treated as a file suffix; so 'flac' means '*.flac'.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 6 --------------------------</maml:title>
        <dev:code>[scriptblock]$summary = {
    param(
      [int]$_count,
      [int]$_skipped,
      [boolean]$_triggered,
      [hashtable]$_exchange
    )
    ...
  }
 
  Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' -DestinationPath './Tests/Data/mirror' `
    -FileIncludes @('flac') -CopyFiles -Hoist -Summary $summary</dev:code>
        <dev:remarks>
          <maml:para>Mirror a directory tree copying over just flac files</maml:para>
          <maml:para>Note that -CreateDirs is missing which means directories will not be mirrored by default. They are only mirrored as part of the process of copying over flac files, so in the end the resultant mirror directory tree will contain directories that include flac files.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 7 --------------------------</maml:title>
        <dev:code>Invoke-MirrorDirectoryTree -Path './Tests/Data/fefsi' -DestinationPath './Tests/Data/mirror' `
  -FileIncludes @('flac') -CopyFiles -Hoist `
  -Header $LoopzHelpers.DefaultHeaderBlock -Summary $DefaultHeaderBlock.SimpleSummaryBlock `
  -SessionHeader $LoopzHelpers.DefaultHeaderBlock -SessionSummary $DefaultHeaderBlock.SimpleSummaryBlock;</dev:code>
        <dev:remarks>
          <maml:para>Same as EXAMPLE 6, but using predefined Header and Summary script-blocks for Session header/summary and per directory header/summary.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-TraverseDirectory</command:name>
      <command:verb>Invoke</command:verb>
      <command:noun>TraverseDirectory</command:noun>
      <maml:description>
        <maml:para>Traverses a directory tree invoking a custom defined script-block or named function as it goes.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Navigates a directory tree applying custom functionality for each directory. A Condition script-block can be applied for conditional functionality. 2 parameters set are defined, one for invoking a named function (InvokeFunction) and the other (InvokeScriptBlock, the default) for invoking a script-block. An optional Summary script block can be specified which will be invoked at the end of the traversal batch.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Invoke-TraverseDirectory</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Block</maml:name>
          <maml:Description>
            <maml:para>The script block to be invoked. The script block is invoked for each directory in the source directory tree that satisfy the specified Condition predicate with the following positional parameters:</maml:para>
            <maml:para>* underscore: the DirectoryInfo object representing the directory in the source tree</maml:para>
            <maml:para>* index: the 0 based index representing current directory in the source tree</maml:para>
            <maml:para>* Exchange object: a hash table containing miscellaneous information gathered internally</maml:para>
            <maml:para>throughout the mirroring batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's script-block/function implementation.</maml:para>
            <maml:para>In addition to these fixed positional parameters, if the invoked script-block is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParams and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>BlockParams</maml:name>
          <maml:Description>
            <maml:para>Optional array containing the excess parameters to pass into the script-block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Condition</maml:name>
          <maml:Description>
            <maml:para>This is a predicate script-block, which is invoked with a DirectoryInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which directories are selected for function/script-block invocation.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the traversal batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="none">
          <maml:name>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Hoist</maml:name>
          <maml:Description>
            <maml:para>Switch parameter. Without Hoist being specified, the Condition can prove to be too restrictive on matching against directories. If a directory does not match the Condition then none of its descendants will be considered to be traversed. When Hoist is specified then a descendant directory that does match the Condition will be traversed even though any of its ancestors may not match the same Condition.</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>The source Path denoting the root of the directory tree to be traversed.</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>SessionHeader</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the traversal batch. The script-block has the same signature as the Header script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>SessionSummary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the traversal batch. The script-block has the same signature as the Summary script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Invoke-TraverseDirectory</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Condition</maml:name>
          <maml:Description>
            <maml:para>This is a predicate script-block, which is invoked with a DirectoryInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which directories are selected for function/script-block invocation.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the traversal batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="False" position="named" aliases="none">
          <maml:name>Functee</maml:name>
          <maml:Description>
            <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
            <maml:para>* "Underscore": (See underscore described above)</maml:para>
            <maml:para>* "Index": (See index described above)</maml:para>
            <maml:para>* "Exchange": (See PathThru described above)</maml:para>
            <maml:para>* "Trigger": (See trigger described above)</maml:para>
            <maml:para></maml:para>
            <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</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>FuncteeParams</maml:name>
          <maml:Description>
            <maml:para>Optional hash-table containing the named parameters which are splatted into the Functee function invoke. As it's a hash table, order is not significant.</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="none">
          <maml:name>Header</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* Exchange: (see Exchange previously described)</maml:para>
            <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
            <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
            <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
            <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
            <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Hoist</maml:name>
          <maml:Description>
            <maml:para>Switch parameter. Without Hoist being specified, the Condition can prove to be too restrictive on matching against directories. If a directory does not match the Condition then none of its descendants will be considered to be traversed. When Hoist is specified then a descendant directory that does match the Condition will be traversed even though any of its ancestors may not match the same Condition.</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>The source Path denoting the root of the directory tree to be traversed.</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>SessionHeader</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the start of the traversal batch. The script-block has the same signature as the Header script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>SessionSummary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked at the end of the traversal batch. The script-block has the same signature as the Summary script block.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Summary</maml:name>
          <maml:Description>
            <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
            <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
            <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
            <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Block</maml:name>
        <maml:Description>
          <maml:para>The script block to be invoked. The script block is invoked for each directory in the source directory tree that satisfy the specified Condition predicate with the following positional parameters:</maml:para>
          <maml:para>* underscore: the DirectoryInfo object representing the directory in the source tree</maml:para>
          <maml:para>* index: the 0 based index representing current directory in the source tree</maml:para>
          <maml:para>* Exchange object: a hash table containing miscellaneous information gathered internally</maml:para>
          <maml:para>throughout the mirroring batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic. * trigger: a boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's script-block/function implementation.</maml:para>
          <maml:para>In addition to these fixed positional parameters, if the invoked script-block is defined with additional parameters, then these will also be passed in. In order to achieve this, the client has to provide excess parameters in BlockParams and these parameters must be defined as the same type and in the same order as the additional parameters in the script-block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>BlockParams</maml:name>
        <maml:Description>
          <maml:para>Optional array containing the excess parameters to pass into the script-block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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>Condition</maml:name>
        <maml:Description>
          <maml:para>This is a predicate script-block, which is invoked with a DirectoryInfo object presented as a result of invoking Get-ChildItem. It provides a filtering mechanism that is defined by the user to define which directories are selected for function/script-block invocation.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Exchange</maml:name>
        <maml:Description>
          <maml:para>A hash table containing miscellaneous information gathered internally throughout the traversal batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="False" position="named" aliases="none">
        <maml:name>Functee</maml:name>
        <maml:Description>
          <maml:para>String defining the function to be invoked. Works in a similar way to the Block parameter for script-blocks. The Function's base signature is as follows:</maml:para>
          <maml:para>* "Underscore": (See underscore described above)</maml:para>
          <maml:para>* "Index": (See index described above)</maml:para>
          <maml:para>* "Exchange": (See PathThru described above)</maml:para>
          <maml:para>* "Trigger": (See trigger described above)</maml:para>
          <maml:para></maml:para>
          <maml:para>The destination DirectoryInfo object can be accessed via the Exchange denoted by the 'LOOPZ.MIRROR.DESTINATION' entry.</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>FuncteeParams</maml:name>
        <maml:Description>
          <maml:para>Optional hash-table containing the named parameters which are splatted into the Functee function invoke. As it's a hash table, order is not significant.</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="none">
        <maml:name>Header</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked for each directory that also contains child directories. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* Exchange: (see Exchange previously described)</maml:para>
          <maml:para>The Header can be customised with the following Exchange entries:</maml:para>
          <maml:para>* 'LOOPZ.KRAYOLA-THEME': Krayola Theme generally in use</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': message displayed as part of the header</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.CRUMB-SIGNAL': Lead text displayed in header, default: '[+] '</maml:para>
          <maml:para>* 'LOOPZ.HEADER.PROPERTIES': An array of Key/Value pairs of items to be displayed</maml:para>
          <maml:para>* 'LOOPZ.HEADER-BLOCK.LINE': A string denoting the line to be displayed. (There are</maml:para>
          <maml:para>predefined lines available to use in $LoopzUI, or a custom one can be used instead)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Hoist</maml:name>
        <maml:Description>
          <maml:para>Switch parameter. Without Hoist being specified, the Condition can prove to be too restrictive on matching against directories. If a directory does not match the Condition then none of its descendants will be considered to be traversed. When Hoist is specified then a descendant directory that does match the Condition will be traversed even though any of its ancestors may not match the same Condition.</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>The source Path denoting the root of the directory tree to be traversed.</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>SessionHeader</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the start of the traversal batch. The script-block has the same signature as the Header script block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>SessionSummary</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked at the end of the traversal batch. The script-block has the same signature as the Summary script block.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>Summary</maml:name>
        <maml:Description>
          <maml:para>A script-block that is invoked foreach directory that also contains child directories, after all its descendants have been processed and serves as a sub-total for the current directory. The script-block is invoked with the following positional parameters:</maml:para>
          <maml:para>* count: the number of items processed in the mirroring batch.</maml:para>
          <maml:para>* skipped: the number of items skipped in the mirroring batch. An item is skipped if</maml:para>
          <maml:para>it fails the defined condition or is not of the correct type (eg if its a directory but we have specified the -File flag). * errors: the number of items which resulted in error. An error occurs when the function or the script-block has set the Error property on the invoke result. * trigger: Flag set by the script-block/function, but should typically be used to indicate whether any of the items processed were actively updated/written in this batch. This helps in written idempotent operations that can be re-run without adverse consequences. * Exchange: (see Exchange previously described)</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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>[scriptblock]$block = {
    param(
      $underscore,
      [int]$index,
      [hashtable]$exchange,
      [boolean]$trigger
    )
    ...
  }
 
  Invoke-TraverseDirectory -Path './Tests/Data/fefsi' -Block $block</dev:code>
        <dev:remarks>
          <maml:para>Invoke a script-block for every directory in the source tree.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>function Test-Traverse {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger,
      [string]$Format
    )
    ...
  }
  [hashtable]$parameters = @{
    'Format' = "=== {0} ===";
  }
 
  Invoke-TraverseDirectory -Path './Tests/Data/fefsi' `
    -Functee 'Test-Traverse' -FuncteeParams $parameters;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a named function with extra parameters for every directory in the source tree.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>function Test-Traverse {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
  [scriptblock]$filterDirectories = {
    [OutputType([boolean])]
    param(
      [System.IO.DirectoryInfo]$directoryInfo
    )
 
    Select-FsItem -Name $directoryInfo.Name -Includes @('A*');
  }
 
  Invoke-TraverseDirectory -Path './Tests/Data/fefsi' -Functee 'Test-Traverse' `
    -Condition $filterDirectories;</dev:code>
        <dev:remarks>
          <maml:para>Invoke a named function, including only directories beginning with A (filter A*)</maml:para>
          <maml:para>Note the possible issue with this example is that any descendants named A... which are located under an ancestor which is not named A..., will not be processed by the provided function.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code>function Test-Traverse {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger
    )
    ...
  }
 
  [scriptblock]$filterDirectories = {
    [OutputType([boolean])]
    param(
      [System.IO.DirectoryInfo]$directoryInfo
    )
 
    Select-FsItem -Name $directoryInfo.Name -Includes @('A*');
  }
 
  Invoke-TraverseDirectory -Path './Tests/Data/fefsi' -Functee 'Test-Traverse' `
    -Condition $filterDirectories -Hoist;</dev:code>
        <dev:remarks>
          <maml:para>Mirror a directory tree, including only directories beginning with A (filter A*) regardless of the matching of intermediate ancestors (specifying -Hoist flag resolves the possible issue in the previous example).</maml:para>
          <maml:para>Note that the directory filter must include a wild-card, otherwise it will be ignored. So a directory include of @('A'), is problematic, because A is not a valid directory filter so its ignored and there are no remaining filters that are able to include any directory, so no directory passes the filter.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>Invoke-TraverseDirectory -Path './Tests/Data/fefsi' -Functee 'Test-Traverse' `
    -Condition $filterDirectories -Hoist `
    -Header $LoopzHelpers.DefaultHeaderBlock -Summary $DefaultHeaderBlock.SimpleSummaryBlock `
    -SessionHeader $LoopzHelpers.DefaultHeaderBlock -SessionSummary $DefaultHeaderBlock.SimpleSummaryBlock;</dev:code>
        <dev:remarks>
          <maml:para>Same as EXAMPLE 4, but using predefined Header and Summary script-blocks for Session header/summary and per directory header/summary. (Test-Traverse and filterDirectories as per EXAMPLE 4)</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Move-Match</command:name>
      <command:verb>Move</command:verb>
      <command:noun>Match</command:noun>
      <maml:description>
        <maml:para>The core move match action function principally used by Rename-Many. Moves a match according to the specified anchor(s).</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a new string that reflects moving the specified $Pattern match to either the location designated by $Anchor/$AnchorOccurrence/$Relation or to the Start or End of the value indicated by the presence of the $Start/$End switch parameters. First Move-Match, removes the Pattern match from the source. This makes the With and Anchor match against the remainder ($patternRemoved) of the source. This way, there is no overlap between the Pattern match and With/Anchor and it also makes the functionality more understandable for the user. NB: $Pattern only tells you what to remove, but it's the $With, $Copy and $Paste that defines what to insert, with the $Anchor/$Start/$End defining where the replacement text should go. The user should not be using named capture groups in $Copy, or $Anchor, rather, they should be defined inside $Paste and referenced inside $Paste/$With.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Move-Match</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The source value against which regular expressions are applied.</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>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the $Value that either needs to be moved or replaced as part of overall rename operation. Those characters in $Value which match $Pattern, are removed.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="10" aliases="none">
          <maml:name>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie any of these Anchor/Star/End are present) that defines what text is used to replace the $Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from. The user can also reference named group captures defined inside Pattern or Copy. (Note that the whole Copy capture can be referenced with ${_c}.)</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="11" aliases="none">
          <maml:name>Marker</maml:name>
          <maml:Description>
            <maml:para>A character used to mark the place where the $Pattern was removed from. It should be a special character that is not easily typed on the keyboard by the user so as to not interfere wth $Anchor/$Copy matches which occur after $Pattern match is removed.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
          <dev:type>
            <maml:name>Char</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>PatternOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l</maml:para>
            <maml:para>* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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>Anchor</maml:name>
          <maml:Description>
            <maml:para>Anchor is a regular expression string applied to $Value (after the $Pattern match has been removed). The $Pattern match that is removed is inserted at the position indicated by the anchor match in collaboration with the $Relation parameter.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>AnchorOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l</maml:para>
            <maml:para>* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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="5" aliases="none">
          <maml:name>Relation</maml:name>
          <maml:Description>
            <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $Pattern match with the $Anchor match in the new name for $Value.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">before</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">after</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="6" aliases="none">
          <maml:name>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to $Value (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="7" aliases="none">
          <maml:name>CopyOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l
* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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="8" aliases="none">
          <maml:name>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from $Value (this is different to how $Paste works).</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="9" aliases="none">
          <maml:name>Paste</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $With parameter. The other special variables that can be used inside a $Paste string is documented under the $With 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="False" position="named" aliases="none">
          <maml:name>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>End</maml:name>
          <maml:Description>
            <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the end of the new name.</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>Start</maml:name>
          <maml:Description>
            <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the start of the new name.</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="3" aliases="none">
        <maml:name>Anchor</maml:name>
        <maml:Description>
          <maml:para>Anchor is a regular expression string applied to $Value (after the $Pattern match has been removed). The $Pattern match that is removed is inserted at the position indicated by the anchor match in collaboration with the $Relation parameter.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>AnchorOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l</maml:para>
          <maml:para>* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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="6" aliases="none">
        <maml:name>Copy</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to $Value (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="7" aliases="none">
        <maml:name>CopyOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l
* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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>Diagnose</maml:name>
        <maml:Description>
          <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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="10" aliases="none">
        <maml:name>Drop</maml:name>
        <maml:Description>
          <maml:para>A string parameter (only applicable to move operations, ie any of these Anchor/Star/End are present) that defines what text is used to replace the $Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from. The user can also reference named group captures defined inside Pattern or Copy. (Note that the whole Copy capture can be referenced with ${_c}.)</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>End</maml:name>
        <maml:Description>
          <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the end of the new name.</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="11" aliases="none">
        <maml:name>Marker</maml:name>
        <maml:Description>
          <maml:para>A character used to mark the place where the $Pattern was removed from. It should be a special character that is not easily typed on the keyboard by the user so as to not interfere wth $Anchor/$Copy matches which occur after $Pattern match is removed.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
        <dev:type>
          <maml:name>Char</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="9" aliases="none">
        <maml:name>Paste</maml:name>
        <maml:Description>
          <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $With parameter. The other special variables that can be used inside a $Paste string is documented under the $With 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="False" position="1" aliases="none">
        <maml:name>Pattern</maml:name>
        <maml:Description>
          <maml:para>Regular expression string that indicates which part of the $Value that either needs to be moved or replaced as part of overall rename operation. Those characters in $Value which match $Pattern, are removed.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>PatternOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l</maml:para>
          <maml:para>* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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="5" aliases="none">
        <maml:name>Relation</maml:name>
        <maml:Description>
          <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $Pattern match with the $Anchor match in the new name for $Value.</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>Start</maml:name>
        <maml:Description>
          <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the start of the new name.</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>Value</maml:name>
        <maml:Description>
          <maml:para>The source value against which regular expressions are applied.</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="8" aliases="none">
        <maml:name>With</maml:name>
        <maml:Description>
          <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
          <maml:para>* $0: the pattern match</maml:para>
          <maml:para>* ${_a}: the anchor match</maml:para>
          <maml:para>* ${_c}: the copy match</maml:para>
          <maml:para></maml:para>
          <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from $Value (this is different to how $Paste works).</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.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 (Anchor) ----------------------</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -Relation 'before'</dev:code>
        <dev:remarks>
          <maml:para>Move a match before an anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>---------------------- EXAMPLE 2 (Anchor) ----------------------</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -Relation 'before' -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a match before an anchor and drop a literal in place of Pattern</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------------ EXAMPLE 3 (Hybrid Anchor) ------------------</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -End -Relation 'before' -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a match before an anchor, if anchor match fails, then move to end, then drop a literal in place of Pattern.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------- EXAMPLE 4 (Anchor with Occurrence) --------------</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -Relation 'before' -AnchorOccurrence 'l'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>- EXAMPLE 5 (Result formatted by With, named group reference) -</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -With '--(${dt})--'</dev:code>
        <dev:remarks>
          <maml:para>Move a match to the anchor, and format the output including group references, no anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>EXAMPLE 6 (Result formatted by With, named group reference and insert anchor)</maml:title>
        <dev:code>Move-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Anchor ' -' -With '${_a}, --(${dt})--'</dev:code>
        <dev:remarks>
          <maml:para>Move a match to the anchor, and format the output including group references, insert anchor</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-BootStrap</command:name>
      <command:verb>New</command:verb>
      <command:noun>BootStrap</command:noun>
      <maml:description>
        <maml:para>Bootstrap factory function</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Creates a bootstrap instance for the client command. When a command designed to show a lot of output and indication signals, the bootstrap class can be used to help manage this complexity in a common way.</maml:para>
      <maml:para>A command may want to show the presence of user defined parameters with Signals. By using the Boot-strapper the client can be designed without having to implement the logic of showing indicators. All the client needs to do is to define a 'spec' object which describes a parameter or other indicator and then register this spec with the Boot-strapper. The Boot-strapper then creates an 'Entity' that relates to the spec.</maml:para>
      <maml:para>There are 2 types of entity, primary and related. Primary entities should have a boolean Activate property. This denotes whether the entity is created, actioned and stored in the bootstrap. Relation entities are dependent on either other primary or related entities. Instead of a boolean Activate property, they should have an Activator predicate property which is a script block that returns a boolean. Typically, the Activator determines it's activated state by consulting other entities, returning true if it is active, false otherwise.</maml:para>
      <maml:para> Entities are used to tie together various pieces of information into a single bundle. This ensures that for a particular item the logic and info is centralised and handled in a consistent manner. The various concepts that are handled by an entity are:</maml:para>
      <maml:para>* handle items that needs some kind of transformation (eg, regex entities need to be constructed via New-RegularExpression) * populating exchange</maml:para>
      <maml:para>* creation of signal</maml:para>
      <maml:para>* formulation and validation of formatters</maml:para>
      <maml:para>* container selection</maml:para>
      <maml:para></maml:para>
      <maml:para>There are currently four entity types: 1) SimpleEntity *: Simple item that does not need any transformation of the value and is not represented by a signal. A simple entity can be used if all that is required is to populate an exchange entry (via Keys); this is why the Value member is optional.</maml:para>
      <maml:para>Spec properties:</maml:para>
      <maml:para>* Activate (primary: mandatory) -&gt; flag to indicate if the entity is to be created.</maml:para>
      <maml:para>* Activator (relation: mandatory) -&gt; predicate to indicate if the entity is to be created.</maml:para>
      <maml:para>* Name (mandatory) -&gt; identifies the entity</maml:para>
      <maml:para>* SpecType (mandatory) -&gt; 'simple'</maml:para>
      <maml:para>* Value (optional) -&gt; typically the value of a parameter, but can be anything.</maml:para>
      <maml:para>* Keys (optional) -&gt; Collection of key/value pairs to be inserted into exchange.</maml:para>
      <maml:para></maml:para>
      <maml:para>--- 2) SignalEntity *: For signalled entities. (eg a parameter that is associated with a signal)</maml:para>
      <maml:para>Spec properties:</maml:para>
      <maml:para>* Activate (primary: mandatory) -&gt; flag to indicate if the entity is to be created.</maml:para>
      <maml:para>* Activator (relation: mandatory) -&gt; predicate to indicate if the entity is to be created.</maml:para>
      <maml:para>* Name (mandatory) -&gt; identifies the entity</maml:para>
      <maml:para>* SpecType (mandatory) -&gt; 'signal'</maml:para>
      <maml:para>* Value (optional) -&gt; the primary value for this entity (not necessarily the display value)</maml:para>
      <maml:para>* Signal (mandatory) -&gt; name of the signal</maml:para>
      <maml:para>* SignalValue (optional) -&gt; the display value of the signal</maml:para>
      <maml:para>* Force (optional) -&gt; container selector.</maml:para>
      <maml:para>* Keys (optional) -&gt; Collection of key/value pairs to be inserted into exchange.</maml:para>
      <maml:para></maml:para>
      <maml:para>--- 3) RegexEntity *: For regular expressions. Used to create a regex entity. The entity can represent either a parameter or an independent regex.</maml:para>
      <maml:para> A derived regex entity can be created which references another regex. The derived value must reference the dependency by including the static place holder string '*{_dependency}'.</maml:para>
      <maml:para>Spec properties:</maml:para>
      <maml:para>* Activate (primary: mandatory) -&gt; flag to indicate if the entity is to be created.</maml:para>
      <maml:para>* Activator (relation: mandatory) -&gt; predicate to indicate if the entity is to be created.</maml:para>
      <maml:para>* Name (mandatory) -&gt; identifies the entity</maml:para>
      <maml:para>* Value (optional) -&gt; the value of the user supplied expression (including occurrence)</maml:para>
      <maml:para>* Signal (optional) -&gt; should be provided for parameters, optional for non parameters</maml:para>
      <maml:para>* WholeSpecifier (optional) -&gt; single letter code identifying this regex parameter.</maml:para>
      <maml:para>* Force (optional) -&gt; container selector.</maml:para>
      <maml:para>* RegExKey (optional) -&gt; Key identifying where the internally created [regex] object</maml:para>
      <maml:para> is stored in exchange. * OccurrenceKey (optional) -&gt; Key identifying where the occurrence value for this regex is stored in exchange. * Keys (optional) -&gt; Collection of key/value pairs to be inserted into exchange.</maml:para>
      <maml:para>For derived:</maml:para>
      <maml:para>* Activate (primary: mandatory) -&gt; flag to indicate if the entity is to be created.</maml:para>
      <maml:para>* Activator (relation: mandatory) -&gt; predicate to indicate if the entity is to be created.</maml:para>
      <maml:para>* Dependency (mandatory) -&gt; Name of required regex entity</maml:para>
      <maml:para>* Name (mandatory)</maml:para>
      <maml:para>* SpecType (mandatory) -&gt; 'regex' Value -&gt; The pattern which should include placeholder ' {_dependency}' * RegExKey (optional)</maml:para>
      <maml:para>* OccurrenceKey (optional)</maml:para>
      <maml:para></maml:para>
      <maml:para>--- 4) FormatterEntity *: For formatter parameters, which formats an output value. This is a signal entity with the addition of a validator which checks that the value represented does not contain file system unsafe characters. Uses function Test-IsFileSystemSafe to perform this check.</maml:para>
      <maml:para>Spec properties:</maml:para>
      <maml:para>* Activate (primary: mandatory) -&gt; flag to indicate if the entity is to be created.</maml:para>
      <maml:para>* Activator (relation: mandatory) -&gt; predicate to indicate if the entity is to be created.</maml:para>
      <maml:para>* Name (mandatory) -&gt; identifies the entity</maml:para>
      <maml:para>* SpecType (mandatory) -&gt; 'formatter'</maml:para>
      <maml:para>* Value (optional) -&gt; the value of the user supplied expression (including occurrence)</maml:para>
      <maml:para>* Signal (optional) -&gt; should be provided for parameters, optional for non parameters</maml:para>
      <maml:para>* WholeSpecifier (optional) -&gt; single letter code identifying this regex parameter.</maml:para>
      <maml:para>* Force (optional) -&gt; container selector.</maml:para>
      <maml:para>* Keys (optional) -&gt; Collection of key/value pairs to be inserted into exchange.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-BootStrap</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Exchange</maml:name>
          <maml:Description>
            <maml:para>The exchange instance to populate.</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="1" aliases="none">
          <maml:name>Containers</maml:name>
          <maml:Description>
            <maml:para>A PSCustomObject that must contain a 'Wide' property and a 'Props' property. Both of these must be of type Krayola.Line. 'Prop's are designed to show a small item of information, typically 5/6 characters long; multiple props would typically easily fit on a single line in the console. Wide items, are those which when show take up a lot of screen space, eg showing a file's full path is often a 'wide' item, so it would be best to present it on its own line.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Options</maml:name>
          <maml:Description>
            <maml:para>Not mandatory. Currently, only specifies a 'Whole' property. The 'Whole' property is a string containing multiple individual characters each one maps to a regex parameter and indicates if that regex pattern should be applied as a whole; ie it is wrapped up in the word boundary token '\b' to indicate that it should match on whole word basis only.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Containers</maml:name>
        <maml:Description>
          <maml:para>A PSCustomObject that must contain a 'Wide' property and a 'Props' property. Both of these must be of type Krayola.Line. 'Prop's are designed to show a small item of information, typically 5/6 characters long; multiple props would typically easily fit on a single line in the console. Wide items, are those which when show take up a lot of screen space, eg showing a file's full path is often a 'wide' item, so it would be best to present it on its own line.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Exchange</maml:name>
        <maml:Description>
          <maml:para>The exchange instance to populate.</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="2" aliases="none">
        <maml:name>Options</maml:name>
        <maml:Description>
          <maml:para>Not mandatory. Currently, only specifies a 'Whole' property. The 'Whole' property is a string containing multiple individual characters each one maps to a regex parameter and indicates if that regex pattern should be applied as a whole; ie it is wrapped up in the word boundary token '\b' to indicate that it should match on whole word basis only.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>BootStrap</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>A new BootStrap instance to help initialise a client command.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-DryRunner</command:name>
      <command:verb>New</command:verb>
      <command:noun>DryRunner</command:noun>
      <maml:description>
        <maml:para>Dry-Runner factory function</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Dry-Runner is used by the Show-InvokeReport command. The DryRunner can be used in unit-tests to ensure that expected parameters can be used to invoke the function without causing errors. In the unit tests, the client just needs to instantiate the DryRunner (using this function) then pass in an expected list of parameters to the Resolve method. The test case can review the result parameter set(s) and assert as appropriate. (Actually, a developer can also use the RuleController class in unit tests to check that commands do not violate the parameter set rules.)</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-DryRunner</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>CommandName</maml:name>
          <maml:Description>
            <maml:para>The name of the command to get DryRunner instance 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="1" aliases="none">
          <maml:name>Signals</maml:name>
          <maml:Description>
            <maml:para>The signals hashtable collection</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="2" aliases="none">
          <maml:name>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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="0" aliases="none">
        <maml:name>CommandName</maml:name>
        <maml:Description>
          <maml:para>The name of the command to get DryRunner instance 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="2" aliases="none">
        <maml:name>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Signals</maml:name>
        <maml:Description>
          <maml:para>The signals hashtable collection</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: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>A new DryRunner instance</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-RegularExpression</command:name>
      <command:verb>New</command:verb>
      <command:noun>RegularExpression</command:noun>
      <maml:description>
        <maml:para>regex factory function.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Creates a regex object from the $Expression specified. Supports inline regex flags ('mixsn') which must be specified at the end of the $Expression after a '/'.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-RegularExpression</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Expression</maml:name>
          <maml:Description>
            <maml:para>The pattern for the regular expression. If it starts with a tilde ('~'), then the whole expression is escaped so any special regex characters are interpreted literally.</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>Escape</maml:name>
          <maml:Description>
            <maml:para>switch parameter to indicate that the expression should be escaped. (This is an alternative to the '~' prefix).</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>Label</maml:name>
          <maml:Description>
            <maml:para>string that gives a name to the regular expression being created and is used for logging/error reporting purposes only, so it's not mandatory.</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>WholeWord</maml:name>
          <maml:Description>
            <maml:para>switch parameter to indicate the expression should be wrapped with word boundary markers \b, so an $Expression defined as 'foo' would be adjusted to '\bfoo\b'.</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>Escape</maml:name>
        <maml:Description>
          <maml:para>switch parameter to indicate that the expression should be escaped. (This is an alternative to the '~' prefix).</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>Expression</maml:name>
        <maml:Description>
          <maml:para>The pattern for the regular expression. If it starts with a tilde ('~'), then the whole expression is escaped so any special regex characters are interpreted literally.</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>Label</maml:name>
        <maml:Description>
          <maml:para>string that gives a name to the regular expression being created and is used for logging/error reporting purposes only, so it's not mandatory.</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>WholeWord</maml:name>
        <maml:Description>
          <maml:para>switch parameter to indicate the expression should be wrapped with word boundary markers \b, so an $Expression defined as 'foo' would be adjusted to '\bfoo\b'.</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.Text.RegularExpressions.Regex</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>New-RegularExpression -Expression '(?\&lt;y\&gt;\d{4})-(?\&lt;m\&gt;\d{2})-(?\&lt;d\&gt;\d{2})'</dev:code>
        <dev:remarks>
          <maml:para>Create a regular expression</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------------ EXAMPLE 2 (with WholeWord) ------------------</maml:title>
        <dev:code>New-RegularExpression -Expression '(?\&lt;y\&gt;\d{4})-(?\&lt;m\&gt;\d{2})-(?\&lt;d\&gt;\d{2})' -WholeWord</dev:code>
        <dev:remarks>
          <maml:para>Apply whole word semantics, by surrounding the pattern with word boundary token: '\b'</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 3 (Escaped) ---------------------</maml:title>
        <dev:code>New-RegularExpression -Expression '(123)' -Escape</dev:code>
        <dev:remarks>
          <maml:para>Escape the whole pattern.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------- EXAMPLE 4 (Escaped with leading ~) --------------</maml:title>
        <dev:code>New-RegularExpression -Expression '~(123)'</dev:code>
        <dev:remarks>
          <maml:para>Escape the whole pattern with leading ~.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------- EXAMPLE 5 (Create a case insensitive expression) -------</maml:title>
        <dev:code>New-RegularExpression -Expression 'DATE/i'</dev:code>
        <dev:remarks>
          <maml:para>Create a case insensitive expression via inline options</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-Syntax</command:name>
      <command:verb>New</command:verb>
      <command:noun>Syntax</command:noun>
      <maml:description>
        <maml:para>Get a new 'Syntax' object for a command.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Syntax instance is a supporting class for the parameter set tools. It contains various formatters, string definitions and utility functionality. The primary feature it contains is that relating to the colouring in of the standard syntax statement that is derived from a commands parameter set.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>New-Syntax</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>CommandName</maml:name>
          <maml:Description>
            <maml:para>The name of the command to get syntax instance 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="1" aliases="none">
          <maml:name>Signals</maml:name>
          <maml:Description>
            <maml:para>The signals hashtable collection</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="2" aliases="none">
          <maml:name>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Scheme</maml:name>
          <maml:Description>
            <maml:para>The hashtable syntax specific scheme instance</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>CommandName</maml:name>
        <maml:Description>
          <maml:para>The name of the command to get syntax instance 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="3" aliases="none">
        <maml:name>Scheme</maml:name>
        <maml:Description>
          <maml:para>The hashtable syntax specific scheme instance</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="2" aliases="none">
        <maml:name>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Signals</maml:name>
        <maml:Description>
          <maml:para>The signals hashtable collection</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: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>A new syntax instance</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Register-CommandSignals</command:name>
      <command:verb>Register</command:verb>
      <command:noun>CommandSignals</command:noun>
      <maml:description>
        <maml:para>A client can use this function to register which signals it uses with the signal registry. When the user uses the Show-Signals command, they can see which signals a command uses and therefore see the impact of defining a custom signal.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Stores the list of signals used for a command in the signal registry. It is recommended that the client defines an alias for their command then registers signals against this more concise alias, rather the the full command name. This will reduce the chance of an overflow in the console, if too many commands are registered. It is advised that clients invoke this for all commands that use signals in the module initialisation code. This will mean that when a module is imported, the command's signals are registered and will show up in the table displayed by 'Show-Signals'.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Register-CommandSignals</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Alias</maml:name>
          <maml:Description>
            <maml:para>The name of the command's alias, to register the signals under.</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>UsedSet</maml:name>
          <maml:Description>
            <maml:para>The set of signals that the specified command uses.</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>Signals</maml:name>
          <maml:Description>
            <maml:para>The signals hashtable collection, to validate the UsedSet against; should be left to the default.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Alias</maml:name>
        <maml:Description>
          <maml:para>The name of the command's alias, to register the signals under.</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>Signals</maml:name>
        <maml:Description>
          <maml:para>The signals hashtable collection, to validate the UsedSet against; should be left to the default.</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="False" position="1" aliases="none">
        <maml:name>UsedSet</maml:name>
        <maml:Description>
          <maml:para>The set of signals that the specified command uses.</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>Register-CommandSignals -Alias 'xcopy', 'WHAT-IF', 'SOURCE', 'DESTINATION'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Rename-Many</command:name>
      <command:verb>Rename</command:verb>
      <command:noun>Many</command:noun>
      <maml:description>
        <maml:para>Performs a bulk rename for all file system objects delivered through the pipeline, via regular expression replacement. For more information, please see Bulk Renamer (https://github.com/EliziumNet/Loopz/blob/master/resources/docs/bulk-renamer.md)</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The user should assemble the candidate items from the file system, be they files or directories typically using Get-ChildItem, or can be any other function that delivers file systems items via the PowerShell pipeline. For each item in the pipeline, Rename-Many will perform a rename.</maml:para>
      <maml:para>Rename-Many is a powerful command and should be used with caution. Because of the potential of accidental misuse, a number of protections have been put in place:</maml:para>
      <maml:para>* By default, the command is locked. This means that the command will not actually perform any renames until it has been unlocked by the user. When locked, the command runs as though -WhatIf has been specified. There are indications in the output to show that the command is in a locked state (there is an indicator in the batch header and a 'Novice' indicator in the summary). To activate the command, the user needs to set the environment variable 'LOOPZ_REMY_LOCKED' to $false. The user should not unlock the command until they are comfortable with how to use this command properly and knows how to write regular expressions correctly. (See regex101.com)</maml:para>
      <maml:para>* An undo script is generated by default. If the user has invoked a rename operation by accident without specifying $WhatIf (or any other WhatIf equivalent like $Diagnose) then the user can execute the undo script to reverse the rename operation. The user should clearly do this immediately on recognising the error of their ways. In a panic, the user may terminate the command via ctrl-c. In this case, a partial undo script is still generated and should contain the undo operations for the renames that were performed up to the point of the termination request. The name of the undo script is based upon the current date and time and is displayed in the summary. (The user can, if they wish disable the undo feature if they don't want to have to manage the accumulation of undo scripts, by setting the environment variable LOOPZ_REMY_UNDO_DISABLED to $true)</maml:para>
      <maml:para>Another important point of note is that there are currently 3 modes of operation: 'move', 'update' or 'cut':</maml:para>
      <maml:para>* 'move': requires an anchor, which may be an $Anchor pattern or either $Start or $End switches.</maml:para>
      <maml:para>* 'update': requires $With or $Paste without an anchor.</maml:para>
      <maml:para>* 'cut': no anchor or $With/$Paste specified, the $Pattern match is simply removed</maml:para>
      <maml:para> from the name.</maml:para>
      <maml:para>The following regular expression parameters:</maml:para>
      <maml:para>* $Pattern</maml:para>
      <maml:para>* $Anchor</maml:para>
      <maml:para>* $Copy</maml:para>
      <maml:para>can optionally have an occurrence value specified that can be used to select which match is active. In the case where a provided expression has multiple matches, the occurrence value can be used to single out which one. When no occurrence is specified, the default is the first match only. The occurrence for a parameter can be:</maml:para>
      <maml:para>* f: first occurrence</maml:para>
      <maml:para>* l: last occurrence</maml:para>
      <maml:para>* &lt;number&gt;: the nth occurrence</maml:para>
      <maml:para>The occurrence is specified after the regular expression eg: -Pattern '\w\d{2,3}', l which means match the Last occurrence of the expression. (Actually, an occurrence may be specified for $Include and $Except but there is no point in doing so because these patterns only provide a filtering function and play no part in the actual renaming process).</maml:para>
      <maml:para> A note about escaping. If a pattern needs to use an regular expression character as a literal, it must be escaped. There are multiple ways of doing this: * use the 'esc' function; eg: -Pattern $($esc('(\d{2})'))</maml:para>
      <maml:para>* use a leading ~; -Pattern '~(123)'</maml:para>
      <maml:para></maml:para>
      <maml:para>The above 2 approaches escape the entire string. The second approach is more concise and avoids the necessary use of extra brackets and $.</maml:para>
      <maml:para>* use 'esc' alongside other string concatenation: eg: -Pattern $($esc('(123)') + '-(?&lt;ccy&gt;GBP|SEK)'). This third method is required when the whole pattern should not be subjected to escaping.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Anchor</maml:name>
          <maml:Description>
            <maml:para>Indicates that the rename operation will be a move of the token from its original point to the point indicated by Anchor. Anchor is a regular expression string applied to the pipeline item's name (after the $Pattern match has been removed). The $Pattern match that is removed is inserted at the position indicated by the anchor match in collaboration with the $Relation parameter.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Relation</maml:name>
          <maml:Description>
            <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $pattern match with the $Anchor match in the new name for the pipeline item.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">before</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">after</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>AnchorEnd</maml:name>
          <maml:Description>
            <maml:para>Similar to Anchor except that if the pattern specified by AnchorEnd does not match, then the Pattern match will be moved to the End. This is known as a Hybrid Anchor.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Relation</maml:name>
          <maml:Description>
            <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $pattern match with the $Anchor match in the new name for the pipeline item.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">before</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">after</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>AnchorStart</maml:name>
          <maml:Description>
            <maml:para>Similar to Anchor except that if the pattern specified by AnchorEnd does not match, then the Pattern match will be moved to the Start. This is known as a Hybrid Anchor.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Relation</maml:name>
          <maml:Description>
            <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $pattern match with the $Anchor match in the new name for the pipeline item.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">before</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">after</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Append</maml:name>
          <maml:Description>
            <maml:para>Appends a literal string to end of items 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="none">
          <maml:name>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Paste</maml:name>
          <maml:Description>
            <maml:para>Formatter parameter for Update operations. Can contain named/numbered group references defined inside regular expression parameters, or use special named references $0 for the whole Pattern match and ${_c} for the whole Copy match.</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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>End</maml:name>
          <maml:Description>
            <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the end of the new name.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
          <maml:Description>
            <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Start</maml:name>
          <maml:Description>
            <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the start of the new name.</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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>With</maml:name>
          <maml:Description>
            <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
            <maml:para>* $0: the pattern match</maml:para>
            <maml:para>* ${_a}: the anchor match</maml:para>
            <maml:para>* ${_c}: the copy match</maml:para>
            <maml:para></maml:para>
            <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Prepend</maml:name>
          <maml:Description>
            <maml:para>Prefixes a literal string to start of items 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="none">
          <maml:name>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Cut</maml:name>
          <maml:Description>
            <maml:para>Is a replacement for the Pattern parameter, when a Cut operation is required. The matched items will be removed from the item's name, and no other replacement occurs.</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="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="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Rename-Many</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
            <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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>Condition</maml:name>
          <maml:Description>
            <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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>Context</maml:name>
          <maml:Description>
            <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
            <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
            <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
            <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
            <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
            <maml:para>the locking of the command.</maml:para>
            <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
            <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
            <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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="x">
          <maml:name>Except</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
          <maml:Description>
            <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Top</maml:name>
          <maml:Description>
            <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="False" position="named" aliases="none">
          <maml:name>Transform</maml:name>
          <maml:Description>
            <maml:para>A script block which is given the chance to perform a modification to the finally named item. The transform is invoked prior to post-processing, so that the post-processing rules are not breached and the transform does not have to worry about breaking them. The transform function's signature is as follows:</maml:para>
            <maml:para>* Original: original item's name</maml:para>
            <maml:para>* Renamed: new name</maml:para>
            <maml:para>* CapturedPattern: pattern capture</maml:para>
            <maml:para></maml:para>
            <maml:para>and should return the new name. If the transform does not change the name, it should return an empty string.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</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:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Whole</maml:name>
          <maml:Description>
            <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
            <maml:para>* 'p': $Pattern</maml:para>
            <maml:para>* 'a': $Anchor</maml:para>
            <maml:para>* 'c': $Copy</maml:para>
            <maml:para>* 'i': $Include</maml:para>
            <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">p</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">a</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">c</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">i</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">x</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="true" variableLength="true" globbing="false" pipelineInput="True (ByValue)" position="named" aliases="none">
          <maml:name>underscore</maml:name>
          <maml:Description>
            <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileSystemInfo</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Anchor</maml:name>
        <maml:Description>
          <maml:para>Indicates that the rename operation will be a move of the token from its original point to the point indicated by Anchor. Anchor is a regular expression string applied to the pipeline item's name (after the $Pattern match has been removed). The $Pattern match that is removed is inserted at the position indicated by the anchor match in collaboration with the $Relation parameter.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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>AnchorEnd</maml:name>
        <maml:Description>
          <maml:para>Similar to Anchor except that if the pattern specified by AnchorEnd does not match, then the Pattern match will be moved to the End. This is known as a Hybrid Anchor.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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>AnchorStart</maml:name>
        <maml:Description>
          <maml:para>Similar to Anchor except that if the pattern specified by AnchorEnd does not match, then the Pattern match will be moved to the Start. This is known as a Hybrid Anchor.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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>Append</maml:name>
        <maml:Description>
          <maml:para>Appends a literal string to end of items 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="none">
        <maml:name>Condition</maml:name>
        <maml:Description>
          <maml:para>Provides another way of filtering pipeline items. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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="False" position="named" aliases="none">
        <maml:name>Context</maml:name>
        <maml:Description>
          <maml:para>Provides another way of customising Rename-Many. This is not typically specified on the command line, rather it is meant for those wanting to build functionality on top of Rename-Many. $Context should be a PSCustomObject with the following note properties:</maml:para>
          <maml:para>* Title (default: 'Rename') the name used in the batch header.</maml:para>
          <maml:para>* ItemMessage (default: 'Rename Item') the operation name used for each renamed item.</maml:para>
          <maml:para>* SummaryMessage (default: 'Rename Summary') the name used in the batch summary.</maml:para>
          <maml:para>* Locked (default: 'LOOPZ_REMY_LOCKED) the name of the environment variable which controls</maml:para>
          <maml:para>the locking of the command.</maml:para>
          <maml:para>* DisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which controls if the undo script feature is disabled.</maml:para>
          <maml:para>* UndoDisabledEnVar (default: 'LOOPZ_REMY_UNDO_DISABLED') the name of the environment variable which determines if the Undo feature is disabled.</maml:para>
          <maml:para>This allows any other function built on top of Rename-Many to control the undo feature for itself independently of Rename-Many.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Copy</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to the pipeline item's name (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste or $With). Since this is a regular expression to be used in $Paste/$With, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste/$With. The value in the $Copy parameter comes when a generic pattern is defined eg \d{3} (is non static), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste/$With parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste and $With.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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>Cut</maml:name>
        <maml:Description>
          <maml:para>Is a replacement for the Pattern parameter, when a Cut operation is required. The matched items will be removed from the item's name, and no other replacement occurs.</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>Diagnose</maml:name>
        <maml:Description>
          <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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>Directory</maml:name>
        <maml:Description>
          <maml:para>switch to indicate only Directory items in the pipeline will be processed. If neither this switch or the File switch are specified, then both File and Directory items are processed.</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>Drop</maml:name>
        <maml:Description>
          <maml:para>A string parameter (only applicable to move operations, ie Anchor/Star/End) that defines what text is used to replace the Pattern match. So in this use-case, the user wants to move a particular token/pattern to another part of the name and at the same time drop a static string in the place where the $Pattern was removed from.</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>End</maml:name>
        <maml:Description>
          <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the end of the new name.</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="x">
        <maml:name>Except</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to exclude some items that have been fed in via the pipeline. Those items that match the exclusion are skipped during the rename batch.</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>File</maml:name>
        <maml:Description>
          <maml:para>switch to indicate only File items in the pipeline will be processed. If neither this switch or the Directory switch are specified, then both File and Directory items are processed.</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="i">
        <maml:name>Include</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to the original pipeline item's name (before the $Pattern match has been removed). Allows the user to include some items that have been fed in via the pipeline. Only those items that match $Include pattern are included during the rename batch, the others are skipped. The value of the Include parameter comes when you want to define a pattern which pipeline items match, without it be removed from the original name, which is what happens with $Pattern. Eg, the user may want to specify the only items that should be considered a candidate to be renamed are those that match a particular pattern but doing so in $Pattern would simply remove that pattern. That may be ok, but if it's not, the user should specify a pattern in the $Include and use $Pattern for the match you do want to be moved (with Anchor/Start/End) or replaced (with $With/$Paste).</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>Paste</maml:name>
        <maml:Description>
          <maml:para>Formatter parameter for Update operations. Can contain named/numbered group references defined inside regular expression parameters, or use special named references $0 for the whole Pattern match and ${_c} for the whole Copy match.</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="0" aliases="none">
        <maml:name>Pattern</maml:name>
        <maml:Description>
          <maml:para>Regular expression string that indicates which part of the pipeline items' name that either needs to be moved or replaced as part of bulk rename operation. Those characters in the name which match are removed from the name. The pattern can be followed by an occurrence indicator. As the $Pattern parameter is strictly speaking an array, the user can specify the occurrence after the regular expression eg: $Pattern '(?&lt;code&gt;\w\d{2})', l</maml:para>
          <maml:para>=&gt; This indicates that the last match should be captured into named group 'code'.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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>Prepend</maml:name>
        <maml:Description>
          <maml:para>Prefixes a literal string to start of items 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="none">
        <maml:name>Relation</maml:name>
        <maml:Description>
          <maml:para>Used in conjunction with the $Anchor parameter and can be set to either 'before' or 'after' (the default). Defines the relationship of the $pattern match with the $Anchor match in the new name for the pipeline 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="False" position="named" aliases="none">
        <maml:name>Start</maml:name>
        <maml:Description>
          <maml:para>Is another type of anchor used instead of $Anchor and specifies that the $Pattern match should be moved to the start of the new name.</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>Top</maml:name>
        <maml:Description>
          <maml:para>A number indicating how many items to process. If it is known that the number of items that will be candidates to be renamed is large, the user can limit this to the first $Top number of items. This is typically used as an exploratory tool, to determine the effects of the rename operation.</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="False" position="named" aliases="none">
        <maml:name>Transform</maml:name>
        <maml:Description>
          <maml:para>A script block which is given the chance to perform a modification to the finally named item. The transform is invoked prior to post-processing, so that the post-processing rules are not breached and the transform does not have to worry about breaking them. The transform function's signature is as follows:</maml:para>
          <maml:para>* Original: original item's name</maml:para>
          <maml:para>* Renamed: new name</maml:para>
          <maml:para>* CapturedPattern: pattern capture</maml:para>
          <maml:para></maml:para>
          <maml:para>and should return the new name. If the transform does not change the name, it should return an empty string.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</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="False" position="named" aliases="none">
        <maml:name>Whole</maml:name>
        <maml:Description>
          <maml:para>Provides an alternative way to indicate that the regular expression parameters should be treated as a whole word (it just wraps the expression inside \b tokens). If set to '*', then it applies to all expression parameters otherwise a single letter can specify which of the parameters 'Whole' should be applied to. Valid values are:</maml:para>
          <maml:para>* 'p': $Pattern</maml:para>
          <maml:para>* 'a': $Anchor</maml:para>
          <maml:para>* 'c': $Copy</maml:para>
          <maml:para>* 'i': $Include</maml:para>
          <maml:para>* 'x': $Exclude ' ': All the above (NB: Currently, can't be set to more than 1 of the above items at a time)</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>With</maml:name>
        <maml:Description>
          <maml:para>This is a NON regular expression string. It would be more accurately described as a formatter, similar to the $Paste parameter. Defines what text is used as the replacement for the $Pattern match. Works in concert with $Relation (whereas $Paste does not). $With can reference special variables:</maml:para>
          <maml:para>* $0: the pattern match</maml:para>
          <maml:para>* ${_a}: the anchor match</maml:para>
          <maml:para>* ${_c}: the copy match</maml:para>
          <maml:para></maml:para>
          <maml:para>When $Pattern contains named capture groups, these variables can also be referenced. Eg if the $Pattern is defined as '(?&lt;day&gt;\d{1,2})-(?&lt;mon&gt;\d{1,2})-(?&lt;year&gt;\d{4})', then the variables ${day}, ${mon} and ${year} also become available for use in $With or $Paste. Typically, $With is static text which is used to replace the $Pattern match and is inserted according to the Anchor match, (or indeed $Start or $End) and $Relation. When using $With, whatever is defined in the $Anchor match is not removed from the pipeline's name (this is different to how $Paste works).</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>underscore</maml:name>
        <maml:Description>
          <maml:para>The pipeline item which should either be an instance of FileInfo or DirectoryInfo.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">FileSystemInfo</command:parameterValue>
        <dev:type>
          <maml:name>FileSystemInfo</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>Test</maml:name>
        <maml:Description>
          <maml:para>Required by unit tests only.</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>System.IO.FileSystemInfo</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Parameter `$underscore`, can be DirectoryInfo instance or FileInfo instance.</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 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -File -Pattern 'data' -Anchor 'loopz' -Relation 'before'</dev:code>
        <dev:remarks>
          <maml:para>Move a static string before anchor (consider file items only)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 2 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern 'data',l -Anchor 'loopz' -Relation 'before' -Whole p</dev:code>
        <dev:remarks>
          <maml:para>Move last occurrence of whole-word static string before anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 3 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Directory -Pattern 'data' -Anchor 'loopz' -Relation 'before' -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a static string before anchor and drop (consider Directory items only)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 4 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Directory -Pattern 'data' -AnchorEnd 'loopz' -Relation 'before' -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a static string before anchor and drop (consider Directory items only), if anchor does not match, move the pattern match to end.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 5 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Directory -Pattern 'data' -Start -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a static string to start and drop (consider Directory items only)</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 6 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern '\d{2}-data' -Anchor 'loopz' -Relation 'before'</dev:code>
        <dev:remarks>
          <maml:para>Move a match before anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 7 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern '\d{2}-data',l -Anchor 'loopz' -Relation 'before' -Whole p</dev:code>
        <dev:remarks>
          <maml:para>Move last occurrence of whole-word static string before anchor.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 8 (Move) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern '\d{2}-data' -Anchor 'loopz' -Relation 'before' -Drop '-'</dev:code>
        <dev:remarks>
          <maml:para>Move a match before anchor and drop</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>---------------------- EXAMPLE 9 (Update) ----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern 'data',l -Whole p -Paste '_info_'</dev:code>
        <dev:remarks>
          <maml:para>Update last occurrence of whole-word static string using $Paste.</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 10 (Update) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern 'data' -Paste '_info_'</dev:code>
        <dev:remarks>
          <maml:para>Update a static string using $Paste</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 11 (Update) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern '\d{2}-data', l -Paste '${_a}_info_'</dev:code>
        <dev:remarks>
          <maml:para>Update 2nd occurrence of whole-word match using $Paste and preserve anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 12 (Update) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern (?&lt;day&gt;\d{2})-(?&lt;mon&gt;\d{2})-(?&lt;year&gt;\d{2})
  -Paste '(${year})-(${mon})-(${day}) ${_a}'</dev:code>
        <dev:remarks>
          <maml:para>Update match contain named capture group using $Paste and preserve the anchor</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 13 (Update) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Pattern (?&lt;day&gt;\d{2})-(?&lt;mon&gt;\d{2})-(?&lt;year&gt;\d{2})
  -Copy '[A-Z]{3}',l -Whole c -Paste 'CCY_${_c} (${year})-(${mon})-(${day}) ${_a}'</dev:code>
        <dev:remarks>
          <maml:para>Update match contain named capture group using $Paste and preserve the anchor and copy whole last occurrence</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 14 (Cut) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Cut 'data'</dev:code>
        <dev:remarks>
          <maml:para>Cut a literal token</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 15 (Cut) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Cut, l 'data'</dev:code>
        <dev:remarks>
          <maml:para>Cut last occurrence of literal token</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------------------- EXAMPLE 16 (Cut) -----------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Cut, 2 '\d{2}'</dev:code>
        <dev:remarks>
          <maml:para>Cut the second 2 digit sequence</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 17 (Prepend) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Prepend 'begin_'</dev:code>
        <dev:remarks>
          <maml:para>Prefix items with fixed token</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 18 (Append) ---------------------</maml:title>
        <dev:code>gci ... | Rename-Many -Append '_end'</dev:code>
        <dev:remarks>
          <maml:para>Append fixed token to items</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Bulk Renamer</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz/blob/master/resources/docs/bulk-renamer.md</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-ByPlatform</command:name>
      <command:verb>Resolve</command:verb>
      <command:noun>ByPlatform</command:noun>
      <maml:description>
        <maml:para>Given a hashtable, resolves to the value whose corresponding key matches the operating system name as returned by Get-PlatformName.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Provides a way to select data depending on the current OS as determined by Get-PlatformName.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Resolve-ByPlatform</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Hash</maml:name>
          <maml:Description>
            <maml:para>A hashtable object whose keys are values that can be returned by Get-PlatformName. The values can be anything.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Hash</maml:name>
        <maml:Description>
          <maml:para>A hashtable object whose keys are values that can be returned by Get-PlatformName. The values can be anything.</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: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>[hashtable]$platforms = @{
  'windows' = 'windows-info';
  'linux' = 'linux-info';
  'mac' = 'mac-info';
}
Resolve-ByPlatform -Hash $platforms</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------------- EXAMPLE 2 (With default) -------------------</maml:title>
        <dev:code>[hashtable]$platforms = @{
  'windows' = 'windows-info';
  'default' = 'default-info';
}
Resolve-ByPlatform -Hash $platforms</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-PatternOccurrence</command:name>
      <command:verb>Resolve</command:verb>
      <command:noun>PatternOccurrence</command:noun>
      <maml:description>
        <maml:para>Helper function to assist in processing regular expression parameters that can be adorned with an occurrence value.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Since the occurrence part is optional and defaults to mean first occurrence only, this function will fill in the default 'f' when occurrence is not specified.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Resolve-PatternOccurrence</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The value of a regex parameter, which is an array whose first element is the pattern and the second if present is the match occurrence.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
          <dev:type>
            <maml:name>Array</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="0" aliases="none">
        <maml:name>Value</maml:name>
        <maml:Description>
          <maml:para>The value of a regex parameter, which is an array whose first element is the pattern and the second if present is the match occurrence.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array</command:parameterValue>
        <dev:type>
          <maml:name>Array</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-FsItem</command:name>
      <command:verb>Select</command:verb>
      <command:noun>FsItem</command:noun>
      <maml:description>
        <maml:para>A predicate function that indicates whether an item identified by the Name matches the include/exclude filters specified.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Use this utility function to help specify a Condition for Invoke-TraverseDirectory. This function is partly required because the Include/Exclude parameters on functions such as Get-ChildItems/Copy-Item/Get-Item etc only work on files not directories.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Select-FsItem</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:Description>
            <maml:para>A string to be matched against the filters.</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>Includes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If Name matches any of the filters in Includes, and are not Excluded, the result will be true.</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>Excludes</maml:name>
          <maml:Description>
            <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If the Name matches any of the filters in the list, will cause the end result to be false. Any match in the Excludes overrides a match in Includes, so an item that is matched in Include, can be excluded by the Exclude.</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>Case</maml:name>
          <maml:Description>
            <maml:para>Switch parameter which controls case sensitivity of inclusion/exclusion. By default filtering is case insensitive. When The Case switch is specified, filtering is case sensitive.</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>Case</maml:name>
        <maml:Description>
          <maml:para>Switch parameter which controls case sensitivity of inclusion/exclusion. By default filtering is case insensitive. When The Case switch is specified, filtering is case sensitive.</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>Excludes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If the Name matches any of the filters in the list, will cause the end result to be false. Any match in the Excludes overrides a match in Includes, so an item that is matched in Include, can be excluded by the Exclude.</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>Includes</maml:name>
        <maml:Description>
          <maml:para>An array containing a list of filters, each must contain a wild-card ('*'). If a particular filter does not contain a wild-card, then it will be ignored. If Name matches any of the filters in Includes, and are not Excluded, the result will be true.</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="0" aliases="none">
        <maml:name>Name</maml:name>
        <maml:Description>
          <maml:para>A string to be matched against the filters.</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.Boolean</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>[scriptblock]$filterDirectories = {
    [OutputType([boolean])]
    param(
      [System.IO.DirectoryInfo]$directoryInfo
    )
    [string[]]$directoryIncludes = @('A*');
    [string[]]$directoryExcludes = @('*_*', '*-*');
 
    $filterDirectories = Select-FsItem -Name $directoryInfo.Name `
      -Includes $directoryIncludes -Excludes $directoryExcludes;
 
    Invoke-TraverseDirectory -Path &lt;path&gt; -Block &lt;block&gt; -Condition $filterDirectories;
  }</dev:code>
        <dev:remarks>
          <maml:para>Define a Condition that allows only directories beginning with A, but also excludes any directory containing '_' or '-'.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-Patterns</command:name>
      <command:verb>Select</command:verb>
      <command:noun>Patterns</command:noun>
      <maml:description>
        <maml:para>This is a simplified yet enhanced version of standard Select-String command (or the grep command on Linux/Unix/mac) that allows the user to run multiple searches which are chained together to produce its final result.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The main rationale for using this command ("greps" as in multiple grep invokes) instead of Select-String, is for the provision of multiple patterns. Now, Select-String does allow the user to provide multiple Patterns, but the result is a logical OR rather than an AND. greps uses AND by piping the result of each individual Pattern search to the next Pattern search so the result is those lines found that match all the patterns provided rather than all lines that match 1 or more of the patterns. The user can achieve OR functionality by using a | inside the same string; for example to find all lines that contain any of the patterns 'red', 'green' or 'blue', they could just use 'red|green|blue'.</maml:para>
      <maml:para>At the end of the run, greps displays the full command (containing multiple pipeline legs, one for each pattern provided). If so required, the user can re-run the command by running the full command which is displayed and providing different parameters not directly supported by greps.</maml:para>
      <maml:para>'greps', does not currently support input from the pipeline. Perhaps this will be implemented in a future release.</maml:para>
      <maml:para>At some point in the future, it is intended to further enhance greps using a coloured output, whereby a colour is assigned to each pattern and that colour is used to render the result. So where the user has provided multiple patterns, currently, only the first pattern is highlighted in the result. With the coloured enhancement, the user will be able to see all pattern matches in the result with each match displayed in the corresponding allocated colour.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Select-Patterns</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Patterns</maml:name>
          <maml:Description>
            <maml:para>An array of patterns. The result shows all lines that match all the patterns specified. An individual pattern can be prefixed with a not op: '!', which means exclude those lines which match the subsequent pattern; it is a more succinct way of specifying the -NotMatch operator on Select-String. The '!' is not part of the pattern.</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>filter</maml:name>
          <maml:Description>
            <maml:para>Defines which files are considered in the search. It can be a path with a wildcard or simply a wildcard. If its just a wildcard (eg *.txt), then files considered will be from the current directory only.</maml:para>
            <maml:para>The user can define a default filter in the environment as variable 'LOOPZ_GREPS_FILTER' which should be a glob such as '*.txt' to represent all text files. If no filter parameter is supplied to the greps invoke, then the filter is defined by the value of 'LOOPZ_GREPS_FILTER'.</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>filter</maml:name>
        <maml:Description>
          <maml:para>Defines which files are considered in the search. It can be a path with a wildcard or simply a wildcard. If its just a wildcard (eg *.txt), then files considered will be from the current directory only.</maml:para>
          <maml:para>The user can define a default filter in the environment as variable 'LOOPZ_GREPS_FILTER' which should be a glob such as '*.txt' to represent all text files. If no filter parameter is supplied to the greps invoke, then the filter is defined by the value of 'LOOPZ_GREPS_FILTER'.</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="0" aliases="none">
        <maml:name>Patterns</maml:name>
        <maml:Description>
          <maml:para>An array of patterns. The result shows all lines that match all the patterns specified. An individual pattern can be prefixed with a not op: '!', which means exclude those lines which match the subsequent pattern; it is a more succinct way of specifying the -NotMatch operator on Select-String. The '!' is not part of the pattern.</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>greps red, blue *.txt</dev:code>
        <dev:remarks>
          <maml:para>Show lines in all .txt files in the current directory files that contain the patterns 'red' and 'blue'</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>greps 'green lorry', 'yellow lorry' ~/*.txt</dev:code>
        <dev:remarks>
          <maml:para>Show lines in all .txt files in home directory that contain the patterns 'green lorry' and 'yellow lorry'</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>greps foo, !bar</dev:code>
        <dev:remarks>
          <maml:para>Show lines in all files defined in environment as 'LOOPZ_GREPS_FILTER' that contains 'foo' but not 'bar'</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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-SignalContainer</command:name>
      <command:verb>Select</command:verb>
      <command:noun>SignalContainer</command:noun>
      <maml:description>
        <maml:para>Selects a signal into the container specified (either 'Wide' or 'Props'). Wide items will appear on their own line, Props are for items which are short in length and can be combined into the same line.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>This is a wrapper around Get-FormattedSignal in addition to selecting the signal into a container.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Select-SignalContainer</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Containers</maml:name>
          <maml:Description>
            <maml:para>PSCustomObject that contains Wide and Props properties which must be of Krayola's type [line]</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>The signal 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="true" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The value associated wih the signal.</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>Signals</maml:name>
          <maml:Description>
            <maml:para>The signal hashtable collection from which to select the required signal denoted by $Name.</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="4" aliases="none">
          <maml:name>Format</maml:name>
          <maml:Description>
            <maml:para>The format applied to the formatted signal.</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="5" aliases="none">
          <maml:name>Threshold</maml:name>
          <maml:Description>
            <maml:para>A threshold that defines whether the signal is added to Wide or Props.</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="6" aliases="none">
          <maml:name>CustomLabel</maml:name>
          <maml:Description>
            <maml:para>A custom label applied to the formatted signal.</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="7" aliases="none">
          <maml:name>Force</maml:name>
          <maml:Description>
            <maml:para>An override (bypassing $Threshold) to push a signal into a specific collection.</maml:para>
          </maml:Description>
          <command:parameterValueGroup>
            <command:parameterValue required="false" command:variableLength="false">Wide</command:parameterValue>
            <command:parameterValue required="false" command:variableLength="false">Props</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Containers</maml:name>
        <maml:Description>
          <maml:para>PSCustomObject that contains Wide and Props properties which must be of Krayola's type [line]</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>CustomLabel</maml:name>
        <maml:Description>
          <maml:para>A custom label applied to the formatted signal.</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="7" aliases="none">
        <maml:name>Force</maml:name>
        <maml:Description>
          <maml:para>An override (bypassing $Threshold) to push a signal into a specific collection.</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>Format</maml:name>
        <maml:Description>
          <maml:para>The format applied to the formatted signal.</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>The signal 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="3" aliases="none">
        <maml:name>Signals</maml:name>
        <maml:Description>
          <maml:para>The signal hashtable collection from which to select the required signal denoted by $Name.</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="5" aliases="none">
        <maml:name>Threshold</maml:name>
        <maml:Description>
          <maml:para>A threshold that defines whether the signal is added to Wide or Props.</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="False" position="2" aliases="none">
        <maml:name>Value</maml:name>
        <maml:Description>
          <maml:para>The value associated wih the signal.</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-AsTable</command:name>
      <command:verb>Show</command:verb>
      <command:noun>AsTable</command:noun>
      <maml:description>
        <maml:para>Shows the provided data in a coloured table form.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Requires table meta data, headers and values and renders the content according to the options provided. The clint can override the default cell rendering behaviour by providing a render function.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-AsTable</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>MetaData</maml:name>
          <maml:Description>
            <maml:para>Hashtable instance which maps column titles to a PSCustomObject instance that contains display information pertaining to that column. The object must contain</maml:para>
            <maml:para>- FieldName: the name of the column</maml:para>
            <maml:para>- Max: the size of the largest value found in the table data for that column</maml:para>
            <maml:para>- Type: the type of data represented by that column</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="1" aliases="none">
          <maml:name>Headers</maml:name>
          <maml:Description>
            <maml:para>Hashtable instance that represents the headers displayed for the table. Maps the raw column title to the actual text used to display it. In practice, this is a space padded version of the raw title determined from the meta data.</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="2" aliases="none">
          <maml:name>Table</maml:name>
          <maml:Description>
            <maml:para>Hashtable containing the table data. Currently, the data row is indexed by the 'Name' property and as such, the Name in in row must be unique (actually acts like its the primary key for the table; this will be changed in future so that an alternative ID field is used instead of Name.)</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="3" aliases="none">
          <maml:name>Title</maml:name>
          <maml:Description>
            <maml:para>If provided, this will be shown as the title for this table.</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>TitleFormat</maml:name>
          <maml:Description>
            <maml:para>A table title format string which must contain a {0} place holder for the Title to be inserted into.</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="5" aliases="none">
          <maml:name>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Render</maml:name>
          <maml:Description>
            <maml:para>A script-block allowing client defined cell rendering logic. The Render script-block contains the following parameters:</maml:para>
            <maml:para>- Column: spaced padded column title, indicating which column this cell is in.</maml:para>
            <maml:para>- Value: the current value of the cell being rendered.</maml:para>
            <maml:para>- row: a PSCustomObject containing all the field values for the current row. The whole</maml:para>
            <maml:para>row is presented to the cell render function so that cross field functionality can be defined. - Options: The table display options</maml:para>
            <maml:para>- Scribbler: The Krayola scribbler instance</maml:para>
            <maml:para>- counter: the row number</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
          <dev:type>
            <maml:name>ScriptBlock</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="7" aliases="none">
          <maml:name>Options</maml:name>
          <maml:Description>
            <maml:para>The table display options (See command Get-TableDisplayOptions (#Get-TableDisplayOptions.md))</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
          <dev:type>
            <maml:name>PSObject</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>Headers</maml:name>
        <maml:Description>
          <maml:para>Hashtable instance that represents the headers displayed for the table. Maps the raw column title to the actual text used to display it. In practice, this is a space padded version of the raw title determined from the meta data.</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="0" aliases="none">
        <maml:name>MetaData</maml:name>
        <maml:Description>
          <maml:para>Hashtable instance which maps column titles to a PSCustomObject instance that contains display information pertaining to that column. The object must contain</maml:para>
          <maml:para>- FieldName: the name of the column</maml:para>
          <maml:para>- Max: the size of the largest value found in the table data for that column</maml:para>
          <maml:para>- Type: the type of data represented by that column</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="7" aliases="none">
        <maml:name>Options</maml:name>
        <maml:Description>
          <maml:para>The table display options (See command Get-TableDisplayOptions (#Get-TableDisplayOptions.md))</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">PSObject</command:parameterValue>
        <dev:type>
          <maml:name>PSObject</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>Render</maml:name>
        <maml:Description>
          <maml:para>A script-block allowing client defined cell rendering logic. The Render script-block contains the following parameters:</maml:para>
          <maml:para>- Column: spaced padded column title, indicating which column this cell is in.</maml:para>
          <maml:para>- Value: the current value of the cell being rendered.</maml:para>
          <maml:para>- row: a PSCustomObject containing all the field values for the current row. The whole</maml:para>
          <maml:para>row is presented to the cell render function so that cross field functionality can be defined. - Options: The table display options</maml:para>
          <maml:para>- Scribbler: The Krayola scribbler instance</maml:para>
          <maml:para>- counter: the row number</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">ScriptBlock</command:parameterValue>
        <dev:type>
          <maml:name>ScriptBlock</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="5" aliases="none">
        <maml:name>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Table</maml:name>
        <maml:Description>
          <maml:para>Hashtable containing the table data. Currently, the data row is indexed by the 'Name' property and as such, the Name in in row must be unique (actually acts like its the primary key for the table; this will be changed in future so that an alternative ID field is used instead of Name.)</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="3" aliases="none">
        <maml:name>Title</maml:name>
        <maml:Description>
          <maml:para>If provided, this will be shown as the title for this table.</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>TitleFormat</maml:name>
        <maml:Description>
          <maml:para>A table title format string which must contain a {0} place holder for the Title to be inserted into.</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-Header</command:name>
      <command:verb>Show</command:verb>
      <command:noun>Header</command:noun>
      <maml:description>
        <maml:para>Function to display header as part of an iteration batch.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Behaviour can be customised by the following entries in the Exchange:</maml:para>
      <maml:para>* 'LOOPZ.KRAYON' (mandatory): the Krayola Krayon writer object.</maml:para>
      <maml:para>* 'LOOPZ.HEADER-BLOCK.MESSAGE': The custom message to be displayed as</maml:para>
      <maml:para>part of the header. * 'LOOPZ.HEADER.PROPERTIES': A Krayon [line] instance contain a collection of Krayola [couplet]s. When present, the header displayed will be a static line, the collection of these properties then another static line. * 'LOOPZ.HEADER-BLOCK.LINE': The static line text. The length of this line controls how everything else is aligned (ie the flex part and the message if present).</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-Header</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Exchange</maml:name>
          <maml:Description>
            <maml:para>The exchange hashtable object.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Exchange</maml:name>
        <maml:Description>
          <maml:para>The exchange hashtable object.</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: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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-InvokeReport</command:name>
      <command:verb>Show</command:verb>
      <command:noun>InvokeReport</command:noun>
      <maml:description>
        <maml:para>Given a list of parameters, shows which parameter set they resolve to. If they don't resolve to a parameter set then this is reported. If the parameters resolve to more than one parameter set, then all possible candidates are reported. This is a helper function which end users and developers alike can use to determine which parameter sets are in play for a given list of parameters. It was built to counter the un helpful message one sees when a command is invoked either with insufficient or an incorrect combination:</maml:para>
        <maml:para>"Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.".</maml:para>
        <maml:para>Of course not all error scenarios can be detected, but some are which is better than none. This command is a substitute for actually invoking the target command. The target command may not be safe to invoke on an ad-hoc basis, so it's safer to invoke this command specifying the parameters without their values.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>If no errors were found with any the parameter sets for this command, then the result is simply a message indicating no problems found. If the user wants to just get the parameter set info for a command, then they can use command Show-ParameterSetInfo instead.</maml:para>
      <maml:para>Parameter set violations are defined as rules. The following rules are defined:</maml:para>
      <maml:para>- 'Non Unique Parameter Set': Each parameter set must have at least one unique parameter. If possible, make this parameter a mandatory parameter. - 'Non Unique Positions': A parameter set that contains multiple positional parameters must define unique positions for each parameter. No two positional parameters can specify the same position. - 'Multiple Claims to Pipeline item': Only one parameter in a set can declare the ValueFromPipeline keyword with a value of true. - 'In All Parameter Sets By Accident': Defining a parameter with multiple 'Parameter Blocks', some with and some without a parameter set, is invalid.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-InvokeReport</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>Common</maml:name>
          <maml:Description>
            <maml:para>switch to indicate if the standard PowerShell Common parameters show be included</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>InputObject</maml:name>
          <maml:Description>
            <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
          <dev:type>
            <maml:name>Array[]</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>Params</maml:name>
          <maml:Description>
            <maml:para>The set of parameter names the command is invoked for. This is like invoking the command without specifying the values of the parameters.</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>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Strict</maml:name>
          <maml:Description>
            <maml:para>When specified, will not use Mandatory parameters check to for candidate parameter sets.</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Show-InvokeReport</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:Description>
            <maml:para>The name of the command to show invoke report for. Can be alias or full command 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="none">
          <maml:name>Common</maml:name>
          <maml:Description>
            <maml:para>switch to indicate if the standard PowerShell Common parameters show be included</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>Params</maml:name>
          <maml:Description>
            <maml:para>The set of parameter names the command is invoked for. This is like invoking the command without specifying the values of the parameters.</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>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Strict</maml:name>
          <maml:Description>
            <maml:para>When specified, will not use Mandatory parameters check to for candidate parameter sets.</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Common</maml:name>
        <maml:Description>
          <maml:para>switch to indicate if the standard PowerShell Common parameters show be included</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>InputObject</maml:name>
        <maml:Description>
          <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
        <dev:type>
          <maml:name>Array[]</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>Name</maml:name>
        <maml:Description>
          <maml:para>The name of the command to show invoke report for. Can be alias or full command 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="true" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>Params</maml:name>
        <maml:Description>
          <maml:para>The set of parameter names the command is invoked for. This is like invoking the command without specifying the values of the parameters.</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>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Strict</maml:name>
        <maml:Description>
          <maml:para>When specified, will not use Mandatory parameters check to for candidate parameter sets.</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>Test</maml:name>
        <maml:Description>
          <maml:para>Required by unit tests only.</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>System.String[] or CommandInfo[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Parameter `$Name`, can be CommandInfo derived from get-Command or simply the name of the command as a string. Multiple items can be specified using array notation.</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 (CommandInfo via pipeline) -------------</maml:title>
        <dev:code>Get-Command 'Rename-Many' | Show-InvokeReport params underscore, Pattern, Anchor, With</dev:code>
        <dev:remarks>
          <maml:para>Show invoke report for command 'Rename-Many' from its command info</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------ EXAMPLE 2 (command name via pipeline) ------------</maml:title>
        <dev:code>'Rename-Many' | Show-InvokeReport -params underscore, Pattern, Anchor, With</dev:code>
        <dev:remarks>
          <maml:para>Show invoke report for command 'Rename-Many' from its command info</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 3 (by Name) ---------------------</maml:title>
        <dev:code>Show-InvokeReport -Name 'Rename-Many' -params underscore, Pattern, Anchor, With</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-ParameterSetInfo</command:name>
      <command:verb>Show</command:verb>
      <command:noun>ParameterSetInfo</command:noun>
      <maml:description>
        <maml:para>Displays information for a commands parameter sets. This includes the standard syntax statement associated with each parameter set, but is also coloured in, to help readability.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>If the command does not define parameter sets, then no information is displayed apart from a message indicating no parameter sets were found.</maml:para>
      <maml:para>One of the issues that a developer can encounter when designing parameter sets for a command is making sure that each parameter set includes at least 1 unique parameter as per recommendations. This function will greatly help in this regard. For each parameter set shown, the table it contains includes a 'Unique' column which shows whether a the parameter is unique to that parameter set. This relieves the developer from having to figure this out themselves.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-ParameterSetInfo</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Sets</maml:name>
          <maml:Description>
            <maml:para>A list of parameter sets the output should be restricted to. When not specified, all parameter sets are displayed.</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>Common</maml:name>
          <maml:Description>
            <maml:para>switch to indicate if the standard PowerShell Common parameters should be included</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>InputObject</maml:name>
          <maml:Description>
            <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
          <dev:type>
            <maml:name>Array[]</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>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Title</maml:name>
          <maml:Description>
            <maml:para>The text displayed as a title. End user does not have to specify this value. It is useful to other client command that invoke this one, so some context can be added to the display.</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>Show-ParameterSetInfo</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:Description>
            <maml:para>The name of the command to show parameter set info report for. Can be alias or full command 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="1" aliases="none">
          <maml:name>Sets</maml:name>
          <maml:Description>
            <maml:para>A list of parameter sets the output should be restricted to. When not specified, all parameter sets are displayed.</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>Common</maml:name>
          <maml:Description>
            <maml:para>switch to indicate if the standard PowerShell Common parameters should be included</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>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Title</maml:name>
          <maml:Description>
            <maml:para>The text displayed as a title. End user does not have to specify this value. It is useful to other client command that invoke this one, so some context can be added to the display.</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>Common</maml:name>
        <maml:Description>
          <maml:para>switch to indicate if the standard PowerShell Common parameters should be included</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>InputObject</maml:name>
        <maml:Description>
          <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
        <dev:type>
          <maml:name>Array[]</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>Name</maml:name>
        <maml:Description>
          <maml:para>The name of the command to show parameter set info report for. Can be alias or full command 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="none">
        <maml:name>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Sets</maml:name>
        <maml:Description>
          <maml:para>A list of parameter sets the output should be restricted to. When not specified, all parameter sets are displayed.</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>Test</maml:name>
        <maml:Description>
          <maml:para>Required by unit tests only.</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>Title</maml:name>
        <maml:Description>
          <maml:para>The text displayed as a title. End user does not have to specify this value. It is useful to other client command that invoke this one, so some context can be added to the display.</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>System.String[] or CommandInfo[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Parameter `$Name`, can be CommandInfo derived from get-Command or simply the name of the command as a string. Multiple items can be specified using array notation.</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 (Show all parameter sets, CommandInfo via pipeline) </maml:title>
        <dev:code>Get-Command 'Rename-Many' | Show-ParameterSetInfo</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>EXAMPLE 2 (Show all parameter sets with Common parameters, command name via pipeline)</maml:title>
        <dev:code>'Rename-Many' | Show-ParameterSetInfo -Common</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>EXAMPLE 3 (Show specified parameter sets, command name via pipeline)</maml:title>
        <dev:code>'Rename-Many' | Show-ParameterSetInfo -Sets MoveToAnchor, UpdateInPlace</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 4 (By Name) ---------------------</maml:title>
        <dev:code>Show-ParameterSetInfo -Name 'Rename-Many' -Sets MoveToAnchor, UpdateInPlace</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-ParameterSetReport</command:name>
      <command:verb>Show</command:verb>
      <command:noun>ParameterSetReport</command:noun>
      <maml:description>
        <maml:para>Shows a reporting indicating problems with a command's parameter sets.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>If no errors were found with any the parameter sets for this command, then the result is simply a message indicating no problems found. If the user wants to just get the parameter set info for a command, then they can use command Show-ParameterSetInfo instead.</maml:para>
      <maml:para>Parameter set violations are defined as rules. The following rules are defined:</maml:para>
      <maml:para>- 'Non Unique Parameter Set': Each parameter set must have at least one unique parameter. If possible, make this parameter a mandatory parameter. - 'Non Unique Positions': A parameter set that contains multiple positional parameters must define unique positions for each parameter. No two positional parameters can specify the same position. - 'Multiple Claims to Pipeline item': Only one parameter in a set can declare the ValueFromPipeline keyword with a value of true. - 'In All Parameter Sets By Accident': Defining a parameter with multiple 'Parameter Blocks', some with and some without a parameter set, is invalid.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-ParameterSetReport</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="named" aliases="none">
          <maml:name>InputObject</maml:name>
          <maml:Description>
            <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
          <dev:type>
            <maml:name>Array[]</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>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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>Show-ParameterSetReport</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Name</maml:name>
          <maml:Description>
            <maml:para>The name of the command to show parameter set report for. Can be alias or full command 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="none">
          <maml:name>Scribbler</maml:name>
          <maml:Description>
            <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
          <dev:type>
            <maml:name>Scribbler</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>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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, ByValue)" position="named" aliases="none">
        <maml:name>InputObject</maml:name>
        <maml:Description>
          <maml:para>Item(s) from the pipeline. Can be command/alias name of the command, or command/alias info obtained via Get-Command.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Array[]</command:parameterValue>
        <dev:type>
          <maml:name>Array[]</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>Name</maml:name>
        <maml:Description>
          <maml:para>The name of the command to show parameter set report for. Can be alias or full command 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="none">
        <maml:name>Scribbler</maml:name>
        <maml:Description>
          <maml:para>The Krayola scribbler instance used to manage rendering to console</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Scribbler</command:parameterValue>
        <dev:type>
          <maml:name>Scribbler</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>Test</maml:name>
        <maml:Description>
          <maml:para>Required by unit tests only.</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>System.String[] or CommandInfo[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Parameter `$Name`, can be CommandInfo derived from get-Command or simply the name of the command as a string. Multiple items can be specified using array notation.</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 (CommandInfo via pipeline) -------------</maml:title>
        <dev:code>Get Command Rename-Many | Show-ParameterSetReport</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------ EXAMPLE 2 (command name via pipeline) ------------</maml:title>
        <dev:code>'Rename-Many' | Show-ParameterSetReport</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------------------- EXAMPLE 3 (By Name) ---------------------</maml:title>
        <dev:code>Show-ParameterSetReport -Name 'Rename-Many'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-Signals</command:name>
      <command:verb>Show</command:verb>
      <command:noun>Signals</command:noun>
      <maml:description>
        <maml:para>Shows all defined signals, including user defined signals.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>User can override signal definitions in their profile, typically using the provided function Update-CustomSignals.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-Signals</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>SourceSignals</maml:name>
          <maml:Description>
            <maml:para>Hashtable containing signals to be displayed.</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="none">
          <maml:name>Include</maml:name>
          <maml:Description>
            <maml:para>Provides a filter. When specified, only the applications included in the list will be shown.</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>Registry</maml:name>
          <maml:Description>
            <maml:para>Hashtable containing information concerning commands usage of signals.</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="none">
          <maml:name>Test</maml:name>
          <maml:Description>
            <maml:para>Required by unit tests only.</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="0" aliases="none">
        <maml:name>SourceSignals</maml:name>
        <maml:Description>
          <maml:para>Hashtable containing signals to be displayed.</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="none">
        <maml:name>Include</maml:name>
        <maml:Description>
          <maml:para>Provides a filter. When specified, only the applications included in the list will be shown.</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>Registry</maml:name>
        <maml:Description>
          <maml:para>Hashtable containing information concerning commands usage of signals.</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="none">
        <maml:name>Test</maml:name>
        <maml:Description>
          <maml:para>Required by unit tests only.</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>Show-Signals</dev:code>
        <dev:remarks>
          <maml:para>Show signal definitions and references for all registered commands</maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- EXAMPLE 2 --------------------------</maml:title>
        <dev:code>Show-Signals -Include remy, ships</dev:code>
        <dev:remarks>
          <maml:para>Show the signal definitions and references for commands 'remy' and 'ships' only</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Show-Summary</command:name>
      <command:verb>Show</command:verb>
      <command:noun>Summary</command:noun>
      <maml:description>
        <maml:para>Function to display summary as part of an iteration batch.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Behaviour can be customised by the following entries in the Exchange:</maml:para>
      <maml:para>* 'LOOPZ.KRAYON' (mandatory): the Krayola Krayon writer object.</maml:para>
      <maml:para>* 'LOOPZ.SUMMARY-BLOCK.MESSAGE': The custom message to be displayed as</maml:para>
      <maml:para>part of the summary. * 'LOOPZ.SUMMARY.PROPERTIES': A Krayon [line] instance contain a collection of Krayola [couplet]s. The first line of summary properties shows the values of $Count, $Skipped and $Triggered. The properties, if present are appended to this line. * 'LOOPZ.SUMMARY-BLOCK.LINE': The static line text. The length of this line controls how everything else is aligned (ie the flex part and the message if present). * 'LOOPZ.SUMMARY-BLOCK.WIDE-ITEMS': The collection (an array of Krayola [lines]s) containing 'wide' items and therefore should be on their own separate line.</maml:para>
      <maml:para>* 'LOOPZ.SUMMARY-BLOCK.GROUP-WIDE-ITEMS': Perhaps the wide items are not so wide after all, so if this entry is set (a boolean value), the all wide items appear on their own line.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Show-Summary</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Count</maml:name>
          <maml:Description>
            <maml:para>The number items processed, this is the number of items in the pipeline which match the $Pattern specified and therefore are allocated an index.</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="1" aliases="none">
          <maml:name>Skipped</maml:name>
          <maml:Description>
            <maml:para>The number of pipeline items skipped. An item is skipped for the following reasons:</maml:para>
            <maml:para>* Item name does not match the $Include expression</maml:para>
            <maml:para>* Item name satisfies the $Exclude expression. ($Exclude overrides $Include)</maml:para>
            <maml:para>* Iteration is terminated early by the invoked function/script-block returning a</maml:para>
            <maml:para>PSCustomObject with a Break property set to $true.</maml:para>
            <maml:para>* FileSystem item is not of the request type. Eg, if File is specified, then all directory items will be skipped.</maml:para>
            <maml:para>* An item fails to satisfy the $Condition predicate.</maml:para>
            <maml:para>* Number of items processed breaches Top.</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="2" aliases="none">
          <maml:name>Triggered</maml:name>
          <maml:Description>
            <maml:para>Indicates whether any of the processed pipeline items were actioned in a modifying batch; ie if no items were mutated, then Triggered would be $false.</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="False" position="3" aliases="none">
          <maml:name>Exchange</maml:name>
          <maml:Description>
            <maml:para>The exchange hashtable object.</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="none">
          <maml:name>Errors</maml:name>
          <maml:Description>
            <maml:para>The number of errors that occurred during the batch.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Count</maml:name>
        <maml:Description>
          <maml:para>The number items processed, this is the number of items in the pipeline which match the $Pattern specified and therefore are allocated an index.</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="3" aliases="none">
        <maml:name>Exchange</maml:name>
        <maml:Description>
          <maml:para>The exchange hashtable object.</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="1" aliases="none">
        <maml:name>Skipped</maml:name>
        <maml:Description>
          <maml:para>The number of pipeline items skipped. An item is skipped for the following reasons:</maml:para>
          <maml:para>* Item name does not match the $Include expression</maml:para>
          <maml:para>* Item name satisfies the $Exclude expression. ($Exclude overrides $Include)</maml:para>
          <maml:para>* Iteration is terminated early by the invoked function/script-block returning a</maml:para>
          <maml:para>PSCustomObject with a Break property set to $true.</maml:para>
          <maml:para>* FileSystem item is not of the request type. Eg, if File is specified, then all directory items will be skipped.</maml:para>
          <maml:para>* An item fails to satisfy the $Condition predicate.</maml:para>
          <maml:para>* Number of items processed breaches Top.</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="2" aliases="none">
        <maml:name>Triggered</maml:name>
        <maml:Description>
          <maml:para>Indicates whether any of the processed pipeline items were actioned in a modifying batch; ie if no items were mutated, then Triggered would be $false.</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="False" position="named" aliases="none">
        <maml:name>Errors</maml:name>
        <maml:Description>
          <maml:para>The number of errors that occurred during the batch.</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: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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Split-Match</command:name>
      <command:verb>Split</command:verb>
      <command:noun>Match</command:noun>
      <maml:description>
        <maml:para>Function to display summary as part of an iteration batch.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Helper function to get the pattern match and the remaining text. This helper helps us to avoid unnecessary duplicated reg ex matches. It returns up to 3 items inside an array, the first is the matched text, the second is the source with the matched text removed and the third is the match object that represents the matched text.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Split-Match</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Source</maml:name>
          <maml:Description>
            <maml:para>The source value against which regular expression is applied.</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>PatternRegEx</maml:name>
          <maml:Description>
            <maml:para>The regex object to apply to the $Source.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>Occurrence</maml:name>
          <maml:Description>
            <maml:para>Denotes which match should 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="false" variableLength="true" globbing="false" pipelineInput="False" position="3" aliases="none">
          <maml:name>Marker</maml:name>
          <maml:Description>
            <maml:para>A character used to mark the place where the $PatternRegEx's match was removed from. It should be a special character that is not easily typed on the keyboard by the user so as to not interfere wth $Anchor/$Copy matches which occur after $Pattern match is removed.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
          <dev:type>
            <maml:name>Char</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>CapturedOnly</maml:name>
          <maml:Description>
            <maml:para>switch parameter to indicate what should be returned. When the client does not need the match object or the remainder, they can use this switch to ensure only the matched text is 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="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>CapturedOnly</maml:name>
        <maml:Description>
          <maml:para>switch parameter to indicate what should be returned. When the client does not need the match object or the remainder, they can use this switch to ensure only the matched text is 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="3" aliases="none">
        <maml:name>Marker</maml:name>
        <maml:Description>
          <maml:para>A character used to mark the place where the $PatternRegEx's match was removed from. It should be a special character that is not easily typed on the keyboard by the user so as to not interfere wth $Anchor/$Copy matches which occur after $Pattern match is removed.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Char</command:parameterValue>
        <dev:type>
          <maml:name>Char</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>Occurrence</maml:name>
        <maml:Description>
          <maml:para>Denotes which match should 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="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>PatternRegEx</maml:name>
        <maml:Description>
          <maml:para>The regex object to apply to the $Source.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>Source</maml:name>
        <maml:Description>
          <maml:para>The source value against which regular expression is applied.</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 (Return full match info) --------------</maml:title>
        <dev:code>[regex]$re = New-RegularExpression -Expression '(?\&lt;d\&gt;\d{2})-(?\&lt;m\&gt;\d{2})-(?\&lt;y\&gt;\d{4})'
[string]$captured, [string]$remainder, $matchInfo = Split-Match -Source '23-06-2006 - Ex' -PatternRegEx $re</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------------ EXAMPLE 2 (Return captured text only) ------------</maml:title>
        <dev:code>[regex]$re = New-RegularExpression -Expression '(?\&lt;d\&gt;\d{2})-(?\&lt;m\&gt;\d{2})-(?\&lt;y\&gt;\d{4})'
[string]$captured = Split-Match -Source '23-06-2006 - Ex' -PatternRegEx $re -CapturedOnly</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Test-ContainsAll</command:name>
      <command:verb>Test</command:verb>
      <command:noun>ContainsAll</command:noun>
      <maml:description>
        <maml:para>Given two sequences of strings, determines if first contains all elements of the other.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Is the first set a super set of the second.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Test-ContainsAll</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Super</maml:name>
          <maml:Description>
            <maml:para>The super set (First)</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>Sub</maml:name>
          <maml:Description>
            <maml:para>The sub set (Second)</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="1" aliases="none">
        <maml:name>Sub</maml:name>
        <maml:Description>
          <maml:para>The sub set (Second)</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="0" aliases="none">
        <maml:name>Super</maml:name>
        <maml:Description>
          <maml:para>The super set (First)</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.Boolean</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns $true if Super contains all the elements of Sub, $false otherwise.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Test-HostSupportsEmojis</command:name>
      <command:verb>Test</command:verb>
      <command:noun>HostSupportsEmojis</command:noun>
      <maml:description>
        <maml:para>This is a rudimentary function to determine if the host can display emojis. This function will be super-ceded when this issue (on microsoft/terminal https://github.com/microsoft/terminal/issues/1040) is resolved.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>There is currently no standard way to determine this. As a crude workaround, this function can determine if the host is Windows Terminal and returns true. Fluent Terminal can display emojis, but does not render them very gracefully, so the default value returned for Fluent is false. Its assumed that hosts on Linux and Mac can support the display of emojis, so they return true. If user want to enforce using emojis, then they can define LOOPZ_FORCE_EMOJIS in the environment, this will force this function to return.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Test-HostSupportsEmojis</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.Boolean</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns $true if Host is deemed to support emoji display, $false otherwise.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Test-Intersect</command:name>
      <command:verb>Test</command:verb>
      <command:noun>Intersect</command:noun>
      <maml:description>
        <maml:para>Determines if two sets of strings contains any common elements.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Essentially asks the question, 'Do the two sets intersect'.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Test-Intersect</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>First</maml:name>
          <maml:Description>
            <maml:para>First collection of strings to compare.</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>Second</maml:name>
          <maml:Description>
            <maml:para>Second collection of strings to compare.</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>First</maml:name>
        <maml:Description>
          <maml:para>First collection of strings to compare.</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>Second</maml:name>
        <maml:Description>
          <maml:para>Second collection of strings to compare.</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.Boolean</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns $true if the 2 sets share common element, $false otherwise.</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Test-IsAlreadyAnchoredAt</command:name>
      <command:verb>Test</command:verb>
      <command:noun>IsAlreadyAnchoredAt</command:noun>
      <maml:description>
        <maml:para>Checks to see if a given pattern is matched at the start or end of an input string.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>When Rename-Many uses the Start or End switches to move a match to the corresponding location, it needs to filter out those entries where the specified occurrence of the Pattern is already at the desire location. We can't do this using a synthetic anchored regex using ^ and $, rather we must use the origin regex, perform the match and then see where that match resides, by consulting the index and length of that match instance.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Test-IsAlreadyAnchoredAt</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 input source</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>Expression</maml:name>
          <maml:Description>
            <maml:para>A regex instance to match against</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>Occurrence</maml:name>
          <maml:Description>
            <maml:para>Which match occurrence in Expression do we want to check</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>End</maml:name>
          <maml:Description>
            <maml:para>Check match is at the end of the input source</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>Start</maml:name>
          <maml:Description>
            <maml:para>Check match is at the start of the input source</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>End</maml:name>
        <maml:Description>
          <maml:para>Check match is at the end of the input source</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>Expression</maml:name>
        <maml:Description>
          <maml:para>A regex instance to match against</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>Occurrence</maml:name>
        <maml:Description>
          <maml:para>Which match occurrence in Expression do we want to check</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 input source</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>Start</maml:name>
        <maml:Description>
          <maml:para>Check match is at the start of the input source</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.Boolean</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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Test-IsFileSystemSafe</command:name>
      <command:verb>Test</command:verb>
      <command:noun>IsFileSystemSafe</command:noun>
      <maml:description>
        <maml:para>Checks the $Value to see if it contains any file-system un-safe characters.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Warning, this function is not comprehensive nor platform specific, but it does not intend to be. There are some characters eg /, that are are allowable under mac/linux as part of the filename but are not under windows; in this case they are considered unsafe for all platforms. This approach is taken because of the likely possibility that a file may be copied over from differing file system types.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Test-IsFileSystemSafe</maml:name>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The string value to check.</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>InvalidSet</maml:name>
          <maml:Description>
            <maml:para>(Client does not need to specify this parameter; used for testing purposes only).</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Char[]</command:parameterValue>
          <dev:type>
            <maml:name>Char[]</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>InvalidSet</maml:name>
        <maml:Description>
          <maml:para>(Client does not need to specify this parameter; used for testing purposes only).</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Char[]</command:parameterValue>
        <dev:type>
          <maml:name>Char[]</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>Value</maml:name>
        <maml:Description>
          <maml:para>The string value to check.</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.Boolean</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns $true if the value contains ony file-system safe characters only, $false otherwise</maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples />
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Update-CustomSignals</command:name>
      <command:verb>Update</command:verb>
      <command:noun>CustomSignals</command:noun>
      <maml:description>
        <maml:para>Allows user to override the emoji's for commands</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>A user may want to customise the appear of commands that use signals in their display. The user can specify overrides for any of the declared signals (See Show-Signals). Typically, the user should invoke this in their profile script.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Update-CustomSignals</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Signals</maml:name>
          <maml:Description>
            <maml:para>A hashtable containing signal overrides.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Signals</maml:name>
        <maml:Description>
          <maml:para>A hashtable containing signal overrides.</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: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>[hashtable]$myOverrides = @{
    'PATTERN' = $(kp(@('Capture', '👾')));
    'LOCKED' = $(kp(@('No soup for you', '🥣')));
  }
  Update-CustomSignals -Signals $myOverrides</dev:code>
        <dev:remarks>
          <maml:para>Override signals 'PATTERN' and 'LOCKED' with custom emojis.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Update-GroupRefs</command:name>
      <command:verb>Update</command:verb>
      <command:noun>GroupRefs</command:noun>
      <maml:description>
        <maml:para>Updates group references with their captured values.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a new string that reflects the replacement of group named references. The only exception is $0, meaning the whole match (not required).</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Update-GroupRefs</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 source value containing group references.</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>Captures</maml:name>
          <maml:Description>
            <maml:para>Hashtable mapping named group reference to group capture value.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
        <maml:name>Captures</maml:name>
        <maml:Description>
          <maml:para>Hashtable mapping named group reference to group capture value.</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="0" aliases="none">
        <maml:name>Source</maml:name>
        <maml:Description>
          <maml:para>The source value containing group references.</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.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:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Update-Match</command:name>
      <command:verb>Update</command:verb>
      <command:noun>Match</command:noun>
      <maml:description>
        <maml:para>The core update match action function principally used by Rename-Many. Updates $Pattern match in it's current location.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>Returns a new string that reflects updating the specified $Pattern match. Firstly, Update-Match removes the Pattern match from $Value. This makes the With and Copy match against the remainder ($patternRemoved) of $Value. This way, there is no overlap between the Pattern match and $Paste and it also makes the functionality more understandable for the user. NB: Pattern only tells you what to remove, but it's the Copy and Paste that defines what to insert.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Update-Match</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="1" aliases="none">
          <maml:name>Pattern</maml:name>
          <maml:Description>
            <maml:para>Regular expression string that indicates which part of the $Value that either needs to be moved or replaced as part of overall rename operation. Those characters in $Value which match $Pattern, are removed.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>PatternOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l</maml:para>
            <maml:para>* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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>Copy</maml:name>
          <maml:Description>
            <maml:para>Regular expression string applied to $Value (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste). Since this is a regular expression to be used in $Paste, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste. The value in the $Copy parameter comes when a non literal pattern is defined eg \d{3} (is non literal), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
          <dev:type>
            <maml:name>Regex</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>CopyOccurrence</maml:name>
          <maml:Description>
            <maml:para>Can be a number or the letters f, l</maml:para>
            <maml:para>* f: first occurrence</maml:para>
            <maml:para>* l: last occurrence</maml:para>
            <maml:para>* &lt;number&gt;: the nth occurrence</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="5" aliases="none">
          <maml:name>Value</maml:name>
          <maml:Description>
            <maml:para>The source value against which regular expressions are applied.</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="6" aliases="none">
          <maml:name>Paste</maml:name>
          <maml:Description>
            <maml:para>Formatter parameter for Update operations. Can contain named/numbered group references defined inside regular expression parameters, or use special named references $0 for the whole Pattern match and ${_c} for the whole Copy match. The Paste can also contain named/numbered group references defined in $Pattern.</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>Diagnose</maml:name>
          <maml:Description>
            <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be specified.</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="3" aliases="none">
        <maml:name>Copy</maml:name>
        <maml:Description>
          <maml:para>Regular expression string applied to $Value (after the $Pattern match has been removed), indicating a portion which should be copied and re-inserted (via the $Paste parameter; see $Paste). Since this is a regular expression to be used in $Paste, there is no value in the user specifying a static pattern, because that static string can just be defined in $Paste. The value in the $Copy parameter comes when a non literal pattern is defined eg \d{3} (is non literal), specifies any 3 digits as opposed to say '123', which could be used directly in the $Paste parameter without the need for $Copy. The match defined by $Copy is stored in special variable ${_c} and can be referenced as such from $Paste.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>CopyOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l</maml:para>
          <maml:para>* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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>Diagnose</maml:name>
        <maml:Description>
          <maml:para>switch parameter that indicates the command should be run in WhatIf mode. When enabled it presents additional information that assists the user in correcting the un-expected results caused by an incorrect/un-intended regular expression. The current diagnosis will show the contents of named capture groups that they may have specified. When an item is not renamed (usually because of an incorrect regular expression), the user can use the diagnostics along side the 'Not Renamed' reason to track down errors. When $Diagnose has been specified, $WhatIf does not need to be 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="6" aliases="none">
        <maml:name>Paste</maml:name>
        <maml:Description>
          <maml:para>Formatter parameter for Update operations. Can contain named/numbered group references defined inside regular expression parameters, or use special named references $0 for the whole Pattern match and ${_c} for the whole Copy match. The Paste can also contain named/numbered group references defined in $Pattern.</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>Pattern</maml:name>
        <maml:Description>
          <maml:para>Regular expression string that indicates which part of the $Value that either needs to be moved or replaced as part of overall rename operation. Those characters in $Value which match $Pattern, are removed.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Regex</command:parameterValue>
        <dev:type>
          <maml:name>Regex</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>PatternOccurrence</maml:name>
        <maml:Description>
          <maml:para>Can be a number or the letters f, l</maml:para>
          <maml:para>* f: first occurrence</maml:para>
          <maml:para>* l: last occurrence</maml:para>
          <maml:para>* &lt;number&gt;: the nth occurrence</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="0" aliases="none">
        <maml:name>Value</maml:name>
        <maml:Description>
          <maml:para>The source value against which regular expressions are applied.</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.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para>Returns the string which reflects match update operation.</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 (Update with literal content) -----------</maml:title>
        <dev:code>Update-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Paste '----X--X--'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------- EXAMPLE 2 (Update with variable content) -----------</maml:title>
        <dev:code>[string]$today = Get-Date -Format 'yyyy-MM-dd'
Update-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Paste $('_(' + $today + ')_')</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------- EXAMPLE 3 (Update with whole copy reference) ---------</maml:title>
        <dev:code>Update-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Paste '${_c},----X--X--' -Copy '[^\s]+'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>----------- EXAMPLE 4 (Update with group references) -----------</maml:title>
        <dev:code>Update-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Paste '${first},----X--X--' -Copy '(?&lt;first&gt;[^\s]+)'</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--------- EXAMPLE 5 (Update with 2nd copy occurrence) ---------</maml:title>
        <dev:code>Update-Match 'VAL 1999-02-21 + RH - CLOSE' '(?\&lt;dt\&gt;\d{4}-\d{2}-\d{2})' -Paste '${_c},----X--X--' -Copy '[^\s]+' -CopyOccurrence 2</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</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>Write-HostFeItemDecorator</command:name>
      <command:verb>Write</command:verb>
      <command:noun>HostFeItemDecorator</command:noun>
      <maml:description>
        <maml:para>Wraps a function or script-block as a decorator writing appropriate user interface info to the host for each entry in the pipeline.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The script-block/function (invokee) being decorated may or may not Support ShouldProcess. If it does, then the client should add 'WHAT-IF' to the pass through, set to the current value of WhatIf; or more accurately the existence of 'WhatIf' in PSBoundParameters. Or another way of putting it is, the presence of WHAT-IF indicates SupportsShouldProcess, and the value of 'WHAT-IF' dictates the value of WhatIf. This way, we only need a single value in the Exchange, rather than having to represent SupportShouldProcess explicitly with another value.</maml:para>
      <maml:para>The Exchange must contain either a 'LOOPZ.WH-FOREACH-DECORATOR.FUNCTION-NAME' entry meaning a named function is being decorated or 'LOOPZ.WH-FOREACH-DECORATOR.BLOCK' meaning a script block is being decorated, but not both.</maml:para>
      <maml:para>By default, Write-HostFeItemDecorator will display an item no for each object in the pipeline and a property representing the Product. The Product is a property that the invokee can set on the PSCustomObject it returns. However, additional properties can be displayed. This can be achieved by the invokee populating another property Pairs, which is an array of string based key/value pairs. All properties found in Pairs will be written out by Write-HostFeItemDecorator.</maml:para>
      <maml:para>By default, to render the value displayed (ie the 'Product' property item on the PSCustomObject returned by the invokee), ToString() is called. However, the 'Product' property may not have a ToString() method, in this case (you will see an error indicating ToString method not being available), the user should provide a custom script-block to determine how the value is constructed. This can be done by assigning a custom script-block to the 'LOOPZ.WH-FOREACH-DECORATOR.GET-RESULT' entry in Exchange. eg:</maml:para>
      <maml:para>[scriptblock]$customGetResult = { param($result) $result.SomeCustomPropertyOfRelevanceThatIsAString; } $Exchange['LOOPZ.WH-FOREACH-DECORATOR.GET-RESULT'] = $customGetResult; ...</maml:para>
      <maml:para>Note also, the user can provide a custom 'GET-RESULT' in order to control what is displayed by Write-HostFeItemDecorator.</maml:para>
      <maml:para>This function is designed to be used with Invoke-ForeachFsItem and as such, it's signature needs to match that required by Invoke-ForeachFsItem. Any additional parameters can be passed in via the Exchange.</maml:para>
      <maml:para>The rationale behind Write-HostFeItemDecorator is to maintain separation of concerns that allows development of functions that could be used with Invoke-ForeachFsItem which do not contain any UI related code. This strategy also helps for the development of different commands that produce output to the terminal in a consistent manner.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Write-HostFeItemDecorator</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
          <maml:name>Underscore</maml:name>
          <maml:Description>
            <maml:para>The current pipeline object.</maml:para>
          </maml:Description>
          <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
          <dev:type>
            <maml:name>Object</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>Index</maml:name>
          <maml:Description>
            <maml:para>The 0 based index representing current item in the pipeline.</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="False" position="2" aliases="none">
          <maml:name>Exchange</maml:name>
          <maml:Description>
            <maml:para>A hash table containing miscellaneous information gathered internally throughout the iteration batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="3" aliases="none">
          <maml:name>Trigger</maml:name>
          <maml:Description>
            <maml:para>A boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's block implementation.</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:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="False" position="2" aliases="none">
        <maml:name>Exchange</maml:name>
        <maml:Description>
          <maml:para>A hash table containing miscellaneous information gathered internally throughout the iteration batch. This can be of use to the user, because it is the way the user can perform bi-directional communication between the invoked custom script block and client side logic.</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="False" position="1" aliases="none">
        <maml:name>Index</maml:name>
        <maml:Description>
          <maml:para>The 0 based index representing current item in the pipeline.</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="3" aliases="none">
        <maml:name>Trigger</maml:name>
        <maml:Description>
          <maml:para>A boolean value, useful for state changing idempotent operations. At the end of the batch, the state of the trigger indicates whether any of the items were actioned. When the script block is invoked, the trigger should indicate if the trigger was pulled for any of the items so far processed in the batch. This is the responsibility of the client's block implementation.</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="true" variableLength="true" globbing="false" pipelineInput="False" position="0" aliases="none">
        <maml:name>Underscore</maml:name>
        <maml:Description>
          <maml:para>The current pipeline object.</maml:para>
        </maml:Description>
        <command:parameterValue required="true" variableLength="false">Object</command:parameterValue>
        <dev:type>
          <maml:name>Object</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.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>function Test-FN {
    param(
      [System.IO.DirectoryInfo]$Underscore,
      [int]$Index,
      [hashtable]$Exchange,
      [boolean]$Trigger,
    )
 
    $format = $Exchange['CLIENT.FORMAT'];
    @{ Product = $format -f $Underscore.Name, $Underscore.Exists }
    ...
  }
 
  [Systems.Collection.Hashtable]$exchange = @{
    'LOOPZ.WH-FOREACH-DECORATOR.FUNCTION-NAME' = 'Test-FN';
    'CLIENT.FORMAT' = '=== [{0}] -- [{1}] ==='
  }
 
  Get-ChildItem ... | Invoke-ForeachFsItem -Path &lt;path&gt; -Exchange $exchange
    -Functee 'Write-HostFeItemDecorator'</dev:code>
        <dev:remarks>
          <maml:para>So, Test-FN is not concerned about writing any output to the console, it simply does what it does silently and Write-HostFeItemDecorator handles generation of output. It invokes the function defined in 'LOOPZ.WH-FOREACH-DECORATOR.FUNCTION-NAME' and generates corresponding output. It happens to use the console colouring facility provided by a a dependency Elizium.Krayola to create colourful output in a predefined format via the Krayola Theme.</maml:para>
          <maml:para>Note, Write-HostFeItemDecorator does not forward additional parameters to the decorated function (Test-FN), but this can be circumvented via the Exchange as illustrated by the 'CLIENT.FORMAT' parameter in this example.</maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Online Version:</maml:linkText>
        <maml:uri>https://eliziumnet.github.io/Loopz/</maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Elizium.Loopz</maml:linkText>
        <maml:uri>https://github.com/EliziumNet/Loopz</maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
</helpItems>