2011-12-14 3 views
0
(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null 

У меня есть следующий код, который отлично работает. Единственная проблема заключается в том, что я не буду знать, было ли программное обеспечение удалено или нет. Это не говорит мне, но код ниже.powershell удалить программное обеспечение с ПК

Этот способ работает для меня.

$software = Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" } 

$soft = $software.Uninstall(); 
$n = $software.ReturnValue; 

if ($n -eq 0){ 
SOFTWARE HAS BEEN REMOVED. 
} 

Мой вопрос в том, как узнать, удалено ли программное обеспечение или нет. используя этот код.

(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null 

ответ

0

Вы должны проверить свойство ReturnValue. Когда вы подключаетесь к Out-Null, вы подавляете вывод операции, и нет способа узнать, что произошло, если только вы не произнесете второй вызов, чтобы найти, возвращает ли он указанное программное обеспечение.

Я рекомендую использовать параметр Filter (вместо использования Where-Object) для запроса программного обеспечения на сервере. Чтобы быть в безопасности, вы также должны передавать результаты командлету Foreach-Object, вы никогда не знаете, сколько программных объектов вы возвращаете из-за операции сопоставления (и вы вызываете метод Uninstall, как если бы результат был только одним объектом):

Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -Filter "Name LIKE '%$softwareName%'" | Foreach-Object { 

    Write-Host "Uninstalling: $($_.Name)" 

    $rv = $_.Uninstall().ReturnValue 

    if($rv -eq 0) 
    { 
     "$($_.Name) uninstalled successfully" 
    }  # Changed this round bracket to a squigly one to prperly close the scriptblock for "if" 
    else 
    { 
     "There was an error ($rv) uninstalling $($_.Name)" 
    } 
} 
+0

У меня есть несколько программ, которые мне нужно удалить, и мне нужно подождать, пока он закончит сначала, поэтому я использовал out-null. out-null ожидает завершения первой программы. – hello

+0

Вот почему мне нужно убедиться, что сценарий ждет первой программы для запуска, прежде чем выпустить второй. – hello

+0

Вы можете попытаться назначить вывод переменной вместо использования Out-Null. –

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