Functions/ConvertTo-DryADDistinguishedName.ps1
<#
.Synopsis Translates a path 'Servers/Serverroles/CA' (from root to leaf) to a domainDN like OU=CA,OU=ServerRoles,OU=Servers (from leaf to root). #> Function ConvertTo-DryADDistinguishedName { [CmdletBinding()] Param ( [Parameter(Mandatory)] [AllowEmptyString()] [String]$Name, [Parameter()] [ValidateSet("upper","lower","ignore","capitalize","capitalized")] [String]$Case = 'ignore' ) # chop off any leading or trailing slashes and spaces. $Name = $Name.Trim() $Name = $Name.Trim('/') ol d @('Input',$Name) Try { [String]$ConvertedName = "" If ( ($Name -match "^ou=") -or ($Name -match "^cn=") ) { # the name is alerady a dN ol d @('The input is already a DistinguishedName',$Name) $ConvertedName = "$Name" } ElseIf ($name -eq '') { ol d 'Empty string (probably root of domain - return empty string then' $ConvertedName = $name } Else { # names like root/middle/leaf will be converted # to ou=leaf,ou=middle,ou=root. Must assume that # these are OUs, not CNs (or DCs) $NameArr = @($Name -split "/") For ($c = ($nameArr.Count -1); $c -ge 0; $c--) { $ConvertedName += "OU=$($nameArr[$c])," } # The accumulated name ends with ',', chop that off $ConvertedName = $ConvertedName.TrimEnd(',') } ol d @('Sending to ConvertTo-DryADCase' ,"$ConvertedName") $ConvertedName = ConvertTo-DryADCase -Name $ConvertedName -Case $Case ol d @('Returning',"$ConvertedName") $ConvertedName } Catch { ol w "Error converting '$Name' to distinguishedName" $PSCmdlet.ThrowTerminatingError($_) } } |