Private/ConvertTo-StructuredData.ps1
|
function ConvertTo-StructuredData { [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string]$String ) if ([string]::IsNullOrWhiteSpace($String)) { Write-LogError "Provided String is null or empty." return } try { $parts = $String.TrimStart('/').Split('/') $result = New-Object -TypeName PSObject # Process each part and assume alternating parts are key-value pairs for ($i = 0; $i -lt $parts.Length; $i += 2) { $key = $parts[$i] -replace 's$', '' # Normalize key names by removing trailing 's' $value = $parts[$i + 1] # Handle the last part if it doesn't have a corresponding value if (-not $value -and $i -eq $parts.Length - 1) { $value = "Not applicable or end of string" } if ($result.psobject.Properties.Name -contains $key) { $j = 1 # Ensure unique key names by appending a number if duplicated while ($result.psobject.Properties.Name -contains ($key + "_$j")) { $j++ } $key = $key + "_$j" } $result | Add-Member -MemberType NoteProperty -Name $key -Value $value } return $result } catch { Write-LogError -Message "Failed to convert string to structured data: $($_.Exception.Message)" } finally { Write-Verbose "Conversion completed." } } |