由于某些原因,在远程计算机上运行invoke命令时,Start-Process msiexec将无法工作。我查了一下,虽然有些人建议使用psiexec我看到很多人使用普通的旧invoke-command在远程机器上启动msi安装程序。
这是我目前使用的代码:
$session = New-PSSession -computername $computerName -ea stop
$command = {
Param(
[Parameter()]
[string]$computerName,
[Parameter()]
[string]$domain,
[Parameter()]
[string]$user,
[Parameter()]
[string]$password,
[Parameter()]
[string]$installDir
)
$msiArgumentList = "/i C:\Installer.msi /l c:\log.txt /quiet /qr /norestart IAGREE=Yes DOMAIN=$domain ACCOUNT=$user PASSWORD=$password PASSWORDCONFIRM=$password INSTALLDIR=$installDir"
Start-Process msiexec -ArgumentList $msiArgumentList -Wait
}
Invoke-Command -session $session -ScriptBlock $command -ArgumentList $computerName, $domain, $user, $password, $installDir
Remove-PSsession -session $session
我使用相同的方法使用intallutil远程安装服务并且它工作正常。在目标计算机上启用脚本以及远程处理,以便所有帐户都能正常工作。两台计算机都具有相同的凭据,但我仍尝试向invoke-command和pssession添加凭据。我在本地测试了代码,安装工作正常。远程它没有,也没有错误。我可以在taskmanager的目标机器上看到msiexec已启动但没有任何反应。我甚至试过禁用防火墙,但仍然没有。我试过&运营商启动msiexec但仍然没有。
不确定我还能尝试什么。
答案 0 :(得分:1)
您可以尝试使用Passthru执行Start-Process以查看是否返回了错误:
(Start-Process -FilePath msiexec.exe -ArgumentList $msiArgumentList -Wait -Passthru).ExitCode
另一件可能有用的事情是将您的记录增加到/l*v
更新1
你可以尝试以下方法,只是为了检查msi的远程命令是否正常工作,它应该是1619。
(Start-Process -FilePath msiexec.exe -ArgumentList "/i no.msi /quiet /qb!" -Wait -Passthru).ExitCode
答案 1 :(得分:1)
如果你不挺身而出,也许你会尝试另一种方式? 使用任务计划程序,例如通过在远程计算机上创建和执行任务来启动命令行:
SchTasks /CREATE /XML mycommand.xml /TN "thiscommand"
SchTasks /RUN /TN "thiscommand"
这是用于在本地计算机上启动任务(例如)。 使用参数/ S,您可以在远程计算机上创建任务,如:
SchTasks /S thatPC /CREATE /XML mycommand.xml /TN "thiscommand"
SchTasks /S thatPC /RUN /TN "thiscommand"
有关定义任务的.xml文件的参数和语法的详细信息,您可以查看帮助。
答案 2 :(得分:1)
似乎问题在于如何构建msi安装程序以及Windows服务器对交互式进程的限制。我最终使用psexec来绕过这个问题。
答案 3 :(得分:0)
对我有用的唯一解决方案是轮询流程状态。这可以在远程PowerShell会话中的scriptblock内运行。
$res = Start-Process -FilePath $process -ArgumentList $arguments -Wait -PassThru
while ($res.HasExited -eq $false) {
Write-Host "Waiting for $process..."
Start-Sleep -s 1
}
$exitCode = $res.ExitCode
答案 4 :(得分:0)
使用上面的答案,我最终得到了
libssp
写主机就是为了验证扩充是否被正确转义,但在调试中被证明是无价的。