LoginSignup
15
20

More than 3 years have passed since last update.

PowerShellをダブルクリックやドラッグアンドドロップで実行したい。

Last updated at Posted at 2019-07-13

PowerShellを.Batのように使うメモ

PowerShellがオジちゃんたちに受け入れられない理由の一つに「ダブルクリックで実行できない」「ドラッグアンドドロップで実行できない」というのがあります。

いや、設定すればできるけどね。

ちなみにダブルクリックで実行できないのはPowerShellなんでもできるからです。
レジストリの書換からファイルのネットワーク送信まで何でもござれなので。

忙しい人向け

.ps1ファイルのショートカットを作成し、ショートカットのリンク先の先頭に以下を追加
powershell -NoProfile -ExecutionPolicy RemoteSigned -File

手順

  1. ps1ファイルのショートカットを作成する。
  2. ショートカットのプロパティを開く
  3. ps1ファイルのパスが記載されたリンク先に「コマンド」を追加する

上記の手段でバッチな操作が可能。
コマンドは必要に応じて書き換える必要があるので下で解説します。

追加するコマンドについて

おそらく毎回おまじないのように使うのは以下のコマンド
powershell -NoProfile -ExecutionPolicy RemoteSigned -File

これをショートカットのリンク先の先頭に追加します。

ざっくり説明すると……

  • powershell
    • PowerShellを起動
  • -NoProfile
    • オプションでデフォルトのプロファイルを指定
  • -ExecutionPolicy RemoteSigned
    • オプションで実行ポリシーを指定
  • -File
    • オプションで実行する.ps1ファイルを指定

-ExecutionPolicy RemoteSignedに関してPowerShellのデフォルトではps1ファイルの実行が許可されていないので一時的に許可するというオプションになります。

-Fileの指定先がローカルでない場合は-ExecutionPolicyの設定をUnrestrictedに変更して下さい。

状況に応じて追加するオプション

  • -NoExit
    • Script終了後、ウィンドウを残す。
  • -WindowStyle Hidden
    • Script実行時、ウィンドウを立ち上げない。
    • 正確には立ち上げた瞬間、隠れるというのが正しい気も・・・
  • -NonInteractive
    • Script実行時、ユーザーの入力を受け付けない。
  • -NoLogo
    • Script開始時、著作権情報を表示しない。

-Fileのあとに追加すると駄目なので注意

パラメータの受け取り方

上記を設定することで、ダブルクリックでの実行やドラッグアンドドロップでの実行が可能になります。

ドラッグアンドドロップしたファイルはパス情報が[System.Object]の配列として$Argsに格納されます。

以下確認用のScript

Test1.ps1
echo "実行されました。"
$Args | foreach{
    echo $_.GetType()
    $item = Get-Item -LiteralPath $_
    echo "パラメータ:" $item.FullName
}
echo "終了しました。"
実行されました。

IsPublic IsSerial Name      BaseType
-------- -------- ----      --------
True     True     String    System.Object

パラメータ:
D:\[test] サンプル 1.txt

IsPublic IsSerial Name      BaseType
-------- -------- ----      --------
True     True     String    System.Object

パラメータ:
D:\[test] サンプル 2.txt

終了しました。

注意点

Argsの並び順が不定

ルールがありそう…だけど順序が重要な場合は基本的には受け取ったあとにソートが必要。

ファイル名にスペース

正確にはPowerShellのハマりポイントなんですけど、ファイル名に半角スペース等の文字が含まれている場合、そのままパラメータとして渡すと区切り文字として解釈されるケースがあります。
Path情報として引数に渡す際には-LiteralPathオプション等を行うようにしてください。

詳しくは公式を見てください。

15
20
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
15
20