Von einem anderen Remote-Server aus kann nicht auf eine Datenbank auf einem DB-Server zugegriffen werden

Von einem anderen Remote-Server aus kann nicht auf eine Datenbank auf einem DB-Server zugegriffen werden

Ich versuche, ein Skript auszuführen, das eine SQL-Abfrage ausführt. Es funktioniert einwandfrei, wenn es auf dem DB-Server selbst ausgeführt wird, aber wenn ich versuche, dasselbe Skript auf dem Remote-Server auszuführen, schlägt es fehl. Ich habe dann versucht, die Powershell-Datei auf dem DB-Server zu speichern und den Remote-Server diese Powershell-Datei ausführen zu lassen, aber er behauptet, die Datei existiere nicht.

 Invoke-Command -ComputerName "advtch-db1" -ScriptBlock {
 Push-Location C:\Scripts\SQL 
 ls -r
 } 

Die Ausgabe dieses Codes zeigt alles AUSSER der neuen Powershell-Datei, die ich gerade erstellt habe.

Invoke-Command -ComputerName advtch-db1 -ScriptBlock {
Invoke-Sqlcmd -ServerInstance "advtch-db1" -Query "
SELECT TOP (1000) [SettingID]
      ,[Name]
      ,[Value]
      ,[LastUpdated]
  FROM [advtch_TEST].[dbo].[Settings]
"
} 

Wenn ich den Befehl ausführe, der sich im -ScriptBlock auf dem DB-Server befindet, wird er problemlos ausgeführt. Aber wenn ich versuche, ihn auf dem Remote-Server auszuführen, wird der folgende Fehler angezeigt.

 Database 'advtch_TEST' cannot be opened because it is offline.
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
    + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
    + PSComputerName        : advtch-db1 

Antwort1

Versuchen Sie, das Problem mithilfe einer interaktiven Sitzung zu beheben:

PS C:\> Enter-PSSession Enter-PSSession -ComputerName "advtch-db1"
[advtch-db1]: PS C:\WINDOWS\system32> Invoke-Sqlcmd -ServerInstance "advtch-db1" -Query "My query"

Das SQL-Modul wird möglicherweise nicht geladen, oder es gibt andere Probleme, die auf diese Weise klarer werden. Als Referenz ist hier ein Befehl, den ich für denselben Zweck verwende:

$result = Invoke-Command -ComputerName 'MySQLServer.domain.com' {
    Invoke-Sqlcmd -ServerInstance '.\SQLEXPRESS'  -Database MyDB -Query "SELECT strDisplayName,field1,field2,field3 
FROM t_table
WHERE field1 IN (6,7,43,83,94,95,96)
ORDER BY strDisplayName"
} | select strDisplayName,field1,field2,field3 

Sie können auch versuchen, eine Verbindung herzustellen übersqlcmd.exevon Ihrem lokalen Rechner, allerdings werden hierdurch nur Zeichenfolgen und keine Objekte zurückgegeben. Gut genug für Berichte und dergleichen:

sqlcmd.exe -S myServer\instanceName

verwandte Informationen