1
(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
4

1 に答える 1

1

ReturnValueプロパティを確認する必要があります。パイプを使用するOut-Nullと、操作の出力が抑制され、問題のソフトウェアが返されるかどうかを確認するために2回目の呼び出しを発行しない限り、何が起こったかを知る方法はありません。

Where-Objectサーバー上のソフトウェアを照会するには、(を使用する代わりに)Filterパラメーターを使用することをお勧めします。安全のために、結果をコマンドレットにパイプする必要がありForeach-Objectます。一致操作によって返されるソフトウェアオブジェクトの数はわかりません(結果が1つのオブジェクトのみであるかのように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)"
     }
}
于 2011-12-14T12:16:29.817 に答える