Author Posts

April 19, 2017 at 8:02 am

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=}

April 19, 2017 at 8:22 am

Found it

using the $ in ".db"


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

April 19, 2017 at 8:25 am

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

April 19, 2017 at 8:32 am

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

April 19, 2017 at 9:26 am

Many thanks both for suggestions 🙂

April 19, 2017 at 2:22 pm

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

April 20, 2017 at 8:04 am

Thanks Max, Regex is a black art 🙂