No se puede acceder a una base de datos en un servidor de base de datos desde un servidor remoto diferente

No se puede acceder a una base de datos en un servidor de base de datos desde un servidor remoto diferente

Estoy intentando ejecutar un script que ejecuta una consulta SQL. Funciona bien cuando se ejecuta en el servidor de base de datos, pero cuando intento ejecutar el mismo script en el servidor remoto, falla. Luego intenté guardar el archivo PowerShell en el servidor de base de datos y simplemente hice que el servidor remoto ejecutara ese archivo PowerShell, pero afirma que el archivo no existe.

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

El resultado de este código muestra todo MENOS el nuevo archivo de PowerShell que acabo de crear.

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

Cuando ejecuto el comando que está dentro de -ScriptBlock en el servidor de base de datos, se ejecuta bien. Pero cuando intento ejecutar en el servidor remoto aparece el siguiente error.

 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 

Respuesta1

Intente solucionar problemas mediante una sesión interactiva:

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

Es posible que el módulo SQL no se esté cargando, o tal vez haya otros problemas que puedan aclararse de esta manera. Como referencia, aquí hay un comando que uso para el mismo propósito:

$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 

También puedes intentar conectarte usandosqlcmd.exedesde su máquina local, aunque esto solo devolverá cadenas en lugar de objetos. Lo suficientemente bueno para informes y cosas así:

sqlcmd.exe -S myServer\instanceName

información relacionada