2011-09-22 20 views

Respuesta

18

Sólo otra manera de hacerlo ... puede ser un poco más rápido que SQLPS para obtener una respuesta rápida.


(get-itemproperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances 
+0

+1 mejor rendimiento en mi computadora! –

2
$a = "MyComputerName" 

[System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources() | ? { $_.servername -eq $a} 

El método Aaron devuelve una respuesta más segura. Leer Here sobre Instance.GetDataSources()

3

importación extensiones de servidor SQL PowerShell:

Import-Module SqlServer 

Luego hacer estos comandos

Set-Location SQLSERVER:\SQL\localhost 
Get-ChildItem 
+0

En mi computadora get-childitem de SQLSERVER: \ SQL \ localhost es realmente lento. No puedo probar en otra computadora ahora. Es un comportamiento normal? gracias –

+0

Mejores formas es: get-childitem | seleccione el nombre de instancia –

3
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | out-null 
$mach = '.' 
$m = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer') $mach 
$m.ServerInstances 
+0

También se puede usar '$ m = (Get-Item SQLServer: \ SQL \ $ mach) .ManagedComputer' –

4

me encontré con que (al menos para mí) ninguna de las anteriores me devolvió la instancia de SQL Express. Tengo 5 instancias nombradas, 4 SQL Server completo, 1 SQL Express. Los 4 completos están incluidos en las respuestas anteriores, el SQL Express no. Así que hice un poco de búsqueda en Internet y encontré el this article de James Kehr, que enumera información sobre todas las instancias de SQL Server en una máquina. Usé este código como base para escribir la función a continuación.

# 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 
} 
0

El espacio de nombres System.Data.Sql contiene clases que admiten la funcionalidad específica de SQL Server.

Al utilizar el espacio de nombres System.Data.Sql puede obtener todas las instancias de MSSQL en una máquina que utiliza este comando en el shell de Windows de potencia: [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()

Cuestiones relacionadas