2016-10-19 4 views
0

Genau genommen ist die Frage, ich benutze diese Lösung und es funktioniert, aber gibt es einen besseren Weg?Powershell: Finden Sie alle SQL Server-Instanzen pro ser Server?

Mit den folgenden Einschränkungen.

1) Ich möchte keine netzwerkweite Suche nach SQL-Instanzen durchführen, ich befrage bekannte SQL-Server, aber ich möchte die Instanznamen auf jedem abgreifen.

2) Der Code geht davon aus, dass Microsoft den Anzeigenamen für den SQL Server-Dienst nie ändern wird.

function getSQLInstance ([string]$SERVER) { 
    $services = Get-Service -Computer $SERVER 
    # Filter for SQL services 
    $services = $services | ? DisplayName -like "SQL Server (*)" 
    # Remove MSSQL$ qualifier to get instance name 
    try { 
     $instances = $services.Name | ForEach-Object {($_).Replace("MSSQL`$","")} 
    }catch{ 
     # Error if none found 
     return -1 
    } 
    return $instances 
} 

getSQLInstance "YOUR_SERVER" 

Antwort

0

Anstatt neu erfinden das Rad, werfen Sie einen Blick auf, wie SQL Power Doc Instanzen auf einem Server entdeckt. Welche, von bei NetworkScan.psm1 suchen, um Ihren Ansatz sehr ähnlich zu sein scheint:

$ManagedComputer.Services | ForEach-Object { 

       if (($_.Name).IndexOf('$') -gt 0) { 
        $InstanceName = ($_.Name).Substring(($_.Name).IndexOf('$') + 1) 
        $IsNamedInstance = $true 
        $ManagedComputerServerInstanceName = $InstanceName 
       } else { 
        $InstanceName = $null 
        $IsNamedInstance = $false 
        $ManagedComputerServerInstanceName = $_.Name 
       } 

Oder nur SQL Power-Doc verwenden und es zu bestimmten Servernamen zeigen dieses und weitere Daten über die Instanzen zu sammeln.

Verwandte Themen