web-dev-qa-db-ja.com

コマンドラインからのパスに空白を含むPowerShellスクリプトを実行するにはどうすればよいですか?

そのため、コマンドラインからPowerShellスクリプトを実行するさまざまな方法を試してみましたが、いずれもエラーを返します。

このパスは次のとおりです。

C:\Users\test\Documents\test\line space\PS Script\test.ps1

私はこれらを試しました:

powershell -File '"C:\Users\test\Documents\test\line space\PS Script\test.ps1"'

powershell "& ""C:\Users\test\Documents\test\line space\PS Script\test.ps1"""

Powershell "& 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"

Powershell -File 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"

これらすべてのエラーが表示されます。

&:「C:\ Users\test\Documents\test\line space\PS Script \」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認してから再試行してください。

処理-ファイル '' C:\ Users\test\Documents\test\line space\PS Script\''が失敗しました:指定されたパスの形式はedをサポートしていません。 -Fileパラメーターに有効なパスを指定してください。

どんな助けも大歓迎です!

9
Awsmike

あなたの例では、理由なしに引用符と二重引用符を混ぜています。

IF EXIST "C:\Users\test\Documents\test\line space\PS Script\test.ps1" (
  powershell -ExecutionPolicy Unrestricted -File "C:\Users\test\Documents\test\line space\PS Script\test.ps1"
)
3

-Fileパラメーター

コマンドラインからpowershell.exe -Fileを実行する場合は、doubleqoutes(")にスペースを含むパスを常に設定する必要があります。単一引用符(')は、powershellによってのみ認識されます。ただし、コマンドラインでpowershell.exeが呼び出される(したがって、ファイルパラメーターが処理される)ため、"を使用する必要があります。

powershell.exe -File "C:\Users\test\Documents\Test Space\test.ps1" -ExecutionPolicy Bypass

-Commandパラメーター

-Commandの代わりに-Fileパラメーターを使用する場合、-CommandコンテンツはPowerShellによって処理されるため、'内で"を使用できます(この場合は必要です)。

powershell.exe -Command "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass

二重引用符はコマンドラインで処理され、& 'C:\Users\test\Documents\Test Space\test.ps1'は実際にPowerShellで処理されるコマンドです。

解決策1は明らかに単純です。

-Commandは、指定しない場合に使用されるデフォルトのパラメーターでもあることに注意してください。

powershell.exe "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass

これも機能します。

-EncodedCommandパラメーター

コマンドをBase64としてエンコードできます。これは多くの「引用」の問題を解決し、場合によっては(ただし、あなたの場合ではありません)唯一の可能な方法です。

まず、エンコードされたコマンドを作成する必要があります

$Command = "& 'C:\Users\test\Documents\Test Space\test.ps1'" 
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))

そして、次のように-EncodedCommandパラメーターを使用できます

powershell.exe -EncodedCommand JgAgACcAQwA6AFwAVQBzAGUAcgBzAFwAdABlAHMAdABcAEQAbwBjAHUAbQBlAG4AdABzAFwAVABlAHMAdAAgAFMAcABhAGMAZQBcAHQAZQBzAHQALgBwAHMAMQAnAA== -ExecutionPolicy Bypass
20
vrdse

これを試して:

PS C:\> & "C:\Users\test\Documents\test\line space\PS Script\test"
3
C.Hennessey