PSPathfinder.psm1

#Region '.\Private\Get-PFFunctionString.ps1' 0
function Get-PFFunctionString
{
  [CmdletBinding()]
  param (
    [Int]
    $Page,

    [int]
    $PageSize,

    [String]
    $Filter,

    [String]
    $Sort,

    [String]
    $Fields
  )

  begin
  {
  }
  process
  {
    foreach ($item in $PSBoundParameters.GetEnumerator())
    {
      if ($item.Value)
      {
        switch ($item)
        {
          { $_.Value -is [int] }
          {
            $Value = ($item.Value).toString()
            continue
          }
          default
          {
            $Value = $item.Value
          }
        }
        $FunctionString += ('&{0}={1}' -f $($item.Key).ToLower(), $Value)
      }
    }
    $FunctionString -replace ('^&', '?')
  }
  end
  {
  }
}
#EndRegion '.\Private\Get-PFFunctionString.ps1' 51
#Region '.\Private\Invoke-PFRestMethod.ps1' 0
function Invoke-PFRestMethod
{
  [CmdletBinding()]
  param (
    [Parameter(Mandatory)]
    [string]
    $Token,

    [Parameter(Mandatory)]
    [string]
    $Uri,

    [string]
    $Body,

    [string]
    $OutFile,

    [Parameter(Mandatory)]
    [ValidateSet('Get', 'Post', 'Delete', 'Patch', 'Put')]
    [string]
    $Method
  )

  begin
  {
  }
  process
  {
    switch (Get-Variable -Name PSEdition -ValueOnly)
    {
      'Desktop'
      {
        Invoke-PFTrustSelfSignedCertificate
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
      }
    }
    $PSBoundParameters.Add('Headers', @{Authorization = $Token })
    $Null = $PSBoundParameters.Remove('Token')
    $PSBoundParameters.Add('ContentType', 'application/json; charset=utf-8')


    Switch (Get-Variable -Name PSEdition -ValueOnly)
    {
      'Desktop'
      {
        try
        {
          Invoke-RestMethod @PSBoundParameters -ErrorAction Stop
        }
        catch [System.Net.WebException]
        {
          switch ($($PSItem.Exception.Response.StatusCode.value__))
          {
            200
            {
              Write-Warning -Message ('Success. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            304
            {
              Write-Warning -Message ('Not Modified. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            400
            {
              Write-Warning -Message ('Bad Request: The request does not match the API, e.g. it uses the wrong HTTP method. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            401
            {
              Write-Warning -Message ('Unauthorized. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            404
            {
              Write-Warning -Message ('Not Found. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            422
            {
              Write-Warning -Message ('Client Error. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            500
            {
              Write-Warning -Message ('Server Error. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            default
            {
              Write-Warning -Message ('Some error occured, see HTTP status code for further details. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
          }
        }
      }
      'Core'
      {
        try
        {
          $null = $PSBoundParameters.Add('SkipCertificateCheck', $true)
          Invoke-RestMethod @PSBoundParameters -ErrorAction Stop
        }
        catch [Microsoft.PowerShell.Commands.HttpResponseException]
        {
          switch ($($PSItem.Exception.Response.StatusCode.value__))
          {
            200
            {
              Write-Warning -Message ('Success. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            304
            {
              Write-Warning -Message ('Not Modified. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            400
            {
              Write-Warning -Message ('Bad Request: The request does not match the API, e.g. it uses the wrong HTTP method. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            401
            {
              Write-Warning -Message ('Unauthorized. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            404
            {
              Write-Warning -Message ('Not Found. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            422
            {
              Write-Warning -Message ('Client Error. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            500
            {
              Write-Warning -Message ('Server Error. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
            default
            {
              Write-Warning -Message ('Some error occured, see HTTP status code for further details. Uri: {0} Method: {1}' -f $Uri, $Method)
            }
          }
        }
      }
    }
  }
  end
  {
  }
}
#EndRegion '.\Private\Invoke-PFRestMethod.ps1' 142
#Region '.\Private\Invoke-PFTrustSelfSignedCertif.ps1' 0
function Invoke-PFTrustSelfSignedCertificate
{
  [CmdletBinding()]
  param (

  )

  begin
  {
  }
  process
  {
    if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
    {
      $certCallback = @'
      using System;
      using System.Net;
      using System.Net.Security;
      using System.Security.Cryptography.X509Certificates;
      public class ServerCertificateValidationCallback
      {
          public static void Ignore()
          {
              if(ServicePointManager.ServerCertificateValidationCallback ==null)
              {
                  ServicePointManager.ServerCertificateValidationCallback +=
                      delegate
                      (
                          Object obj,
                          X509Certificate certificate,
                          X509Chain chain,
                          SslPolicyErrors errors
                      )
                      {
                          return true;
                      };
              }
          }
      }
'@

      Add-Type $certCallback
    }
    [ServerCertificateValidationCallback]::Ignore()
  }
  end
  {
  }
}
#EndRegion '.\Private\Invoke-PFTrustSelfSignedCertif.ps1' 49
#Region '.\Public\Get-PFBuilding.ps1' 0
function Get-PFBuilding
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Components')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Documents')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Floors')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'History')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Components,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Documents,

    [Parameter(Mandatory, ParameterSetName = 'Floors')]
    [Switch]
    $Floors,

    [Parameter(Mandatory, ParameterSetName = 'History')]
    [Switch]
    $History,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'Floors')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'Floors')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'Floors')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'Floors')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'Floors')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/buildings' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFBuilding.ps1' 149
#Region '.\Public\Get-PFCable.ps1' 0
function Get-PFCable
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Cabletrays')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Lines')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Phones')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Services')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Tags')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Vlans')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Wires')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Cabletrays')]
    [Switch]
    $Cabletrays,

    [Parameter(Mandatory, ParameterSetName = 'Lines')]
    [Switch]
    $Lines,

    [Parameter(Mandatory, ParameterSetName = 'Phones')]
    [Switch]
    $Phones,

    [Parameter(Mandatory, ParameterSetName = 'Services')]
    [Switch]
    $Services,

    [Parameter(Mandatory, ParameterSetName = 'Tags')]
    [Switch]
    $Tags,

    [Parameter(Mandatory, ParameterSetName = 'Vlans')]
    [Switch]
    $Vlans,

    [Parameter(Mandatory, ParameterSetName = 'Wires')]
    [Switch]
    $Wires,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cabletrays')]
    [Parameter(ParameterSetName = 'Lines')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Parameter(ParameterSetName = 'Wires')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cabletrays')]
    [Parameter(ParameterSetName = 'Lines')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Parameter(ParameterSetName = 'Wires')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cabletrays')]
    [Parameter(ParameterSetName = 'Lines')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Parameter(ParameterSetName = 'Wires')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cabletrays')]
    [Parameter(ParameterSetName = 'Lines')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Parameter(ParameterSetName = 'Wires')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cabletrays')]
    [Parameter(ParameterSetName = 'Lines')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Parameter(ParameterSetName = 'Wires')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/connectivity/cables' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFCable.ps1' 179
#Region '.\Public\Get-PFCableTray.ps1' 0
function Get-PFCabletray
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Cables')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Cables')]
    [Switch]
    $Cables,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cables')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cables')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cables')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cables')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Cables')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/connectivity/cabletrays' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFCableTray.ps1' 119
#Region '.\Public\Get-PFComponent.ps1' 0
function Get-PFComponent
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Children')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Containedslots')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Documents')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'History')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Ipaddresses')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Phones')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Ports')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Preview')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Previewback')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Previewfront')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Services')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Slots')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Tags')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Vlans')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Children')]
    [Switch]
    $Children,

    [Parameter(Mandatory, ParameterSetName = 'Containedslots')]
    [Switch]
    $Containedslots,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Documents,

    [Parameter(Mandatory, ParameterSetName = 'History')]
    [Switch]
    $History,

    [Parameter(Mandatory, ParameterSetName = 'Ipaddresses')]
    [Switch]
    $Ipaddresses,

    [Parameter(Mandatory, ParameterSetName = 'Phones')]
    [Switch]
    $Phones,

    [Parameter(Mandatory, ParameterSetName = 'Ports')]
    [Switch]
    $Ports,

    [Parameter(Mandatory, ParameterSetName = 'Preview')]
    [Switch]
    $Preview,

    [Parameter(Mandatory, ParameterSetName = 'Previewback')]
    [Switch]
    $Previewback,

    [Parameter(Mandatory, ParameterSetName = 'Previewfront')]
    [Switch]
    $Previewfront,

    [Parameter(Mandatory, ParameterSetName = 'Services')]
    [Switch]
    $Services,

    [Parameter(Mandatory, ParameterSetName = 'Slots')]
    [Switch]
    $Slots,

    [Parameter(Mandatory, ParameterSetName = 'Tags')]
    [Switch]
    $Tags,

    [Parameter(Mandatory, ParameterSetName = 'Vlans')]
    [Switch]
    $Vlans,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Children')]
    [Parameter(ParameterSetName = 'Containedslots')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Ipaddresses')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Ports')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Slots')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Children')]
    [Parameter(ParameterSetName = 'Containedslots')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Ipaddresses')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Ports')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Slots')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Children')]
    [Parameter(ParameterSetName = 'Containedslots')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Ipaddresses')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Ports')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Slots')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Children')]
    [Parameter(ParameterSetName = 'Containedslots')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Ipaddresses')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Ports')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Slots')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Children')]
    [Parameter(ParameterSetName = 'Containedslots')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Ipaddresses')]
    [Parameter(ParameterSetName = 'Phones')]
    [Parameter(ParameterSetName = 'Ports')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Parameter(ParameterSetName = 'Services')]
    [Parameter(ParameterSetName = 'Slots')]
    [Parameter(ParameterSetName = 'Tags')]
    [Parameter(ParameterSetName = 'Vlans')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/components' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFComponent.ps1' 249
#Region '.\Public\Get-PFComponentDefinition.ps1' 0
function Get-PFComponentdefinition
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Preview')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Previewback')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Previewfront')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Preview')]
    [Switch]
    $Preview,

    [Parameter(Mandatory, ParameterSetName = 'Previewback')]
    [Switch]
    $Previewback,

    [Parameter(Mandatory, ParameterSetName = 'Previewfront')]
    [Switch]
    $Previewfront,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Preview')]
    [Parameter(ParameterSetName = 'Previewback')]
    [Parameter(ParameterSetName = 'Previewfront')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/catalog/componentdefinitions' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFComponentDefinition.ps1' 139
#Region '.\Public\Get-PFFloor.ps1' 0
function Get-PFFloor
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Components')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Documents')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'History')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Rooms')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Components,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Documents,

    [Parameter(Mandatory, ParameterSetName = 'History')]
    [Switch]
    $History,

    [Parameter(Mandatory, ParameterSetName = 'Rooms')]
    [Switch]
    $Rooms,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Rooms')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Rooms')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/floors' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFFloor.ps1' 149
#Region '.\Public\Get-PFIPAddress.ps1' 0
function Get-PFIpaddress
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/ipam/ipaddresses' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
        (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFIPAddress.ps1' 104
#Region '.\Public\Get-PFLocation.ps1' 0
function Get-PFLocation
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Buildings')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Components')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Documents')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'History')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Buildings')]
    [Switch]
    $Buildings,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Components,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Documents,

    [Parameter(Mandatory, ParameterSetName = 'History')]
    [Switch]
    $History,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Buildings')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Buildings')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Buildings')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Buildings')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Buildings')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/locations' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFLocation.ps1' 149
