2015-05-21 4 views
0

Я бег этого простого сценария MSIEXEC деинсталляции:Powershell остается в памяти

$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

Он не останавливается из-за while($true)

Это Logcheck не совсем полное доказательство, он получает самый новый элемент журнала и затем проверяет статус «успех удаления или статус ошибки: 0». Если какое-либо другое приложение добавляет запись в журнал одновременно, этот цикл будет работать вечно.

Лучше получить все записи в журнале с определенной даты, например. запустите datetime msiexec и найдите сообщение об успешном завершении. (и не использовать петлю)

Смежные вопросы