【发布时间】:2013-10-07 05:10:33
【问题描述】:
作为某些部署自动化的一部分,我正在尝试使用 powershell 在远程计算机上运行可执行文件。可执行文件需要以特定用户身份运行,以便它可以连接到适当的数据库来完成其工作。
例如,Powershell 脚本作为用户“Org\TFSUser”在 Machine1 上运行。它需要以“Devel\BuildServices”用户身份在 Machine2 上运行可执行文件。我正在尝试使用 Invoke-WmiMethod commandlet 在远程服务器上启动可执行文件,如下所示。这似乎有效,因为它在远程机器上运行可执行文件,但使用匿名用户登录。我在日志中看到的错误是System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
$username = "devel\BuildServices"
$password = cat Deploy\SecurePasswords\PasswordForBuildServicesAsSecureString.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
Invoke-WmiMethod -class Win32_process -name Create -ArgumentList ("C:\TeamCityDeployments\Importer\Importer.exe -pFile:C:\TeamCityDeployments\Importer\alphaParams.txt >> importer.log") -ComputerName "Machine2.devel" -Impersonation 3 -EnableAllPrivileges -Credential $cred
为了在不提示的情况下使用密码构建凭证对象,我使用了here 指定的安全字符串。
在 Invoke-WmiMethod 中,我提供了指定 here 的参数“-Impersonation 3”。我的理解是,这将在模拟我传入的用户凭据时启动远程进程。
谁能告诉我如何使用特定用户的凭据在远程机器上运行可执行文件。
【问题讨论】:
-
我之前没有真正使用过 Invoke-WmiMethod,它可能是实现您想要的正确方法,但我认为您也可以使用 (New-PSSession/Enter-PSSession ) 或 Invoke-Command,因为它们在调用它们时都需要凭据。
-
尝试使用 Invoke-Command 和 New-PSession 命令。没有任何区别,我仍然不断收到相同的匿名登录错误。
-
调用Invoke-Command时是否指定了认证方式?您需要使用 CredSSP,因为您似乎遇到了双跳身份验证问题。查看我对这个问题的回答,了解如何设置和使用 CredSSP,它相当简单。 stackoverflow.com/questions/15336336/…
-
是的。就是这样。现在正在工作。您应该将上面的 cmets 移到答案中,以便我接受。 :-)