Split-AzResourceID.psm1

<#
 .Synopsis
  Takes the ResourceID, and gives output with values mapped to the respective type. This can be directly used as input if required.
 
 .Description
  Takes the ResourceID, and gives output with values mapped to the respective type. This can be directly used as input if required.
 
 .Parameter ResourceID
  Complete ResourceID of a Resource
 
 .Example
 #Takes the ResourceID, and gives output with values mapped to the respective type.
  Split-AzResourceID -ResourceID /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/resourceGroupname/providers/Microsoft.providername/ResourceType/ResourceName
   
#>



#------------------------------------------------------------------------------
#
# THIS MODULE AND ANY ASSOCIATED INFORMATION ARE PROVIDED 'AS IS' WITHOUT
# WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS
# FOR A PARTICULAR PURPOSE. THE ENTIRE RISK OF USE, INABILITY TO USE, OR
# RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.
#
#------------------------------------------------------------------------------


Function Split-AzResourceID (){

Param (

    [Parameter(Mandatory=$true,
    ValueFromPipeline=$true)]
    [String[]]$ResourceID

      )

#Regex to match correct ResourceID format
$regex = "^/[subscriptions]/*.*/[resourceGroups]/*.*/[providers]/*.*/*.*/*.*"

#ResourceID Check
if($ResourceID -inotmatch $regex){write-host "Enter the complete ResourceID" -ForegroundColor Red}
Else{


$rawdata = $ResourceID | ForEach-Object {$_ -split '/',''}
$data = New-Object PSObject 
$data |  Add-Member -Name subscription -MemberType NoteProperty -Value $rawdata[2]
$data |  Add-Member -Name resourceGroup -MemberType NoteProperty -Value $rawdata[4]
$data |  Add-Member -Name Provider -MemberType NoteProperty -Value $rawdata[6]
$data |  Add-Member -Name Type -MemberType NoteProperty -Value $rawdata[7]
$data |  Add-Member -Name resourcename -MemberType NoteProperty -Value $rawdata[8]

if($rawdata[9] -ne $null){
$data |  Add-Member -Name Subresource -MemberType NoteProperty -Value $rawdata[9]
}
if($rawdata[10] -ne $null){
$data |  Add-Member -Name SubresourceName -MemberType NoteProperty -Value $rawdata[10]
}


#Output
$data

}

}

Export-ModuleMember -Function  Split-AzResourceID