无法从不同的远程服务器访问 DB 服务器上的数据库

无法从不同的远程服务器访问 DB 服务器上的数据库

我正在尝试运行一个运行 SQL 查询的脚本。它在 DB 服务器本身上执行时工作正常,但当我尝试在远程服务器上运行同一脚本时,它失败了。然后我尝试在 DB 服务器上保存 powershell 文件,并让远程服务器执行该 powershell 文件,但它声称该文件不存在。

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

该代码的输出显示了除我刚刚创建的新 powershell 文件之外的所有内容。

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

当我在数据库服务器中运行 -ScriptBlock 中的命令时,它执行得很好。但是当我尝试在远程服务器上运行时,它出现以下错误。

 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 

答案1

尝试使用交互式会话进行故障排除:

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

SQL 模块可能未加载,或者可能存在其他问题,通过这种方式可能更清楚。作为参考,下面是我用于相同目的的命令:

$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 

您也可以尝试使用执行命令从本地机器,但这只会返回字符串而不是对象。对于报告和事物来说已经足够好了:

sqlcmd.exe -S myServer\instanceName

相关内容