Odkryłem, że (przynajmniej dla mnie) żaden z powyższych nie zwrócił mojej instancji SQL Express. Mam 5 nazwanych instancji, 4 pełnowymiarowe SQL Server, 1 SQL Express. 4 pełnotłuste są zawarte w powyższych odpowiedziach, SQL Express nie. WIĘC, trochę pogrzebałem w Internecie i natknąłem się na ten artykuł autorstwa Jamesa Kehra, który zawiera informacje o wszystkich instancjach SQL Server na maszynie. Użyłem tego kodu jako podstawy do napisania poniższej funkcji.
# get all sql instances, defaults to local machine, '.'
Function Get-SqlInstances {
Param($ServerName = '.')
$localInstances = @()
[array]$captions = gwmi win32_service -computerName $ServerName | ?{$_.Name -match "mssql*" -and $_.PathName -match "sqlservr.exe"} | %{$_.Caption}
foreach ($caption in $captions) {
if ($caption -eq "MSSQLSERVER") {
$localInstances += "MSSQLSERVER"
} else {
$temp = $caption | %{$_.split(" ")[-1]} | %{$_.trimStart("(")} | %{$_.trimEnd(")")}
$localInstances += "$ServerName\$temp"
}
}
$localInstances
}