It seems like I'm constantly need to convert immutable IDs and GUIDs as part of my M365 migrations. To simplify this I finally got around to writing some functions that simplify the work instead of looking them up all the time.
I created the following:
- Convert-ImmutableIDToGUID
- Convert-ImmutableIDtoHexString
- Convert-ImmutableIDtoByteArray
- Convert-ByteArrayToGUID
- Convert-GUIDToImmutableID
- Convert-HexStringToGUID
- Convert-HexStringToImmutableID
- Convert-ByteArrayToImmutableID
To make these available at a powershell prompt, you can load them as part of your powershell profile or dot source a script that contains.
Example of dot sourcing:
. c:\scripts\convertfunctions.ps1
Code for the functions:
# Example immutable ID to play with # $ImmutableID = "GJo33fsMIUKvmIIyTOSjzg==" function Convert-ImmutableIDToGUID { param ($ImmutableID) $guid=[Guid]([Convert]::FromBase64String($ImmutableID)) return $guid } function Convert-ImmutableIDtoHexString { param ($ImmutableID) $hexstring=([Convert]::FromBase64String($ImmutableID) | ForEach-Object ToString X2) -join ' ' return $hexstring } function Convert-ImmutableIDtoByteArray { param ($ImmutableID) $bytearray=[Convert]::FromBase64String($ImmutableID) return $bytearray } #When you retrieve ms-ds-consistencyGUID from AD it is a byte array #to avoid this conversion use [guid]$user.'ms-ds-consistencyGUID' function Convert-ByteArrayToGUID { param ($bytearray) $guid=[Guid]([Convert]::FromBase64String([system.convert]::ToBase64String($bytearray))) return $guid } #works with GUID object or string in GUID format function Convert-GUIDToImmutableID { param ($guid) $immutableID = [system.convert]::ToBase64String(([GUID]$guid).ToByteArray()) return $immutableID } function Convert-HexStringToGUID { param ($hexstring) $guid = [GUID]([byte[]] (-split (($hexstring -replace " ", "") -replace '..', '0x$& '))) return $guid } function Convert-HexStringToImmutableID { param ($hexstring) $ImmutableID = [system.convert]::ToBase64String([byte[]] (-split (($hexstring -replace " ", "") -replace '..', '0x$& '))) return $ImmutableID } function Convert-ByteArrayToImmutableID { param ($bytearray) $ImmutableID = [system.convert]::ToBase64String($bytearray) return $ImmutableID } <# Use Example $msdsconsistencyGUID = (Get-ADUser Byron -properties *).ms-ds-consistencyGUID $ImmutableID = Convert-ByteArrayToImmutableID -bytearray $msdsconsistencyGUID Set-AzureADUser byron@domain.com -ImmutableID $ImmutableID #>
No comments:
Post a Comment