如何跟踪';由于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