我有一个Powershell脚本,它循环遍历SQL Server列表并创建服务器登录和数据库用户。
该脚本在该服务器上的管理员凭据下运行在单独的服务器上,并通过链接服务器连接到其他SQL Server。
#Get administrator credentials
$password = get-content C:\Powershell\General\password.txt | convertto-securestring;
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "DOMAIN\administrator",$password;
当手动运行此脚本时(直接通过Powershell窗口或通过命令提示符使用批处理文件),它可以很好地运行。在手动运行脚本时,我以管理员身份登录到执行服务器。
然后,我尝试使用执行服务器上的SSIS包运行此Powershell脚本,使用执行流程任务运行批处理文件。该包是从SQL代理作业执行的。虽然作业和包似乎都成功执行,但DDL语句并未针对链接服务器执行。
执行服务器上的SQL代理在指定的服务帐户下运行。 SSIS在网络服务帐户下运行。
有没有人对我可能做错了什么有任何想法?我很乐意提供脚本或其他所需的详细信息。
由于
灰
更新:好的,我们还有更多信息。
我拿出了上面发布的内容,因为我发现我实际上并不需要我正在检索的管理员凭据。
我使用服务帐户登录服务器上的脚本。根据@ ElecticLlama的建议,我在目标服务器上设置了Profiler跟踪。手动运行脚本(或手动运行运行Powershell脚本的批处理文件)一切正常,Profiler在服务帐户登录下显示DDL操作。
通过运行相同批处理文件的SQL代理(CmdExec作业或SSIS包)运行作业时,出现以下错误:
'用户' DOMAIN \ ServiceAccount'登录失败。原因:基于令牌的服务器访问验证因基础结构错误而失败。'
有人有任何进一步的想法吗?
答案 0 :(得分:0)
向所有人致以帮助。一旦我得到了最后一个错误,快速搜索显示我只需要重新启动SQL Agent,现在一切正常。特别要感谢@ElecticLlama指出我正确的方向。
灰