I create an empty hash table and then populate it with the results
Set a results variable to the names from the hash table and count the number of records
and call it like this
Note that the search uses the contains method so no need for wildcards
Results come out like this
############################################################################# ################
#
# NAME: Find-Database.ps1
# AUTHOR: Rob Sewell http://newsqldbawiththebeard.wordpress.com
# DATE:22/07/2013
#
# COMMENTS: Load function for finding a database
# USAGE: Find-Database DBName
##################################
Function Find-Database ([string]$Search) {
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer. SMO') | out-null
# Pull a list of servers from a local text file
$servers = Get-Content 'sqlservers.txt'
#Create an empty Hash Table
$ht = @{}
$b = 0
#Convert Search to Lower Case
$DatabaseNameSearch = $search.ToLower()
Write-Output "#################################"
Write-Output "Searching for $DatabaseNameSearch "
Write-Output "#################################"
#loop through each server and check database name against input
foreach ($server in $servers) {
if (Test-Connection $Server -Count 1 -Quiet) {
$srv = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $server
foreach ($database in $srv.Databases) {
$databaseName = $database.Name.ToLower()
if ($databaseName.Contains($DatabaseNameSearch)) {
$DatabaseNameResult = $database.name
$Key = "$Server -- $DatabaseNameResult"
$ht.add($Key , $b)
$b = $b + 1
}
}
}
}
$Results = $ht.GetEnumerator() | Sort-Object Name|Select Name
$Resultscount = $ht.Count
if ($Resultscount -gt 0) {
Write-Output "############### I Found It!! #################"
foreach ($R in $Results) {
Write-Output $R.Name
}
}
Else {
Write-Output "############ I am really sorry. I cannot find" $DatabaseNameSearch "Anywhere ##################### "
}
}