programing

명령줄 경로에 공백이 있는 PowerShell 스크립트를 실행하려면 어떻게 해야 합니까?

elecom 2023. 11. 4. 09:53
반응형

명령줄 경로에 공백이 있는 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'는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.이름의 철자를 확인하거나 경로가 포함된 경우 경로가 올바른지 확인하고 다시 시도합니다.

처리 중 - 파일 ''C:\Users\test\Documents\test\line space\PS 스크립트" 실패:지정된 경로의 형식이 지원되지 않습니다.-File 매개 변수의 올바른 경로를 지정합니다.

이거 어떻게 고쳐요?

-File매개변수

실행하려면powershell.exe -File명령줄에서 항상 공백이 있는 경로를 큰따옴표로 설정해야 합니다("). 작은따옴표()')은 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

시도해 보기:

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

예제에서 인용과 중복 인용을 이유 없이 혼용하고 있습니다.

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"
)

파라미터를 사용하는 경우 다음과 같이 수행할 수 있습니다.

powershell.exe -command "& {&'C:\A B C\foo.ps1' param1 param2}"

헤샴 A의 블로그 게시물에 감사드립니다. 아민 :-)

공백이 있는 파라미터를 전달해야 했습니다.

배치 파일로 파일을 드래그 앤 드롭하고 있는데, 경로 및/또는 파일 이름에 공백이 있는 서버에서 파일이 꺼져 있습니다.위의 답변들을 테스트한 결과, 저는 이것이 작동하게 되었습니다.참고로 PowerShell 실행 파일을 시작하기 전에 작업 디렉토리로 변경합니다.

배치 파일:

pushd O:\Data\QuickList
start powershell -noexit -Command ".\QuickList.ps1 -datafile '%1'"
popd

언급URL : https://stackoverflow.com/questions/45760457/how-can-i-run-a-powershell-script-with-white-spaces-in-the-path-from-the-command

반응형