core/modules/monkeyoutput/private/Get-ImmutableId.ps1

# Monkey365 - the PowerShell Cloud Security Tool for Azure and Microsoft 365 (copyright 2022) by Juan Garrido
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Function Get-ImmutableId{
    [CmdletBinding()]
    Param (
        [parameter(Mandatory= $true, ValueFromPipeline = $True, HelpMessage= "Input Object")]
        [Object]$InputObject,

        [parameter(Mandatory= $true, HelpMessage= "TenantId")]
        [System.String]$TenantId,

        [parameter(Mandatory= $true, HelpMessage= "Properties")]
        [System.Array]$Properties
    )
    Begin{
        $stringParts = [System.Collections.Generic.List[System.String]]::new()
        $immutableId = [System.String]::Empty
    }
    Process{
        #Add always TenantId
        [void]$stringParts.Add($TenantId);
        #Iterate for each property
        If(($InputObject.psobject.Methods.Where({$_.MemberType -eq 'ScriptMethod' -and $_.Name -eq 'GetPropertyByPath'})).Count -gt 0){
            ForEach($property in $PSBoundParameters['Properties'].GetEnumerator()){
                $value = $InputObject.GetPropertyByPath($property);
                If($value){
                    [void]$stringParts.Add($value);
                }
            }
            $immutableId = (@($stringParts) -join '|')
            If($immutableId -eq [System.String]::Empty){
                Write-Warning ("Unable to get inmutable Id. Empty string returned")
            }
            Else{
                return ($immutableId | Get-HashFromString)
            }
        }
        Else{
            Write-Warning "GetPropertyByPath method was not loaded"
        }
    }
}