我遇到了一个非常奇怪的问题。如果我使用 Powershell 通过 Enter-PsSession 远程连接到另一台服务器并运行此命令,则软件会安装:
msiexec /i "c:\install\AWS\EC2LaunchV2\AmazonEC2Launch.msi" /qn /lvx C:\install\AWS\EC2Launchv2\AmazonEC2LaunchLog.txt
但是,如果我使用 Invoke-Command 和 -ScriptBlock 并运行相同的命令,它会失败。在这两种情况下,msiexec 都会创建日志文件。但是,当它失败时,它看起来像是运行回滚并以 1603 错误结束。
我能想到的它们之间的唯一区别是当前工作目录。我尝试在安装命令之前输入“cd”命令来更改到几个不同的目录,但都不起作用——“c:\windows\system32,安装文件位置,我的主目录\Documents(这是我使用 Enter-PSSession 时显示的内容)。
有人知道为什么会发生这种情况吗?或者至少,关于如何让 Invoke-Command 工作,还有其他想法吗?我需要使用它,因为我正在尝试编写脚本。
答案1
好吧,我仍然不知道为什么会有这种差异,但我发现如果我改为以 运行该命令cmd /c "msiexec ..."
,那么它就会这样工作。我不确定如何为需要在 msiexec 命令中使用引号的命令格式化,但幸运的是,我可以不用它们。