1

msiexec で Powershell を使用して Java を削除する際に問題が発生しました。結果のコマンドを画面に出力し、それをバッチ ファイルに貼り付けたところ、問題なく動作しました。しかし、Powershell 経由で実行すると、「パッケージが見つかりません」と言って失敗します。誰かが私が間違っているかもしれないことを見つけることができますか? 私はグーグルを上下に調べて、成功せずにコマンドを実行するいくつかの異なる方法を試しましたが、同じ結果が得られました。

cls
$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"}
$msiexec = "c:\windows\system32\msiexec.exe";
#$msiexecargs = '/x:"$app.LocalPackage" /qr'
$msiexecargs = '/uninstall "$app.IdentifyingNumber" /qr /norestart'

if ($java -ne $null)
{
    foreach ($app in $java)
    {
        write-host $app.LocalPackage
        write-host $app.IdentifyingNumber
        #&cmd /c "msiexec /uninstall $app.IdentifyingNumber /passive"
        #Start-Process -FilePath $msiexec -Arg $msiexecargs -Wait -Passthru
        [Diagnostics.Process]::Start($msiexec, $msiexecargs);
    }
}
else { Write-Host "nothing to see here..." }
Write-Host "check end"

目標は、Windows 7 ログオン スクリプトを使用してエンド ユーザー システム上のすべてのバージョンの Java を削除し、最新のものをインストールすることです。私はそれをすべてPowershellにすることを好みますが、これが機能しない場合は、アンインストールGUIDでハードコーディングされたバッチファイルを使用します

write-host ステートメントはすべてデバッグを目的としています。msiexec /x {GUID} /passive /norestart という形式のバリエーションで msiexec を実行することに興味があります。

エラーは次のとおりです。

このスクリプトではなく、それ自体で機能することはわかっています...だから、それは構文の問題だと思います。

ご不明な点がございましたら、お知らせください。

4

1 に答える 1

0

まず、次の違いを知っておく必要があります。

"$app.IdentifyingNumber"

この

"$($app.IdentifyingNumber)"

したがって、後者を使用したいと思います(コメント行のためにコードが少し混乱しています):

&cmd /c "msiexec /uninstall $($app.IdentifyingNumber) /passive"
于 2012-06-12T19:03:43.960 に答える