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($_)
    }
}