
バージョン 16.00 未満の 7-zip ソフトウェアをすべて削除し、最新バージョンをインストールします。16 より高いバージョンが存在する場合は何も行いません。
コンピュータ構成のソフトウェア設定のソフトウェア インストール オプションでグループ ポリシー オブジェクトを使用してこれを実行しようとしました。グループ ポリシー オブジェクトはマシンの RSoP に表示されますが、テスト マシンの gpedit.msc 設定の項目の横に黄色の感嘆符が表示されます。
Rabbid10 の提案に従って、次のことを試しました。
$AllRegAppEntries = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ForEach-Object {Get-ItemProperty -Path $_.pspath}
$FilteredApps = New-Object System.Collections.ArrayList
foreach ($App in $AllRegAppEntries) {
if ($App.DisplayName -ilike "*7-Zip*") {
try {
$DisplayVersionAsVersion = New-Object System.Version $App.DisplayVersion
} catch {
$DisplayVersionAsVersion = New-Object System.Version
}
$VersionToCheck = New-Object System.Version "16.0.0.0"
echo "versionToCheck is:"
echo $versionToCheck
echo "DisplayVersionAsVersion is currently: "
echo $DisplayVersionAsVersion
if ($DisplayVersionAsVersion -gt $VersionToCheck) {
[void]$FilteredApps.Add($App)
}
}
}
Echo "last part of script"
foreach ($App in $FilteredApps) {
echo "Hi, Im in the uninstall section"
# Make sure uninstall string uses MSIEXEC
if ($App.UninstallString -ilike "msiexec*") {
$GUID = $App.UninstallString.Substring($App.UninstallString.IndexOf("{"))
$GUID = $GUID.Substring(0, $GUID.IndexOf("}") + 1)
Write-Host "Running the following command: msiexec.exe /x $GUID /qn /norestart"
Start-Process "msiexec.exe" "/x $GUID /qn /norestart" -Wait
}
}
出力は次のようになります:
答え1
これを行うには、削除したい製品のレジストリのアンインストールキーを名前とバージョンで検索する必要があります。PowerShellを使用してこれを行うには、まずインストールされているすべてのアプリケーションを取得します。取得-子アイテム:
$AllRegAppEntries = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | ForEach-Object {Get-ItemProperty -Path $_.pspath}
すべてのエントリを取得したら、次の基準でフィルタリングできます。表示名そして表示バージョンこれを行うには、次のようにします。
$FilteredApps = New-Object System.Collections.ArrayList
foreach ($App in $AllRegAppEntries) {
if ($App.DisplayName -ilike "*7-Zip*") {
try {
$DisplayVersionAsVersion = New-Object System.Version $App.DisplayVersion
} catch {
$DisplayVersionAsVersion = New-Object System.Version
}
$VersionToCheck = New-Object System.Version "16.0.0.0"
if ($DisplayVersionAsVersion -lt $VersionToCheck) {
[void]$FilteredApps.Add($App)
}
}
}
検索条件に一致するアプリをすべて見つけたら、それらのアプリのGUIDを取得する必要があります。これは、アンインストール文字列レジストリ項目の。GUIDを取得したら、製品をアンインストールできるはずです。プロセスの開始GUIDを渡すmsieexec のアンインストールパラメータ付き:
foreach ($App in $FilteredApps) {
# Make sure uninstall string uses MSIEXEC
if ($App.UninstallString -ilike "msiexec*") {
$GUID = $App.UninstallString.Substring($App.UninstallString.IndexOf("{"))
$GUID = $GUID.Substring(0, $GUID.IndexOf("}") + 1)
Write-Host "Running the following command: msiexec.exe /x $GUID /qn /norestart"
Start-Process "msiexec.exe" "/x $GUID /qn /norestart" -Wait
}
}
これが役に立つことを願っています。
更新: バージョンなどを取得する前にアプリを検索するようにコードを調整しました。