Я пытаюсь добавить связанный сервер к моей локальной установке SQL Server 2008 R2 из сценария Powershell. Вот что я пробовал до сих пор (и варианты):
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<RemoteComputerName>',
@useself=N'False' ,
@locallogin = N'domain\username' ,
@rmtuser = N'username',
@rmtpassword = N'password';
GO
Кажется, что связывание работает нормально, но как только я пытаюсь выполнить запрос (используя Invoke-Sqlcmd в Powershell), я получаю сообщение об ошибке входа в систему.
ОБНОВЛЕНИЕ: я также пробовал связать серверы и выполнить простой запрос в SQL Server Management Studio. Я получаю те же результаты, поэтому проблема не связана с Powershell. Кроме того, я могу запросить связанные серверы, если установлю для @useself значение true. Однако это условие не всегда выполняется на практике (т.е. мой сценарий не должен требовать, чтобы все серверы были зарегистрированы как один и тот же пользователь).
Я что-то упускаю?
Возможно, стоит потратить время на ознакомление с Объекты управления SQL Server. Вот это пример того, как вы можете создавать серверы ссылок через SMO:
#Get a server object which corresponds to the default instance
$svr = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Server
#Create a linked server object which corresponds to an OLEDB type of SQL server product
$lsvr = New-Object -TypeName Microsoft.SqlServer.Management.SMO.LinkedServer -argumentlist $svr,"OLEDBSRV"
#When the product name is SQL Server the remaining properties are not required to be set.
$lsvr.ProductName = "SQL Server"
#Create the Database Object
$lsvr.Create()
Вы можете указать учетные данные для своего локального SQL-сервера, используя ServerConnection объект и для связанного сервера с помощью LinkedServerLogin объект.