我需要从Jenkins查询两个数据库来比较返回的结果。 第一个是SQL Server数据库,其中仅启用了Windows身份验证。 我用来验证的上述帐户与我在Jenkins机器上使用的帐户不同。
我考虑过写一个Powershell脚本来做到这一点,因为它有一个Jenkins的Powershell插件。
我发现的大多数解决方案建议使用runas
Windows命令或启动新的Powershell
流程(https://social.technet.microsoft.com/Forums/scriptcenter/en-US/427e768b-a11b-4da3-abeb-131d26557d63/running-powershell-as-a-specific-user?forum=ITCG)。
但是,据我了解,这将打开全新的Powershell窗口/控制台,我在Powershell Jenkins构建步骤中输入的下一个命令仍将在之前的Powershell控制台中执行,而不是具有不同用户的控制台。 有没有解决方法?是否有可能转移"命令这个新的Powershell流程?
在SO(How can I connect to SQL through PowerShell using Windows authentication other than my local one?)上提出了类似的问题,但它对我的案例没有帮助(提到的问题不是关于从Jenkins运行)。
答案 0 :(得分:0)
我在Windows上假设你的Jenkins。
可能的解决方法是
无论使用哪种Windows帐户运行Jenkins服务,都可以在SQL服务器上授予权限,系统服务可以将计算机对象授予SQL服务器。
OR
在Jenkins中存储凭证,运行PowerShell作业,如下所示,当然您需要精心设置Jenkins作业才能使用该凭证。
$Credential = New-Object System.Management.Automation.PSCredential ($env:user, (ConvertTo-SecureString $env:pass -AsPlainText -Force))
Invoke-Command -ComputerName "localhost or SQL server, or any other windows" -Credential $credential -ScriptBlock {Invoke-SqlCommand XXXXXXXXXXX}