#Region '.\Public\Get-PFNetwork.ps1' 0
function Get-PFNetwork
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/ipam/networks' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFNetwork.ps1' 104
#Region '.\Public\Get-PFPhone.ps1' 0
function Get-PFPhone
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/tags/phones' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFPhone.ps1' 104
#Region '.\Public\Get-PFRack.ps1' 0
function Get-PFRack
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/racks' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFRack.ps1' 104
#Region '.\Public\Get-PFRoom.ps1' 0
function Get-PFRoom
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Components')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Documents')]
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'History')]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Components,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Documents,

    [Parameter(Mandatory, ParameterSetName = 'History')]
    [Switch]
    $History,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [Parameter(ParameterSetName = 'Components')]
    [Parameter(ParameterSetName = 'Documents')]
    [Parameter(ParameterSetName = 'History')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/rooms' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
            default
            {
              $params.Add('Uri', ('{0}/{1}/{2}{3}' -f $BaseURL, $item, $PsCmdlet.ParameterSetName.ToLower(), $FunctionString))
              (Invoke-PFRestMethod @params).Items
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFRoom.ps1' 139
#Region '.\Public\Get-PFRootgroup.ps1' 0
function Get-PFRootgroup
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/tags/rootgroups' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFRootgroup.ps1' 104
#Region '.\Public\Get-PFService.ps1' 0
function Get-PFService
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/tags/services' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFService.ps1' 104
#Region '.\Public\Get-PFStatus.ps1' 0
function Get-PFStatus
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ParameterSetName = 'Ping')]
    [switch]
    $Ping
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/info/status' -f $UriArray)
  }
  Process
  {
    $Params = @{
      Token  = $Token
      Method = 'Get'
    }
    $APIObjectColl = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
        Invoke-PFRestMethod @Params
      }
      Default
      {
        $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $PsCmdlet.ParameterSetName.ToLower()))
        Invoke-PFRestMethod @Params
      }
    }
    $APIObjectColl
  }
  End
  {
  }
}
#EndRegion '.\Public\Get-PFStatus.ps1' 52
#Region '.\Public\Get-PFSubnet.ps1' 0
function Get-PFSubnet
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/ipam/subnets' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFSubnet.ps1' 104
#Region '.\Public\Get-PFTag.ps1' 0
function Get-PFTag
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/tags/tags' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFTag.ps1' 104
#Region '.\Public\Get-PFTaggroup.ps1' 0
function Get-PFTaggroup
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/tags/taggroups' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFTaggroup.ps1' 104
#Region '.\Public\Get-PFVlan.ps1' 0
function Get-PFVlan
{
  [CmdletBinding(DefaultParameterSetName = 'Noparams')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Id')]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Page,

    [Parameter(ParameterSetName = 'Noparams')]
    [Int]
    $Pagesize,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Filter,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Sort,

    [Parameter(ParameterSetName = 'Noparams')]
    [String]
    $Fields
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/ipam/vlans' -f $UriArray)
    switch ($PsCmdlet.ParameterSetName)
    {
      'Id'
      {
      }
      default
      {
        $params = [ordered]@{
          Page     = $Page
          PageSize = $PageSize
          Filter   = $Filter
          Sort     = $Sort
          Fields   = $Fields
        }
        $FunctionString = Get-PFFunctionString @params
      }
    }
  }

  Process
  {
    $result = switch ($PsCmdlet.ParameterSetName)
    {
      'Noparams'
      {
        $params = @{
          Token  = $Token
          Method = 'Get'
        }
        $params.Add('Uri', ('{0}{1}' -f $BaseURL, $FunctionString))
              (Invoke-PFRestMethod @params).Items
      }
      default
      {
        foreach ($item in $Id)
        {
          $params = @{
            Token  = $Token
            Method = 'Get'
          }
          switch ($PsCmdlet.ParameterSetName)
          {
            'Id'
            {
              $params.Add('Uri', ('{0}/{1}' -f $BaseURL, $item))
              Invoke-PFRestMethod @params
            }
          }
        }
      }
    }
    $result
  }

  End
  {
  }
}
#EndRegion '.\Public\Get-PFVlan.ps1' 104
#Region '.\Public\New-PFBuilding.ps1' 0
function New-PFBuilding
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Floors')]
    [Switch]
    $Floor,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Document,

    [Parameter(Mandatory, ParameterSetName = 'Floors')]
    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Name,

    [Parameter(ParameterSetName = 'Floors')]
    [String]
    $Number,

    [Parameter(ParameterSetName = 'Floors')]
    [String]
    $Description,

    [Parameter(ParameterSetName = 'Floors')]
    [String]
    $Url,

    [Parameter(ParameterSetName = 'Floors')]
    [String]
    $ExternalRef,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Path,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [ValidateSet('stFolder', 'stBlob', 'stLink')]
    [String]
    $SaveType
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/buildings' -f $UriArray)
  }
  Process
  {
    foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Floors'
        {
          $BodyHashTable = @{
            'Name'        = $Name
            'Number'      = $Number
            'Description' = $Description
            'Url'         = $Url
            'ExternalRef' = $ExternalRef
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/floors' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        'Documents'
        {
          $BodyHashTable = @{
            'Name'     = $Name
            'Path'     = $Path
            'SaveType' = $SaveType
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/documents' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $Item)))
      {
        $APIObjectColl = Invoke-PFRestMethod @Params
      }
      $Result = foreach ($APIObject in $APIObjectColl)
      {
        $Properties = [ordered]@{
          'Id' = [Int]$APIObject.Id
        }
        New-Object psobject -Property $Properties
      }
      $Result
    }
  }
  End
  {
  }
}
#EndRegion '.\Public\New-PFBuilding.ps1' 126
#Region '.\Public\New-PFComponent.ps1' 0
function New-PFComponent
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Document,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Name,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Path,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [ValidateSet('stFolder', 'stBlob', 'stLink')]
    [String]
    $SaveType
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/components' -f $UriArray)
  }
  Process
  {
    foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Documents'
        {
          $BodyHashTable = @{
            'Name'     = $Name
            'Path'     = $Path
            'SaveType' = $SaveType
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/documents' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $Item)))
      {
        $APIObjectColl = Invoke-PFRestMethod @Params
      }
      $Result = foreach ($APIObject in $APIObjectColl)
      {
        $Properties = [ordered]@{
          'Id' = [Int]$APIObject.Id
        }
        New-Object psobject -Property $Properties
      }
      $Result
    }
  }
  End
  {
  }
}
#EndRegion '.\Public\New-PFComponent.ps1' 88
#Region '.\Public\New-PFFloor.ps1' 0
function New-PFFloor
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Rooms')]
    [Switch]
    $Room,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Document,

    [Parameter(Mandatory, ParameterSetName = 'Rooms')]
    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Name,

    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Number,

    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Description,

    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $Url,

    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $ExternalRef,

    [Parameter(ParameterSetName = 'Rooms')]
    [Single]
    $Area,

    [Parameter(ParameterSetName = 'Rooms')]
    [String]
    $RoomType = 'None',

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Path,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [ValidateSet('stFolder', 'stBlob', 'stLink')]
    [String]
    $SaveType
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/floors' -f $UriArray)
  }
  Process
  {
    foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Rooms'
        {
          $BodyHashTable = @{
            'Name'        = $Name
            'Number'      = $Number
            'Description' = $Description
            'Url'         = $Url
            'ExternalRef' = $ExternalRef
            'Area'        = $Area
            'RoomType'    = $RoomType
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/rooms' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        'Documents'
        {
          $BodyHashTable = @{
            'Name'     = $Name
            'Path'     = $Path
            'SaveType' = $SaveType
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/documents' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $Item)))
      {
        $APIObjectColl = Invoke-PFRestMethod @Params
      }
      $Result = foreach ($APIObject in $APIObjectColl)
      {
        $Properties = [ordered]@{
          'Id' = [Int]$APIObject.Id
        }
        New-Object psobject -Property $Properties
      }
      $Result
    }
  }
  End
  {
  }
}
#EndRegion '.\Public\New-PFFloor.ps1' 136
#Region '.\Public\New-PFRack.ps1' 0
function New-PFRack
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Component,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Int]
    $ComponentDefinitionId,

    [Parameter(ParameterSetName = 'Components')]
    [Int]
    $Layer = 1,

    [Parameter(ParameterSetName = 'Components')]
    [Int]
    $Bay = 1,

    [Parameter(ParameterSetName = 'Components')]
    [Single]
    $LeftOffset = 0.0,

    [Parameter(ParameterSetName = 'Components')]
    [Switch]
    $ReverseMounting,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [ValidateScript({ If ( $_.ToString() -match '^(\d+|\d+(\.|,)5)$' )
        {
          $true
        }
        Else
        {
          Throw 'Please specify a valid rack height'
        }
      })]
    [Single]
    $RackUnit
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/racks' -f $UriArray)
  }
  Process
  {
    foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Components'
        {
          $BodyHashTable = @{
            'ComponentDefinitionId' = $ComponentDefinitionId
            'Layer'                 = $Layer
            'Bay'                   = $Bay
            'LeftOffset'            = $LeftOffset
            'ReverseMounting'       = $ReverseMounting.IsPresent
            'RackUnit'              = $RackUnit
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/components' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $Item)))
      {
        $APIObjectColl = Invoke-PFRestMethod @Params
      }
      $Result = foreach ($APIObject in $APIObjectColl)
      {
        $Properties = [ordered]@{
          'Id' = [Int]$APIObject.Id
        }
        New-Object psobject -Property $Properties
      }
      $Result
    }
  }
  End
  {
  }
}
#EndRegion '.\Public\New-PFRack.ps1' 111
#Region '.\Public\New-PFRoom.ps1' 0
function New-PFRoom
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Switch]
    $Component,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [Switch]
    $Document,

    [Parameter(Mandatory, ParameterSetName = 'Components')]
    [Int]
    $ComponentDefinitionId,

    [Parameter(ParameterSetName = 'Components')]
    [Int]
    $NumberOfCopies = 1,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Name,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [String]
    $Path,

    [Parameter(Mandatory, ParameterSetName = 'Documents')]
    [ValidateSet('stFolder', 'stBlob', 'stLink')]
    [String]
    $SaveType
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/rooms' -f $UriArray)
  }
  Process
  {
    foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Components'
        {
          $BodyHashTable = @{
            'ComponentDefinitionId' = $ComponentDefinitionId
            'NumberOfCopies'        = $NumberOfCopies
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/components' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        'Documents'
        {
          $BodyHashTable = @{
            'Name'     = $Name
            'Path'     = $Path
            'SaveType' = $SaveType
          }
          $Body = ConvertTo-Json $BodyHashTable
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}/documents' -f $BaseURL, $Item)
            Body   = $Body
            Method = 'Post'
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $Item)))
      {
        $APIObjectColl = Invoke-PFRestMethod @Params
      }
      $Result = foreach ($APIObject in $APIObjectColl)
      {
        Switch ($PsCmdlet.ParameterSetName)
        {
          'Components'
          {
            foreach ($j in $APIObject.Items)
            {
              $Properties = [ordered]@{
                'Id' = [Int]$j.Id
              }
              New-Object psobject -Property $Properties
            }
          }
          'Documents'
          {
            $Properties = [ordered]@{
              'Id' = [Int]$APIObject.Id
            }
            New-Object psobject -Property $Properties
          }
          default
          {
          }
        }
      }
      $Result
    }
  }
  End
  {
  }
}
#EndRegion '.\Public\New-PFRoom.ps1' 133
#Region '.\Public\Remove-PFComponent.ps1' 0
function Remove-PFComponent
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'High')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [Int[]]
    $Id
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/components' -f $UriArray)
  }
  Process
  {
    $result = foreach ($item in $Id)
    {
      $params = @{
        Token  = $Token
        Method = 'Delete'
        Uri    = '{0}/{1}' -f $BaseURL, $item
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $item)))
      {
        Invoke-PFRestMethod @params
      }
    }
    $result
  }
  End
  {
  }
}
#EndRegion '.\Public\Remove-PFComponent.ps1' 48
#Region '.\Public\Update-PFComponent.ps1' 0
function Update-PFComponent
{

  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Medium')]
  param (
    [Parameter(Mandatory)]
    [string]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8087,

    [ValidateNotNull()]
    [string]
    $Token,

    [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)]
    [Int[]]
    $Id,

    [Parameter(ParameterSetName = 'Patch')]
    [ValidateSet('Add', 'Remove', 'Replace')]
    [String]
    $Operation = 'Replace',

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Name,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Description,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Guarantee,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $BurdenCentre,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $InventoryNumber,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $SerialNumber,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $MaintenanceCycle,

    [Parameter(ParameterSetName = 'Patch')]
    [ValidatePattern('(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})')]
    [String]
    $MacAddress,

    [Parameter(ParameterSetName = 'Patch')]
    [datetime]
    $InstallationDate,

    [Parameter(ParameterSetName = 'Patch')]
    [datetime]
    $LastMaintenance,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $ServiceNumber,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $EAN,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $NameAdditional,

    [Parameter(ParameterSetName = 'Patch')]
    [Int]
    $Number,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $PowerConsumptionInWatt,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $HeatEmissionInBTU,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $MassInKG,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $MaxPowerConsumptionInWatt,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $MaxHeatEmissionInBTU,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $MaxMassInKG,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Url,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $ExternalRef,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $FQDN,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Comment,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $Configuration,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $KnownIssues,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $OS,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $WarrantyContract,

    [Parameter(ParameterSetName = 'Patch')]
    [datetime]
    $WarrantyEnds,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $ResponsibleContact,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString1,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString2,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString3,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString4,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString5,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString6,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString7,

    [Parameter(ParameterSetName = 'Patch')]
    [String]
    $CustomString8,

    [Parameter(ParameterSetName = 'Patch')]
    [datetime]
    $CustomDate1,

    [Parameter(ParameterSetName = 'Patch')]
    [datetime]
    $CustomDate2,

    [Parameter(ParameterSetName = 'Patch')]
    [int]
    $CustomInteger1,

    [Parameter(ParameterSetName = 'Patch')]
    [int]
    $CustomInteger2,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $CustomFloat1,

    [Parameter(ParameterSetName = 'Patch')]
    [single]
    $CustomFloat2,

    [Parameter(ParameterSetName = 'Put')]
    [Hashtable]
    $Properties,

    [Parameter(ParameterSetName = 'Tag')]
    [Int]
    $TagId,

    [Parameter(ParameterSetName = 'VLAN')]
    [Int]
    $VLANId,

    [Parameter(ParameterSetName = 'Service')]
    [Int]
    $ServiceId,

    [Parameter(ParameterSetName = 'Phone')]
    [Int]
    $PhoneId,

    [Parameter(ParameterSetName = 'Tag')]
    [Parameter(ParameterSetName = 'VLAN')]
    [Parameter(ParameterSetName = 'Service')]
    [Parameter(ParameterSetName = 'Phone')]
    [Switch]
    $Remove
  )

  Begin
  {
    $UriArray = @($ComputerName, $TCPPort)
    $BaseURL = ('https://{0}:{1}/api/v1.0/infrastructure/components' -f $UriArray)
    $Params = @{
      Token = $Token
    }
  }
  Process
  {
    $result = foreach ($item in $Id)
    {
      Switch ($PsCmdlet.ParameterSetName)
      {
        'Patch'
        {
          $PatchParams = $PSBoundParameters
          $Null = $PatchParams.Remove('Id')
          $Null = $PatchParams.Remove('Token')
          $Null = $PatchParams.Remove('Computername')
          $Null = $PatchParams.Remove('Operation')
          $BodyArray = @(
            $PatchParams.GetEnumerator().ForEach{
              [ordered]@{
                'value' = $_.Value
                'path'  = '/{0}' -f $_.Key
                'op'    = $Operation
              }
            }
          )
          $Body = ConvertTo-Json $BodyArray
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}' -f $BaseURL, $item)
            Body   = $Body
            Method = 'Patch'
          }
        }
        'Put'
        {
          $Body = ConvertTo-Json $Properties
          $Params = @{
            Token  = $Token
            Uri    = ('{0}/{1}' -f $BaseURL, $item)
            Body   = $Body
            Method = 'Put'
          }
        }
        'Tag'
        {
          $Params = @{
            Token = $Token
            Uri   = ('{0}/{1}/tags/{2}' -f $BaseURL, $item, $TagId)
            Body  = $Body
          }
          switch ($Remove)
          {
            $true
            {
              $Params.Add('Method', 'Delete')
            }
            Default
            {
              $Params.Add('Method', 'Put')
            }
          }
        }
        'VLAN'
        {
          $Params = @{
            Token = $Token
            Uri   = ('{0}/{1}/vlans/{2}' -f $BaseURL, $item, $VLANId)
            Body  = $Body
          }
          switch ($Remove)
          {
            $true
            {
              $Params.Add('Method', 'Delete')
            }
            Default
            {
              $Params.Add('Method', 'Put')
            }
          }
        }
        'Service'
        {
          $Params = @{
            Token = $Token
            Uri   = ('{0}/{1}/services/{2}' -f $BaseURL, $item, $ServiceId)
            Body  = $Body
          }
          switch ($Remove)
          {
            $true
            {
              $Params.Add('Method', 'Delete')
            }
            Default
            {
              $Params.Add('Method', 'Put')
            }
          }
        }
        'Phone'
        {
          $Params = @{
            Token = $Token
            Uri   = ('{0}/{1}/phones/{2}' -f $BaseURL, $item, $PhoneId)
            Body  = $Body
          }
          switch ($Remove)
          {
            $true
            {
              $Params.Add('Method', 'Delete')
            }
            Default
            {
              $Params.Add('Method', 'Put')
            }
          }
        }
        default
        {
        }
      }
      if ($PSCmdlet.ShouldProcess(('{0} Id: {1}' -f $Method, $item)))
      {
        Invoke-PFRestMethod @Params
      }
    }
    $result
  }
  End
  {
  }
}
#EndRegion '.\Public\Update-PFComponent.ps1' 371