Functions/ConvertTo-DryADCase.ps1

Function ConvertTo-DryADCase {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory)]
        [AllowEmptyString()]
        [String]$Name,

        [ValidateSet('upper','lower','ignore','capitalized','capitalize')]
        [Parameter(Mandatory)]
        [String]$Case 
    )
    If ($Case -eq 'capitalize') {
        $Case = 'capitalized'
    }
    ol d @("Converting '$Name' to type","$Case") 
   
    Function PRIVATE:Capitalize {
        [CmdletBinding()]
        Param (
            [Parameter(Mandatory)]
            [AllowEmptyString()]
            [String]$Name
        )
        $Name = $Name.Trim()

        If ($Name.length -le 1) {
            Return $Name.ToUppper()
        } 
        ElseIf ($Name -match ' ') {
            $Parts = $Name.split(' ')
            [String]$AccumulatedParts = ''
            ForEach ($Part in $Parts) {
                $UpperCasePart = ($Part.SubString(0,1)).ToUpper()
                $LowerCasePart = ($Part.Substring(1,($Part.length-1))).ToLower()
                $AccumulatedParts += $UpperCasePart + $LowerCasePart + ' '
            }
            Return $AccumulatedParts.Trim()
        } 
        Else {
            $UpperCasePart = ($Name.SubString(0,1)).ToUpper()
            $LowerCasePart = ($Name.Substring(1,($Name.length-1))).ToLower()
            $ReturnString = $UpperCasePart + $LowerCasePart
            Return $ReturnString
        }        
    }
    
    Switch ($Case) {
        'ignore' {
            $ReturnValue = $Name
        }
        'upper' {
            $ReturnValue = $Name.ToUpper()
        }
        'lower' {
            $ReturnValue = $Name.ToLower()
        }
        'capitalized' {
            # If distinguishedname, $Name is split into parts. First letter of each part is capitalized
            If (($Name -match "OU=") -or 
                ($Name -match "CN=") -or 
                ($Name -match "DC=")
            ) {
                [String]$AccumulatedStringValue = ''
                $NameParts = @($Name.Split(','))
                ForEach ($Part in $NameParts) {
                    # The first three letters are part of
                    # delimiter, 'OU=', 'CN=' or 'DC='
                    $Delimter = $Part.SubString(0,3)
                    $Namepart = $Part.SubString(3,($Part.length-3))
                    $Namepart = Capitalize -name $NamePart
                    # put into $AccumulatedStringValue
                    $AccumulatedStringValue += ($delimter + $Namepart + ',')
                }
                $ReturnValue = $AccumulatedStringValue.TrimEnd(',')
            } 
            Else {
                If ($Name.length -le 1) {
                    $ReturnValue = $Name.ToUpper()
                } 
                Else {
                    $ReturnValue = Capitalize -name $Name
                }
            }
        }
    }

    ol d @('Converted to',"$ReturnValue")
    $ReturnValue
}