![Powershell - Invoke 命令不运行 msiexec.exe](https://linux22.com/image/754203/Powershell%20-%20Invoke%20%E5%91%BD%E4%BB%A4%E4%B8%8D%E8%BF%90%E8%A1%8C%20msiexec.exe.png)
我想使用 Powershell 远程处理在一组服务器上安装 TortoiseSVN 客户端。基本操作有效,但以下命令无法作为远程处理运行
Invoke-Command -ComputerName myserver -ScriptBlock {Start-Process "msiexec.exe" -ArgumentList "/i \\fileserver\install\subversionclients\TortoiseSVN-1.14.0.28885-x64-svn-1.14.0.msi /passive /norestart /qn ADDLOCAL=ALL" -Wait}
另一方面,登录到服务器并发出以下命令
Start-Process "msiexec.exe" -ArgumentList "/i \\fileserver\install\subversionclients\TortoiseSVN-1.14.0.28885-x64-svn-1.14.0.msi /passive /norestart /qn ADDLOCAL=ALL" -Wait`
...有效。我一直无法弄清楚原因 - 没有显示任何错误,也没有返回值。据我了解,Invoke-command 默认会提升权限。尝试添加-Verb RunAs
也无济于事。我也有 -argument -wait
(参考。https://serverfault.com/a/550169/180067) 但对于我的情况这也没什么帮助。
答案1
这是因为您正在使用 Kerberos 身份验证,并且尝试执行“双跳”,而 Kerberos 默认无法实现这一点(基本上,您可以对“myserver”进行身份验证,但不能再次“跳”到“fileserver”)。
你可以做什么:
- 将文件复制到服务器本地,然后从本地目录远程安装 MSI。
- 或者,如果您不想将其复制到本地,则可以使用 CredSSP 而不是 Kerberos 来向“myserver”进行身份验证,但这需要配置。将
-Authentication CredSSP
和添加-Credential "yourUserName"
到命令中,然后按照错误消息中显示的说明进行操作。
更多详细信息、注意事项和不同解决方案请参见此处: 在 PowerShell Remoting 中实现第二跳
[...]您可以使用凭据安全支持提供程序 (CredSSP) 进行身份验证。CredSSP 在远程服务器 (ServerB) 上缓存凭据,因此使用它可能会使您遭受凭据盗窃攻击。如果远程计算机受到威胁,攻击者就可以访问用户的凭据。默认情况下,客户端和服务器计算机上的 CredSSP 均处于禁用状态。您应仅在最受信任的环境中启用 CredSSP。例如,域管理员连接到域控制器,因为域控制器是高度受信任的[...]
以下是配置 CredSSP 的方法: 使用 CredSSP 启用 PowerShell“第二跳”功能
在我的客户端工作站上,我需要使用 Enable-WSManCredSSP cmdlet 来启用客户端角色,然后指定要将我的凭据委托给的计算机。此命令如下所示。
启用-WSManCredSSP-角色客户端-DelegateComputer *.iammred.net-Force
现在,我还需要在远程服务器上进行更改,以允许它使用委派的凭据。此命令如下所示。
启用-WSMaCredSSP-角色服务器-强制