我正在运行这个简单的MSIEXEC卸载脚本:
$script = {
invoke-expression "msiexec /qn /x '{C5CF41A6-A65A-4BB3-8C6C-87FF4A730EFD}' "
$logcheck = ""
while($true)
{
if($logcheck -match "Removal success or error status: 0")
{
return
}
else
{
start-sleep -Seconds 1
[string]$logcheck = get-eventlog -logname application -newest 1 | foreach-object {$_.message}
}
}
}
Invoke-Command -computername Comp-name -Credential Domain\user -scriptblock $script
Write-Host "Done"
一切似乎都很好,MSI正在成功卸载,但powershell流程仍然保持开放状态并且不会停止。
我知道如何阻止它?
答案 0 :(得分:0)
由于while($true)
该logcheck不是真正的完整证据,它获取最新的日志项,然后检查状态"删除成功或错误状态:0"。如果任何其他应用程序同时向日志添加条目,则此循环将永远运行。
最好从特定日期获取所有日志项,例如启动msiexec的datetime并查找成功消息。 (而不是使用循环)