検証環境

  • Windows 11 Pro (24H2)
  • Windows PowerShell PSVersion 5.1.26100.7705

PowerShellスクリプトファイル(.ps1)の実行は面倒

正攻法だと、いちいち権限変えてから実行しなきゃいけなくて、とても面倒
じゃあ権限変更を含め、実行するバッチファイルを添えればいいじゃないか!!という発想

指定した権限は実行する時のみ有効
権限戻し忘れとか心配しなくて良いからいいね!!(自画自賛)

同じフォルダにあるこのバッチファイル(.bat)と同名のPowerShellスクリプトファイル(.ps1)を実行

バッチファイルなので、文字コードはShift-JIS、改行はCR+LFで

使い方は、この.batファイルを、実行したい.ps1ファイルと同じ名前にする
例えば実行したい.ps1ファイルが「hogehoge.ps1」だったとすると
バッチファイルは「hogehoge.bat」にする…あらやだ簡単!!

@echo off
setlocal

:: ---------------------------------------
:: 同じフォルダにあるこの「.bat」と同名の「.ps1」ファイルをpowershellコマンドとして実行
::
:: [%~n0]はこのバッチファイルのファイル名を拡張子無しで取得
:: [%~dp0]はこのバッチファイルのディレクトリを取得
:: スペース入りファイルパスを想定し["]で囲う
:: ---------------------------------------

set batnameonly=%~n0
set ps1filename="%~dp0%batnameonly%.ps1"

:: ファイル存在チェック
if not exist "%ps1filename%" (
    echo ファイルが存在しません
    echo %ps1filename%
    pause
    exit /b 1
)

powershell -ExecutionPolicy Unrestricted -File %ps1filename%

権限(ExecutionPolicy)について

このバッチファイルは、PowerShellの権限を「Unrestricted」でPowerShellスクリプトファイル(.ps1)を実行しています

もうちょい上位の、何でも動いちゃう「Bypass」とかいうのもありますが
それはなんか嫌なので一歩下がって「Unrestricted」にしといてます
もう一歩下がるなら、デフォルトと同じ「RemoteSigned」「Default」を使っても良いかもしれません

…「Unrestricted」以外はあんまり使ってないので、しらんけどwww

参考Webページ