Private/Get-UnityObject.ps1

Function Get-UnityObject {

  <#
      .SYNOPSIS
      This private function allow to refer to an Unity object by ID instead of passing an actual object.
      .DESCRIPTION
      This private function allow to refer to a Unity object by name instead of passing an actual object.
      You need to have an active session with the array.
      .NOTES
      Written by Erwan Quelin under MIT licence - https://github.com/equelin/Unity-Powershell/blob/master/LICENSE
      .LINK
      https://github.com/equelin/Unity-Powershell
      .PARAMETER Data
      Unity object or string refering to an object's id
      .PARAMETER Typename
      Type of the object
      .PARAMETER Session
      UnitySession Object.
      .EXAMPLE
      Get-UnityObject -Data $Data -Typename 'UnityUser' -Session $Sess

      Retrieve informations about query who's ID is 5.
  #>


    [CmdletBinding()]
    Param (
        [parameter(Mandatory = $true)]
        [Object]$Data,
        [parameter(Mandatory = $true)]
        [String]$Typename,
        [Parameter(Mandatory = $true,HelpMessage = 'EMC Unity Session')]
        [UnitySession]$Session
    )

    Begin {
        Write-Debug -Message "[$($MyInvocation.MyCommand)] Executing function"
    }

    Process {
        
        $ObjectTypeName = $Data.GetType().Name

        Write-Verbose -Message "[$($MyInvocation.MyCommand)] Object Type is $ObjectTypeName"

        Switch ($ObjectTypeName) {
            "String" {$Object = (Invoke-Expression -Command "Get-$($Typename) -ID `$Data -Session `$Session")}
            "$TypeName" {$Object = $Data}
            default { throw [System.IO.FileNotFoundException]::New() }
        }

        If ($Object) {
            If ($Object.Name) {
                Write-Verbose -Message "[$($MyInvocation.MyCommand)] Object ID: $($Object.id),Object Name: $($Object.name)"
                Return $Object,$Object.id,$Object.Name
            } else {
                Write-Verbose -Message "[$($MyInvocation.MyCommand)] Object ID: $($Object.id)"
                Return $Object,$Object.id,$Object.id
            }
        } else {throw [System.IO.FileNotFoundException]::New()}
    }
}