powershell -Command (ファイル名) で実行できる場合と、エラーになる場合がある。 - PowerShell

powershell -Command (ファイル名) でPowerShellのスクリプトファイルを実行すると、実行できる場合と、エラーになる場合がある現象についての紹介です。

現象

powershell -Command (ファイル名) でスクリプトファイルを実行できる場合とエラーになる場合があります。

エラーが発生する例

powershell -Command "C:\Develop Repository\iPentecDemo\PowerShell Demo\String\StringJoin.ps1"


下記のエラーが表示されます。
(パス名) : 用語 '(パス名)' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認
識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試
行してください。
発生場所 行:1 文字:1
+ (スクリプトファイルのパス)
+ ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (パス名) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

エラーが発生しない例

powershell -Command "d:\psh\StringJoin.ps1"

原因

"-Command"パラメーターで実行した場合、PowerShellのコマンドプロンプト上でコマンドを実行したことと同等の結果となります。 そのため、PowerShellのコマンドプロンプトで以下のコマンドが実行されます。
C:\Develop Repository\iPentecDemo\PowerShell Demo\String\StringJoin.ps1
パスにスペースが含まれない場合は、問題なく実行できますが、パスにスペースが含まれる場合は、全体を囲む記述が無いため、 スペースまででパスが終了したと判断され、上記のエラーが発生します。

対策1

PowerShellのスペースを含むパスの表現をダブルクォーテーション内に記入することで回避できます。
powershell -Command "& 'C:\Develop Repository\iPentecDemo\PowerShell Demo\String\StringJoin.ps1'"
PowerShellでは、空白を含むパスを記述する場合には、 先頭に「&」を記述し、パスをシングルクォーテーションで囲み記述します。 この記述をコマンドに含めて記述します。
& '(パス)'

対策2

-Command オプションではなく -File オプションを利用します。詳細はこちらの記事を参照してください。
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
最終更新日: 2023-12-09
作成日: 2023-03-22
iPentec all rights reserverd.