0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellスクリプトをデスクトップショートカットに置いたうえで、常駐起動させるTips

0
Last updated at Posted at 2026-03-30

その他の環境構築まとめはこちら
Claude Code 環境構築・運用Tipsまとめ

この記事は【改良版】WSL2版 Claude Code にスクショを渡す操作を 3→2キーに減らした の補足です。

この記事は何?

自作のPowerShellスクリプトをデスクトップのショートカットからダブルクリック起動して、バックグラウンドで常駐させたい。ついでに二重起動も防ぎたい。

で、AIで考えてもらったことの覚書です。

1. デスクトップショートカットの作り方

手順

  1. デスクトップで 右クリック → 新規作成 → ショートカット

  2. 「項目の場所」に以下を入力。"\path\to\your-script.ps1"はスクリプトのあるパス+ファイル名にすること:

    powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\path\to\your-script.ps1"
    
  3. 名前を付けて「完了」

各オプションの意味

オプション 効果
-NoProfile ユーザーのPowerShellプロファイルを読み込まない(起動を速くし、環境差異を回避)
-ExecutionPolicy Bypass 実行ポリシーを一時的にバイパス(スクリプト実行を許可)
-WindowStyle Hidden PowerShellウィンドウを非表示にする
-File 実行するスクリプトのパスを指定

ウィンドウが一瞬チラつく場合

-WindowStyle Hidden を付けても、ウィンドウが一瞬だけ表示されることがあります。気になる場合は、ショートカットのプロパティで 「実行時の大きさ」を「最小化」 に変更すると軽減できます。

2. Windows起動時に自動で常駐させる

ショートカットをスタートアップフォルダにコピーするだけです。

Win + R → shell:startup → Enter

開いたフォルダに、先ほど作ったショートカットをコピー(または移動)します。次回のログオン時から自動で常駐が始まります。

3. 二重起動を防止する(Mutex)

ショートカットを何度もダブルクリックすると、プロセスが複数立ち上がります。常駐スクリプトでは特に困るので、Mutexで排他制御するのがおすすめです。

スクリプトの冒頭に以下を追加します。

# 二重起動防止(Mutexで排他制御)
$mutexName = "Global\YourScriptUniqueName"
$mutex = New-Object System.Threading.Mutex($false, $mutexName)
if (-not $mutex.WaitOne(0, $false)) {
    exit 0
}

終了時にMutexを解放します。try / finally で囲んでいれば、異常終了時も確実に解放されます。

try {
    # --- メインの処理 ---
} finally {
    $mutex.ReleaseMutex()
    $mutex.Dispose()
}

ポイント

  • $mutexName はシステム全体で一意な名前にする。Global\ プレフィックスを付けると、異なるセッション間でも排他制御が効く
  • 2回目以降の起動は exit 0 で即終了するので、何度クリックしても安全

4. 組み合わせたテンプレート

以上をまとめると、常駐スクリプトのテンプレートはこうなります。

# your-script.ps1
# 常駐型スクリプトのテンプレート

# ---- 二重起動防止 ----
$mutexName = "Global\YourScriptUniqueName"
$mutex = New-Object System.Threading.Mutex($false, $mutexName)
if (-not $mutex.WaitOne(0, $false)) {
    exit 0
}

try {
    # ---- ここにメインの処理を書く ----
    # 例: 無限ループで常駐、イベント監視、RegisterHotKey など

    while ($true) {
        # 何かを監視・処理する
        Start-Sleep -Seconds 1
    }
} finally {
    # ---- 終了処理 ----
    $mutex.ReleaseMutex()
    $mutex.Dispose()
}

ショートカットの「項目の場所」は以下の通り。

powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\path\to\your-script.ps1"

停止方法

-WindowStyle Hidden で起動したスクリプトにはウィンドウがないので、停止はタスクマネージャーから行います。

  1. Ctrl+Shift+Esc でタスクマネージャーを開く
  2. 「詳細」タブで powershell.exe を探す
  3. 右クリック →「タスクの終了」

常駐スクリプトが複数ある場合は、コマンドラインの列を追加表示すると見分けがつきます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?