Invoke-SQLcmd не работает внутри Invoke-команды - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время я запускаю Invoke-SQLcmd в блоке скрипта Invoke-Command и продолжаю получать сообщение об ошибке соединения. Скрипт Invoke-SQLcmd работает, когда запускается сам по себе, но не один раз включается в Invoke-Command.

Invoke-Command -ComputerName "MyserverFQDN" -Credential $Serviceaccount -ScriptBlock {
Invoke-Sqlcmd -ServerInstance "SQLDBFQDN" -Database BizTalkMgmtDb -Query "
USE BizTalkMgmtDb
GO
SELECT        bts_sendport.nvcName, bts_sendport_transport.nvcAddress, nPortStatus, bts_sendport_transport.dtFromTime, 
              bts_sendport_transport.bIsServiceWindow, bts_sendport_transport.dtToTime,
              adm_Adapter.Name As TransportTypeID, bts_application.nvcName AS Application
FROM            bts_sendport With(NOLOCK) INNER JOIN
                         bts_sendport_transport ON bts_sendport.nID = bts_sendport_transport.nSendPortID 
                         INNER JOIN
                         bts_application ON bts_sendport.nApplicationID = bts_application.nID
                         INNER JOIN 
                         adm_Adapter ON bts_sendport_transport.nTransportTypeId = adm_Adapter.Id

WHERE 
nTransportTypeId IS NOT NULL

"
}

Затем я получаю следующую ошибку:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL 
Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
    + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
    + PSComputerName        : "MyServerFQDN"     
ParserError: (:) [Invoke-Sqlcmd], ParserException
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
    + PSComputerName        : "MyserverFQDN"

Как я уже сказал, я могу запустить SQLcmd со своего сервера в качестве учетной записи службы, и он работает нормально, но если я вызываю это с моего компьютера для вызовамой сервер, чтобы использовать мою учетную запись службы для запуска SQLcmd, я получаю эту ошибку.Есть идеи, что происходит или как это решить?

1 Ответ

0 голосов
/ 06 февраля 2019

Мне кажется, проблема в том, что переменная $SQLDBFQDN внутри вашего блока сценария определяется во временном сеансе, отличном от вашего (потому что она запускается в другом процессе PowerShell на удаленном компьютере).

Чтобы использовать локальную переменную в удаленном сеансе , попробуйте изменить ее область, заменив $SQLDBFQDN на $Using:SQLDBFQDN:

Invoke-Command -ComputerName $MyserverFQDN -Credential $Serviceaccount -ScriptBlock {
Invoke-Sqlcmd -ServerInstance $Using:SQLDBFQDN -Database BizTalkMgmtDb -Query "
USE BizTalkMgmtDb
GO
SELECT        bts_sendport.nvcName, bts_sendport_transport.nvcAddress, nPortStatus, bts_sendport_transport.dtFromTime, 
              bts_sendport_transport.bIsServiceWindow, bts_sendport_transport.dtToTime,
              adm_Adapter.Name As TransportTypeID, bts_application.nvcName AS Application
FROM            bts_sendport With(NOLOCK) INNER JOIN
                         bts_sendport_transport ON bts_sendport.nID = bts_sendport_transport.nSendPortID 
                         INNER JOIN
                         bts_application ON bts_sendport.nApplicationID = bts_application.nID
                         INNER JOIN 
                         adm_Adapter ON bts_sendport_transport.nTransportTypeId = adm_Adapter.Id

WHERE 
nTransportTypeId IS NOT NULL

"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...