如何跟踪';由于PowerShell脚本中较早的命令而编写的?

如何跟踪';由于PowerShell脚本中较早的命令而编写的?,powershell,windows-installer,Powershell,Windows Installer,我正在为我公司的桌面应用程序编写安装和配置过程脚本。我们发送了一个文件,但无法将所有内容都放在安装程序中。。。继续前进!我习惯于等待 我想了解的是msiexec的日志输出。我想在安装程序运行时将日志内容流式传输到控制台。我猜解决方案有多个部分 以后台可等待的方式运行安装程序 跟踪日志文件,直到满足某些条件(安装程序作业完成) 可选:过滤输出或写入调试/详细以获得乐趣 您可以删除作业,并在安装完成后注销事件 将写入主机更改为写入详细以获得-Verbose支持 编辑:我在安装应用程序时测试了我的答案

我正在为我公司的桌面应用程序编写安装和配置过程脚本。我们发送了一个文件,但无法将所有内容都放在安装程序中。。。继续前进!我习惯于等待

我想了解的是
msiexec
的日志输出。我想在安装程序运行时将日志内容流式传输到控制台。我猜解决方案有多个部分

  • 以后台可等待的方式运行安装程序
  • 跟踪日志文件,直到满足某些条件(安装程序作业完成)
  • 可选:过滤输出或写入调试/详细以获得乐趣
  • 您可以删除作业,并在安装完成后注销事件

    写入主机
    更改为
    写入详细
    以获得
    -Verbose
    支持

    编辑:我在安装应用程序时测试了我的答案,发现读取日志文件时速度非常慢。我更新了
    Get Content
    调用,使用
    -ReadCount 100
    以行数组的形式发送数据。已更新
    写入主机
    行以处理阵列

    我还发现,使用
    -Wait
    开关打开
    启动进程
    会导致在安装完成后写入所有日志输出。可通过使用以下方法解决此问题:

    $msi = Start-Process -FilePath "msiexec" -ArgumentList $p -PassThru
    do{}until($msi.HasExited)
    
    编辑2:嗯,当我同时使用
    -Wait
    -ReadCount
    时,我没有得到所有日志文件。我将日志文件的读取恢复到最初的状态。我还不知道该怎么改变速度

    编辑3:我已更新代码,使用StreamReader而不是
    获取内容
    ,并将代码放入函数中。你可以这样称呼它:

    $path = "$ENV:TEMP\$name.log"
    if(Test-Path $path){Remove-Item $path}
    
    $msi = Start-Process -FilePath "msiexec" -ArgumentList $p -PassThru
    $tail = Start-FileTail $p
    do{}until($msi.HasExited)
    sleep 1 # Allow time to finish reading log.
    Stop-FileTail $tail
    

    哇,谢谢你的工作!今晚我可能有时间实施这个计划。我会定期回来查看:)仍然没有尝试解决方案,这是工作中的一个次要项目,而且,你不知道吗,我的主要职责一直在妨碍:)但是,你已经为代表等待了足够长的时间!
    $msi = Start-Process -FilePath "msiexec" -ArgumentList $p -PassThru
    do{}until($msi.HasExited)
    
    $path = "$ENV:TEMP\$name.log"
    if(Test-Path $path){Remove-Item $path}
    
    $msi = Start-Process -FilePath "msiexec" -ArgumentList $p -PassThru
    $tail = Start-FileTail $p
    do{}until($msi.HasExited)
    sleep 1 # Allow time to finish reading log.
    Stop-FileTail $tail