Public/Assets/Get-GlpiToolsFinancialAndAdministrativeInformations.ps1

<#
.SYNOPSIS
    Function is getting FinancialAndAdminstrativeId informations from GLPI
.DESCRIPTION
    Function is based on FinancialAndAdminstrativeId which you can find in GLPI website
    Returns object with property's of FinancialAndAdminstrativeId Tab
.PARAMETER All
    This parameter will return all FinancialAndAdminstrativeId informations for All Assets from GLPI
.PARAMETER FinancialAndAdminstrativeId
    This parameter can take pipline input, either, you can use this function with -FinancialAndAdminstrativeId keyword.
    Provide to this param FinancialAndAdminstrativeId ID running this function before with parameter All to retrieve id's
.PARAMETER Raw
    Parameter which you can use with FinancialAndAdminstrativeId Parameter.
    FinancialAndAdminstrativeId has converted parameters from default, parameter Raw allows not convert this parameters.
.EXAMPLE
    PS C:\> 326 | Get-GlpiToolsFinancialAndAdministrativeInformations
    Function gets FinancialAndAdminstrativeId from GLPI from Pipline, and return FinancialAndAdminstrative object
.EXAMPLE
    PS C:\> 326, 321 | Get-GlpiToolsFinancialAndAdministrativeInformations
    Function gets FinancialAndAdminstrativeId from GLPI from Pipline (u can pass many ID's like that), and return FinancialAndAdminstrative object
.EXAMPLE
    PS C:\> Get-GlpiToolsFinancialAndAdministrativeInformations -FinancialAndAdminstrativeId 326
    Function gets FinancialAndAdminstrativeId from GLPI which is provided through -FinancialAndAdminstrativeId after Function type, and return FinancialAndAdminstrative object
.EXAMPLE
    PS C:\> Get-GlpiToolsFinancialAndAdministrativeInformations -FinancialAndAdminstrativeId 326, 321
    Function gets FinancialAndAdminstrativeId from GLPI which is provided through -FinancialAndAdminstrativeId keyword after Function type (u can provide many ID's like that), and return FinancialAndAdminstrative object
.EXAMPLE
    PS C:\> Get-GlpiToolsFinancialAndAdministrativeInformations -FinancialAndAdminstrativeId 234 -Raw
    Example will show FinancialAndAdminstrativeId with id 234, but without any parameter converted
.EXAMPLE
    PS C:\> 234 | Get-GlpiToolsFinancialAndAdministrativeInformations -Raw
    Example will show FinancialAndAdminstrativeId with id 234, but without any parameter converted
.INPUTS
    FinancialAndAdminstrativeIdID which you can find in GLPI, or use this Function to convert ID returned from other Functions
.OUTPUTS
    Function returns PSCustomObject with property's of Financial And Adminstrative Tab from GLPI
.NOTES
    PSP 08/2018
#>


function Get-GlpiToolsFinancialAndAdministrativeInformations {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $false,
            ParameterSetName = "All")]
        [switch]$All,

        [parameter(Mandatory = $true,
            ValueFromPipeline = $true,
            ParameterSetName = "FinancialAndAdminstrativeId")]
        [alias('FAAID')]
        [string[]]$FinancialAndAdminstrativeId,
        [parameter(Mandatory = $false,
            ParameterSetName = "FinancialAndAdminstrativeId")]
        [switch]$Raw
    )
    
    begin {

        $AppToken = $Script:AppToken
        $PathToGlpi = $Script:PathToGlpi
        $SessionToken = $Script:SessionToken

        $AppToken = Get-GlpiToolsConfig -Verbose:$false | Select-Object -ExpandProperty AppToken
        $PathToGlpi = Get-GlpiToolsConfig -Verbose:$false | Select-Object -ExpandProperty PathToGlpi
        $SessionToken = Set-GlpiToolsInitSession -Verbose:$false | Select-Object -ExpandProperty SessionToken

        $ChoosenParam = ($PSCmdlet.MyInvocation.BoundParameters).Keys

        $FinancialAndAdminstrativeArray = [System.Collections.Generic.List[PSObject]]::New()

    }
    
    process {
        switch ($ChoosenParam) {
            All {
                
                $params = @{
                    headers = @{
                        'Content-Type'  = 'application/json'
                        'App-Token'     = $AppToken
                        'Session-Token' = $SessionToken
                    }
                    method  = 'get'
                    uri     = "$($PathToGlpi)/infocom/?range=0-9999999999999"
                }
                
                $GlpiFinancialAndAdminstrativeAll = Invoke-RestMethod @params -Verbose:$false

                foreach ($GlpiFinancialAndAdminstrative in $GlpiFinancialAndAdminstrativeAll) {
                    $FinancialAndAdminstrativeHash = [ordered]@{ }
                            $FinancialAndAdminstrativeProperties = $GlpiFinancialAndAdminstrative.PSObject.Properties | Select-Object -Property Name, Value 
                                
                            foreach ($FinancialAndAdminstrativeProp in $FinancialAndAdminstrativeProperties) {
                                $FinancialAndAdminstrativeHash.Add($FinancialAndAdminstrativeProp.Name, $FinancialAndAdminstrativeProp.Value)
                            }
                            $object = [pscustomobject]$FinancialAndAdminstrativeHash
                            $FinancialAndAdminstrativeArray.Add($object) 
                }
                $FinancialAndAdminstrativeArray
                $FinancialAndAdminstrativeArray = [System.Collections.Generic.List[PSObject]]::New()
                
            }
            FinancialAndAdminstrativeId { 
                foreach ( $FAAId in $FinancialAndAdminstrativeId ) {
                    $params = @{
                        headers = @{
                            'Content-Type'  = 'application/json'
                            'App-Token'     = $AppToken
                            'Session-Token' = $SessionToken
                        }
                        method  = 'get'
                        uri     = "$($PathToGlpi)/infocom/$($FAAId)"
                    }

                    Try {
                        $GlpiFinancialAndAdminstrative = Invoke-RestMethod @params -ErrorAction Stop

                        if ($Raw) {
                            $FinancialAndAdminstrativeHash = [ordered]@{ }
                            $FinancialAndAdminstrativeProperties = $GlpiFinancialAndAdminstrative.PSObject.Properties | Select-Object -Property Name, Value 
                                
                            foreach ($FinancialAndAdminstrativeProp in $FinancialAndAdminstrativeProperties) {
                                $FinancialAndAdminstrativeHash.Add($FinancialAndAdminstrativeProp.Name, $FinancialAndAdminstrativeProp.Value)
                            }
                            $object = [pscustomobject]$FinancialAndAdminstrativeHash
                            $FinancialAndAdminstrativeArray.Add($object)
                        } else {
                            $FinancialAndAdminstrativeHash = [ordered]@{ }
                            $FinancialAndAdminstrativeProperties = $GlpiFinancialAndAdminstrative.PSObject.Properties | Select-Object -Property Name, Value 
                                
                            foreach ($FinancialAndAdminstrativeProp in $FinancialAndAdminstrativeProperties) {
                                
                                $FinancialAndAdminstrativePropNewValue = Get-GlpiToolsParameters -Parameter $FinancialAndAdminstrativeProp.Name -Value $FinancialAndAdminstrativeProp.Value

                                $FinancialAndAdminstrativeHash.Add($FinancialAndAdminstrativeProp.Name, $FinancialAndAdminstrativePropNewValue)
                            }
                            $object = [pscustomobject]$FinancialAndAdminstrativeHash
                            $FinancialAndAdminstrativeArray.Add($object)
                        }
                    } Catch {

                        Write-Verbose -Message "FinancialAndAdminstrativeId ID = $FAAId is not found"
                        
                    }
                    $FinancialAndAdminstrativeArray
                    $FinancialAndAdminstrativeArray = [System.Collections.Generic.List[PSObject]]::New()
                }
            }
            Default {
                
            }
        }
    }
    
    end {
        Set-GlpiToolsKillSession -SessionToken $SessionToken -Verbose:$false
    }
}