【问题标题】:Using Invoke-WmiMethod to run an executable on a remote machine as a particular user使用 Invoke-WmiMethod 以特定用户身份在远程计算机上运行可执行文件
【发布时间】: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 移到答案中,以便我接受。 :-)

标签: powershell impersonation


【解决方案1】:

尝试将New-PSSessionInvoke-CommandCredSSP 身份验证一起使用,因为您似乎遇到了双跳身份验证问题。

查看我对以下问题的回答,了解如何设置和使用 CredSSP,它相当简单。

Running batch file on Remote Computers using PowerShell 2.0

【讨论】:

  • 顺便说一句(这里可能不是问题),但是 New-PSSession 需要 WinRM 服务,而 WMI 几乎是立即启动的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
相关资源
最近更新 更多