Public/PublicFolder/Get-InvalidPublicFolderCharacterReport.ps1

function Get-InvalidPublicFolderCharacterReport {
    <#
    .SYNOPSIS
    Export Report of Public Folders with Invalid Characters
 
    .DESCRIPTION
    Export Report of Public Folders with Invalid Characters
 
    .PARAMETER ExcludedWord
    Don't look for this word in search for invalid characters
 
    .EXAMPLE
    Get-InvalidPublicFolderCharacterReport | Export-Csv .\PFcharReport.csv -notypeinformation -Encoding UTF8
 
    .NOTES
    General notes
    #>



    [CmdletBinding()]
    param (

    )

    $PFDBList = Get-PublicFolderDatabase
    $BadNamePFList = New-Object System.Collections.Generic.List[PSObject]
    ForEach ($PFDB in $PFDBList)    {
        Write-Host "INFO: Checking against... $($PFDB.Server)"
        $FolderList = Get-PublicFolderStatistics -ResultSize Unlimited -Server $PFDB.Server
        foreach ($Folder in $FolderList) {
            if ($Folder.Name -like '*\*' -or
                $Folder.Name -like "*/*" -or
                $Folder.Name -like '*<*' -or
                $Folder.Name -like '*>*' -or
                $Folder.Name -like '*–*' -or
                $Folder.Name -like '*_-*' -or
                $Folder.Name -like ' *' -or
                $Folder.Name -like '* ') {
                Write-Host "FOUND... $($Folder.Name)"
                $BadNamePFList.Add($Folder)
            }
        }
    }
    Write-Host "Number of PFs with Offending Characters: $($BadNamePFList.count)"
    foreach ($BadNamePF in $BadNamePFList) {
        $OffendingChar = New-Object System.Collections.Generic.List[string]
        if ($BadNamePF.Name -like "*\*") {
            $OffendingChar.Add('\')
        }
        if ($BadNamePF.Name -like "*/*") {
            $OffendingChar.Add('/')
        }
        if ($BadNamePF.Name -like "*<*") {
            $OffendingChar.Add('<')
        }
        if ($BadNamePF.Name -like "*>*") {
            $OffendingChar.Add('>')
        }
        if ($BadNamePF.Name -like "*_-*") {
            $OffendingChar.Add('_-')
        }
        if ($BadNamePF.Name -match '\u2013') {
            $OffendingChar.Add('EnDash')
        }
        if ($BadNamePF.Name -like " *") {
            $OffendingChar.Add('Lead-Whitespace')
        }
        if ($BadNamePF.Name -like "* ") {
            $OffendingChar.Add('Trail-Whitespace')
        }

        $NewFolder = $BadNamePF.Name.Replace('\', '-')
        $NewFolder = $NewFolder.Replace('/', '-')
        $NewFolder = $NewFolder.Replace('<', '')
        $NewFolder = $NewFolder.Replace('>', '')
        $NewFolder = $NewFolder.Replace('_-', '-')
        $NewFolder = $NewFolder -replace '\u2013|\u2014', '-'

        Write-Host "Old Folder Name:`t$($BadNamePF.Name)" -ForegroundColor "Cyan"
        Write-Host "New Folder Name:`t$NewFolder" -ForegroundColor "Green"
        Write-Host ""
        Write-Host ""


        $CorrectedPF = New-Object -TypeName PSObject -Property @{
            FolderPath    = $BadNamePF.FolderPath
            OldFolder     = $BadNamePF.Name
            NewFolder     = $NewFolder
            OffendingChar = $OffendingChar
            Database      = $BadNamePF.DatabaseName
            Identity      = $BadNamePF.Identity
            CreationTime  = $BadNamePF.CreationTime
        }
        $CorrectedPF | Select FolderPath, OldFolder, NewFolder, OffendingChar, Database, Identity, CreationTime
    }
}