2016-10-10 6 views
1

Ich versuche, Informationen zu den SQL Server-Diensten auf Remotecomputern mithilfe von SMO durch ein Powershell-Skript zu sammeln. Mein Code scheint mit mehreren Instanzen auf dem Server zu funktionieren, wenn sie dieselbe SQL Server-Version verwenden.Auflisten von SQL Server-Diensten mit zwei verschiedenen Versionen von SQL Server auf dem Server

Mein Problem ist, dass, wenn zwei Instanzen installiert sind, die verschiedene Versionen von SQL Server sind, nur ein Satz von Diensten in dem ManagedComputer-Objekt, das ich erstelle, vorhanden ist.

Insbesondere habe ich eine EXPRESS-Installation von SQL Server 2008 R2, als eine benannte Instanz namens "SQLEXPRESS". Die Standardinstanz von SQL Server 2012. Der Code unten den unten Ausgang gibt, die die 2012 Dienstleistungen fehlt:

PS C:\od\scripts\Powershell\ServerInventory> [void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") 

PS C:\od\scripts\Powershell\ServerInventory> $s = New-Object -typeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer myComputer 

PS C:\od\scripts\Powershell\ServerInventory> $s.services.name 
MSSQL$SQLEXPRESS 
SQLAgent$SQLEXPRESS 
SQLBrowser 

PS C:\od\scripts\Powershell\ServerInventory> $s 


ConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo 
Services   : {MSSQL$SQLEXPRESS, SQLAgent$SQLEXPRESS, SQLBrowser} 
ClientProtocols : {} 
ServerInstances : {MSSQLSERVER, SQLEXPRESS} 
ServerAliases  : {} 
Urn    : ManagedComputer[@Name='myComputer'] 
Name    : myComputer 
Properties   : {} 
UserData   : 
State    : Existing 

Für die Managed Objekt, sehe ich nicht die Möglichkeit, es irgendetwas zu passieren andere als die Computername, auf dem ich ausgeführt werde, nichts, was für eine SQL Server-Instanz spezifisch ist.

Ich bin auf der Suche nach einer Möglichkeit, Informationen über beide Dienste der Instanz zu sammeln.

+0

Ich kann das nicht reproduzieren. Was ist mein Computer? Es ist kein gültiger Name oder eine Variable. Ist 'myComputer' der eigentliche Name Ihrer Maschine? Vielleicht verbinden Sie sich mit der falschen Maschine. Versuchen Sie mit '.' anstelle von' myComputer' –

+0

Ja, 'myComputer' ist der Computername, ich änderte es vom tatsächlichen Computernamen. Ich habe versucht, remote und auf der Maschine selbst vergebens, mit dem Namen und '.' – SQLEnforcer

+0

@Panagiotis haben Sie einen Server mit zwei verschiedenen Versionen von SQL Server läuft? – SQLEnforcer

Antwort

0

suchen Netzwerk für SQL Server-Instanzen verwende ich dieses Skript:

clear 
#get all servers with SQL Server 
$servers = [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources() 
#loop through them and get properties 
ForEach ($comp in $servers) { 
    $machine = $comp.ServerName 

    try { 
     Get-WmiObject win32_Service -Computer $machine | 
      where {$_.DisplayName -match "SQL Server \("} | 
      select SystemName, DisplayName, Name, State, Status, StartMode, StartName, Caption 

    } catch { 
     Write-Host("Error retrieving data from $machine") 
    } 
} 

Ausgabe wie:

SystemName : MACHINENAME 
DisplayName : SQL Server (INSTANCE1) 
Name  : MSSQL$INSTANCE1 
State  : Running 
Status  : OK 
StartMode : Auto 
StartName : WORK\USSR$DBEngine 
Caption  : SQL Server (INSTANCE1) 

SystemName : MACHINENAME 
DisplayName : SQL Server (INSTANCE2) 
Name  : MSSQL$INSTANCE2 
State  : Running 
Status  : OK 
StartMode : Auto 
StartName : WORK\USSR$DBEngine 
Caption  : SQL Server (INSTANCE2) 

Error retrieving data from NextMachineName 
..etc 

Wie man auf MACHINENAME sieht dort laufen 2 Instanzen sind. Wir haben keine Server mit zwei verschiedenen Versionen von SQL Server, daher kann ich dieses Problem nicht überprüfen.

+0

Dies ist ein einfacher Workaround, um sicher zu sein. Aber ich hatte gehofft, die ManagedComputer-Klasse zu verwenden, da sie die Dienste liefert, nach denen ich suche, ohne den Anzeigenamen überprüfen zu müssen. – SQLEnforcer

+0

Und wir haben 'SQL Server WMI-Anbieter ist nicht verfügbar auf XXXX' bei der Verwendung von' ManagedComputer' Klasse: | Nun, viel Glück, die Antwort zu finden! – gofr1

+0

Anscheinend gibt es auch einen Fehler: [link] https://connect.microsoft.com/SQLServer/feedback/details/1070235/sql-2014-smo-cant-query-sql-2012-instances-sql- Server-WMI-Provider ist nicht verfügbar [link]. Danke für deine Antworten. – SQLEnforcer

Verwandte Themen