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.ps1scripts/Update-GeekUninstaller.ps1tools/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"
仕組み
処理の流れはシンプルです。
- Geek Uninstallerの公式ダウンロードページを読む
- ページ内の
geek.zipリンクを探す - 見つからない場合は
/geek.zipにフォールバックする - ZIPを一時フォルダへダウンロードする
- ZIPを展開し、
geek.exeを探す - 既存の実行ファイルとダウンロードした実行ファイルのバージョンを比較する
- 更新が必要なら、既存ファイルを
.backupに退避して差し替える - 必要に応じてスタートメニューのショートカットを作る
- 必要に応じて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でこうした小さな運用スクリプトを作るときは、「動くか」だけでなく、「何もしなくてよいときに何もしないか」「失敗時に戻せるか」「タスク化した後も状態を確認できるか」まで見ると、日常運用に耐えやすくなります。

10代のChatGPT利用、家庭で決める5つのルール
Razer Viper V3 Proのバッテリーを色付きドットで表示するトレイアプリを公開しました
AI計算コスト、GPU追加前に測る3指標