Powershell 留在内存中
Powershell stays in memory
我是运行这个简单的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 进程保持打开状态并且不会停止。
知道如何阻止它吗?
它不会因为 while($true)
而停止
logcheck 并不是真正的完整证明,它获取最新的日志项,然后检查状态 "Removal success or error status: 0"。如果任何其他应用程序同时向日志添加条目,此循环将永远运行。
最好获取某个日期以来的所有日志项,例如启动 msiexec 的日期时间并查找成功消息。 (并且不使用循环)
我是运行这个简单的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 进程保持打开状态并且不会停止。
知道如何阻止它吗?
它不会因为 while($true)
logcheck 并不是真正的完整证明,它获取最新的日志项,然后检查状态 "Removal success or error status: 0"。如果任何其他应用程序同时向日志添加条目,此循环将永远运行。
最好获取某个日期以来的所有日志项,例如启动 msiexec 的日期时间并查找成功消息。 (并且不使用循环)