首先,我假设您的$serverInstance
变量是一个对象,以下列方式实例化:
$serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server($SQLInstanceName)
我相信当您遇到此问题时,您正在使用IntegratedSecurity = true
(默认值)。您可以通过以下分配将其设置为 false:
$serverInstance.ConnectionContext.LoginSecure=$false;
可以在此答案中找到有关如何解决您遇到的错误的说明:
如果您的 SQL Server 在一个域控制器上,并且您尝试从另一个域控制器连接到它,那么当
IntegratedSecurity = true;
即使您在连接字符串中包含有效的 SQL Server 用户名和密码,也会发生这种情况,因为它们将自动被您的 Windows 登录名和密码覆盖。集成安全意味着简单 - 使用您的 Windows 凭据对 SQL Server 进行登录验证。因此,如果您登录到不同的域控制器,那么它将失败。如果您在两个不同的域控制器上,那么您别无选择,只能使用
IntegratedSecurity = false;
现在,当 Integrated security 为 false 时,SQL Server 将使用连接字符串中提供的 SQL Server 登录名和密码。为此,SQL Server 实例必须将其身份验证模式配置为混合模式,即 SQL Server 和 Windows 身份验证模式。
要在 SQL Server 中验证或更改此设置,您可以打开 SQL Server Management Studio 并右键单击您的服务器名称,然后选择“属性”。在出现的弹出窗口中选择安全,如果需要,您将看到在哪里更改此设置。