PowerShell удалить программное обеспечение с ПК - PullRequest
1 голос
/ 14 декабря 2011
(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null

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

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

$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

1 Ответ

1 голос
/ 14 декабря 2011

Вы должны проверить свойство 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)"
     }
}
...