-Replace strange output

ok so i thought this would work but im getting a strange result

so i have

$DBS = Get-ChildItem "C:\ExchangeDatabases" -Recurse | where {$_.extension -eq ".db"} | select fullname

producing the below $dbs

$DBs

##which looks like
#FullName                                 
#--------                                 
#C:\ExchangeDatabases\eur_db01\eur_db01.db
#C:\ExchangeDatabases\eur_db01\eur_db04.db
#C:\ExchangeDatabases\eur_db01\eur_db05.db
#C:\ExchangeDatabases\eur_db01\eur_db07.db
#C:\ExchangeDatabases\eur_db04\eur_db01.db
#

#now i want to replace the ".db" with ".yes"

$output3 = foreach ($DB in $DBs)
{
    $log = $db -replace".db", ".yes" 

      [PSCustomObject]@{
                        
                        6 = $log

                        }
}$output3

but my output shows like this

@{FullName=C:\ExchangeDatabases\eur.yes01\eur.yes01.yes}
@{FullName=C:\ExchangeDatabases\eur.yes01\eur.yes04.yes}
@{FullName=C:\ExchangeDatabases\eur.yes01\eur.yes05.yes}
@{FullName=C:\ExchangeDatabases\eur.yes01\eur.yes07.yes}
@{FullName=C:\ExchangeDatabases\eur.yes04\eur.yes01.yes}

why is it replacing the “_db” in the string aswell as the “.db”, aslo i want to get rid of the @{Fullname=}

Found it

using the $ in “.db”

$log2 = $db -replace ".db$", ".yes"

Use single quotes for replacement if you haven’t plans for $variables in replace

May I suggest some changes?

$DBS = Get-ChildItem ‘c:\ExchangeDatabases’ -Filter *.db -Recurse

$output = foreach ($DB in $DBs)
{
[PSCustomObject]@{
‘Logfile’ = Join-Path -Path $DB.Directory -ChildPath ($DB.BaseName + “.log”)
}
}
$output

Many thanks both for suggestions :slight_smile:

…and… ‘.’ in regex matches any symbol, if you want match only real period symbol you should use ‘.’. that the cause of you initial problem

Thanks Max, Regex is a black art :slight_smile: