Geek UninstallerをPowerShellで自動更新する小さな仕組みを作った

Geek UninstallerをPowerShellで自動更新する小さな仕組みを作った

Geek UninstallerをPowerShellで自動更新する小さな仕組みを作った

Windowsで軽量なアンインストーラーを使いたいとき、Geek Uninstaller Freeは扱いやすい選択肢です。ただしFree版はportable ZIPとして配布されているため、更新は基本的に「公式サイトを開く、ZIPを落とす、展開して差し替える」という手作業になります。

頻繁な作業ではありませんが、こういう小さな更新作業ほど後回しになりがちです。そこで今回は、Codexを使ってGeek Uninstallerのportable ZIPを公式サイトから取得し、ローカル配置と自動更新タスク登録まで行うPowerShellツールを作りました。

この記事でわかること

  • Geek Uninstaller Freeの更新を自動化した理由
  • 作成したPowerShellツールの構成
  • 公式ZIP取得、バージョン比較、バックアップ、タスク登録の流れ
  • 実装時につまずいたPowerShell / タスクスケジューラのポイント
  • 現在のインストール状態と使い方

先に結論

作ったものは、Geek Uninstaller Freeを公式ダウンロードページから取得し、既存の geek.exe より新しい場合だけ差し替えるPowerShellツールです。

主な特徴は次のとおりです。

  • 公式ダウンロードページから geek.zip を取得する
  • ダウンロードした geek.exe と既存の geek.exe のバージョンを比較する
  • 更新が必要なときだけ上書きする
  • 更新前の実行ファイルを .backup に退避する
  • 実行中の geek.exe がある場合は標準では止める
  • 必要に応じてWindowsのタスクスケジューラへ登録する

このPCでは、毎日9時に更新確認するタスクまで登録済みです。

作ったもの

今回追加したファイルは次の3つです。

  • tools/geek-uninstaller-updater/Update-GeekUninstaller.ps1
  • scripts/Update-GeekUninstaller.ps1
  • tools/geek-uninstaller-updater/README.md

本体は tools/geek-uninstaller-updater/Update-GeekUninstaller.ps1 です。リポジトリ直下から短く呼び出せるように、scripts/Update-GeekUninstaller.ps1 を薄いラッパーとして置いています。

手動で更新確認するだけなら、次のコマンドで足ります。

.\scripts\Update-GeekUninstaller.ps1

毎日9時に自動更新するタスクまで登録する場合は、次のように実行します。

.\scripts\Update-GeekUninstaller.ps1 -RegisterTask -TaskTime "09:00"

仕組み

処理の流れはシンプルです。

  1. Geek Uninstallerの公式ダウンロードページを読む
  2. ページ内の geek.zip リンクを探す
  3. 見つからない場合は /geek.zip にフォールバックする
  4. ZIPを一時フォルダへダウンロードする
  5. ZIPを展開し、geek.exe を探す
  6. 既存の実行ファイルとダウンロードした実行ファイルのバージョンを比較する
  7. 更新が必要なら、既存ファイルを .backup に退避して差し替える
  8. 必要に応じてスタートメニューのショートカットを作る
  9. 必要に応じてWindowsのタスクスケジューラへ登録する

配置先の既定値は次の場所です。

%LOCALAPPDATA%\Programs\GeekUninstaller

管理者権限が必要なシステム領域ではなく、ユーザーごとのportableツール置き場として扱える場所にしました。

壊しにくくするために入れた処理

一番大事にしたのは、更新処理が余計なことをしないことです。

まず、毎回必ず上書きするのではなく、既存バージョンとダウンロード版のバージョンを比較します。すでに同じバージョンなら差し替えません。

次に、更新前の geek.exe は配置先の .backup フォルダへコピーします。portableアプリは差し替えが簡単な反面、問題が起きたときに戻せる導線があると扱いやすくなります。

また、geek.exe が実行中の場合、標準では更新を止めます。強制終了してもよい場合だけ、明示的に -CloseRunning を付ける設計にしました。

.\scripts\Update-GeekUninstaller.ps1 -CloseRunning

このあたりは、小さなツールでも自動化するときに重要です。便利さよりも、意図しない上書きや強制終了を避ける方を優先しています。

実装時につまずいた点

PowerShellらしい小さな落とし穴もありました。

1つ目は、ラッパースクリプトから本体スクリプトへ引数を渡す部分です。最初は文字列配列でコマンドライン引数を組み立てていましたが、ValidateSet 付きの引数で位置が崩れやすくなりました。最終的には、hashtableを使ったスプラッティングに変えて安定させています。

2つ目は、タスクスケジューラ登録時の RunLevel です。最初は LeastPrivilege を指定しましたが、この環境の ScheduledTasks モジュールでは有効な値ではありませんでした。実際には Limited を指定する必要がありました。

こういう差分は、コードを書いただけでは見つかりません。実際にそのPCでタスク登録まで試すことで、ようやく確認できます。

現在の状態

2026年7月4日時点で、このPCでは次の状態まで確認しています。

実行ファイル:
%LOCALAPPDATA%\Programs\GeekUninstaller\geek.exe

インストール済みバージョン:
1.5.3.170

タスク名:
GeekUninstallerAutoUpdate

タスク状態:
Ready

直近の実行:
2026-07-04 09:15:15

直近の実行結果:
LastTaskResult = 0

次回実行:
2026-07-05 09:00:00

LastTaskResult = 0 なので、タスクスケジューラ経由でも正常終了しています。

公式ダウンロードページでも、Geek Uninstaller Freeの最新リリースとして 1.5.3.170 [24 November 2025] が掲載されているため、この記事を書いている時点ではローカルの実行ファイルも最新と見てよさそうです。

使い方

手動で更新確認する場合:

.\scripts\Update-GeekUninstaller.ps1

毎日9時に自動更新する場合:

.\scripts\Update-GeekUninstaller.ps1 -RegisterTask -TaskTime "09:00"

週1回、日曜9時に自動更新する場合:

.\scripts\Update-GeekUninstaller.ps1 -RegisterTask -TaskFrequency Weekly -WeeklyDay Sunday -TaskTime "09:00"

タスクを削除する場合:

.\scripts\Update-GeekUninstaller.ps1 -UnregisterTask

標準以外の配置先を使いたい場合:

.\scripts\Update-GeekUninstaller.ps1 -InstallDir "%LOCALAPPDATA%\Programs\GeekUninstaller" -RegisterTask

まとめ

今回作ったのは、大きなアプリではありません。公式ZIPを取りに行き、バージョンを見て、必要なら差し替え、タスクスケジューラに登録するだけの小さなPowerShellツールです。

ただ、日常的に使うportableツールほど、このくらいの自動化が効きます。手作業で更新する前提のツールでも、公式配布元が安定していて、実行ファイルからバージョンが読めるなら、かなり短いスクリプトで安全寄りに更新できます。

Codexでこうした小さな運用スクリプトを作るときは、「動くか」だけでなく、「何もしなくてよいときに何もしないか」「失敗時に戻せるか」「タスク化した後も状態を確認できるか」まで見ると、日常運用に耐えやすくなります。

出典