본문 바로가기

오류 해결

PowerShell '-File 매개 변수에 대한 인수' 오류: .ps1 파일 경로 문제와 해결

반응형

📌 3줄 요약

  • 원인: -File 뒤에 적은 경로에 .ps1 파일이 실제로 없습니다. 대부분 현재 폴더가 다르거나 파일 이름이 틀린 경우입니다.
  • 해결: 스크립트가 있는 폴더로 이동하거나 전체 경로를 큰따옴표로 감싸서 다시 실행합니다.
  • 확인: Test-Path가 True를 돌려주고 스크립트가 오류 없이 실행되면 해결된 것입니다.

⚠️ 이런 메시지가 떴다면

-File 매개 변수에 대한 인수 'scripts\xxx.ps1'이(가) 없습니다. 기존 '.ps1' 파일의 경로를 -File 매개 변수의 인수로 제공하십시오.

The argument 'scripts\xxx.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.

Windows PowerShell(powershell.exe)에 -File로 스크립트를 넘겼을 때 나오는 오류입니다. 인수를 빠뜨렸다는 뜻이 아닙니다. 적어 준 경로에 그 .ps1 파일이 없다는 뜻입니다.

설치 스크립트를 실행하다 같은 메시지를 만났습니다. 원인은 스크립트 파일이 아직 들어 있지 않은 브랜치의 작업 폴더에서 실행한 것이었습니다. 아래 순서대로 경로를 확인하면 됩니다.

노트북 화면의 경고창과 빈 폴더 아이콘을 바라보는 사람의 뒷모습

적은 경로에 스크립트 파일이 없을 때 나는 오류입니다

✅ 바로 해결

  • 스크립트가 있는 폴더에서 실행했는지 확인합니다: Test-Path -Path .\scripts\xxx.ps1 -PathType Leaf
  • 폴더와 상관없이 실행하려면 전체 경로를 씁니다: powershell -File "C:\Users\사용자이름\프로젝트폴더\scripts\xxx.ps1"
  • Git으로 받은 프로젝트라면 파일이 들어 있는 최신 코드를 받았는지 확인합니다: git pull

왜 이 오류가 나나

-File 뒤에 상대 경로(예: .\scripts\xxx.ps1)를 쓰면 PowerShell은 지금 있는 폴더를 기준으로 파일을 찾습니다. 그 위치에 파일이 없으면 스크립트를 실행하기 전에 이 오류로 멈춥니다. 흔한 원인은 아래 세 가지입니다.

1. 다른 폴더에서 실행했다

가장 흔한 경우입니다. 프로젝트 폴더가 아니라 사용자 폴더(C:\Users\사용자이름)에서 명령을 실행하면 scripts 폴더를 찾지 못합니다. 배치 파일(.bat)에서 실행할 때도 마찬가지입니다. Microsoft 문서는 배치 파일에서 .\ 대신 %~dp0을 쓰라고 안내합니다.

2. 파일이 아직 없다

Git으로 받은 프로젝트라면 지금 브랜치나 지금 받아 둔 코드에 그 스크립트가 없을 수 있습니다. 안내문은 최신 코드 기준으로 쓰여 있는데 내 작업 폴더는 예전 상태인 경우입니다.

3. 파일 이름이나 확장자가 다르다

파일 이름에 오타가 있는 경우입니다.

해결 방법

1단계: 지금 위치와 파일이 있는지 확인

PowerShell 창에서 실행합니다. 지금 있는 폴더를 보여 줍니다.

Get-Location

같은 창에서 스크립트 파일이 있는지 확인합니다. 파일이 있으면 True, 없으면 False를 돌려줍니다.

Test-Path -Path .\scripts\xxx.ps1 -PathType Leaf

False라면 scripts 폴더에 어떤 .ps1 파일이 있는지 봅니다. 이름 오타나 확장자 문제를 여기서 찾을 수 있습니다.

Get-ChildItem -Path .\scripts -Filter *.ps1

2단계: 스크립트가 있는 폴더로 이동하거나 전체 경로 쓰기

PowerShell 창에서 프로젝트 폴더로 이동한 뒤 다시 실행합니다. 경로는 내 프로젝트 위치로 바꿔 씁니다.

Set-Location -Path "C:\Users\사용자이름\프로젝트폴더"
powershell -File .\scripts\xxx.ps1

폴더 위치와 상관없이 실행하려면 전체 경로를 큰따옴표로 감싸 씁니다. 경로에 공백이 있어도 안전합니다.

powershell -File "C:\Users\사용자이름\프로젝트폴더\scripts\xxx.ps1"

PowerShell 7을 쓴다면 위 명령에서 powershell 대신 pwsh를 씁니다.

3단계: Git 프로젝트라면 최신 코드 받기

프로젝트 폴더의 PowerShell 창에서 지금 브랜치와 상태를 확인합니다.

git status

안내문이 말하는 브랜치와 지금 브랜치가 같은지 봅니다. 같다면 최신 코드를 받습니다.

git pull

받은 뒤 1단계의 Test-Path를 다시 실행해 True가 나오는지 확인합니다. 저도 최신 코드를 받은 뒤 같은 설치 스크립트를 다시 실행해 해결했습니다.

4단계: 배치 파일에서 실행한다면 %~dp0 쓰기

배치 파일(.bat) 안에서는 .\ 대신 배치 파일이 있는 폴더를 뜻하는 %~dp0을 씁니다. %~dp0은 끝에 \가 붙어 있으므로 바로 뒤에 폴더 이름을 이어 씁니다. 배치 파일 안에 아래처럼 적습니다.

powershell -File "%~dp0scripts\xxx.ps1"

다른 방법으로, 배치 파일 첫머리에서 작업 폴더를 배치 파일 위치로 바꿔도 됩니다. /d는 드라이브가 다를 때도 함께 바꾸는 옵션입니다.

cd /d "%~dp0"

해결됐는지 확인

PowerShell 창에서 아래 명령이 True를 돌려주는지 봅니다.

Test-Path -Path .\scripts\xxx.ps1 -PathType Leaf

True가 나온 뒤 2단계의 실행 명령을 다시 입력해 같은 오류 없이 스크립트가 시작되면 해결된 것입니다.

초록 체크 표시가 뜬 노트북 앞에서 기지개를 켜는 사람 실루엣

경로를 맞추면 스크립트가 정상적으로 시작됩니다

그래도 안 될 때

  • 경로에 공백이 있는데 따옴표가 없다: 공백 앞까지만 경로로 읽힙니다. 전체 경로를 큰따옴표로 감쌉니다.
  • -File을 맨 뒤에 두지 않았다: Microsoft 문서에 따르면 -File 뒤에 오는 모든 값은 스크립트 경로와 그 스크립트의 인수로 해석됩니다. -NoProfile 같은 PowerShell 옵션은 -File 앞에 둡니다.
  • PowerShell 7(pwsh)에서 .ps1이 아닌 파일을 넘겼다: PowerShell 7.2부터 Windows에서는 -File에 .ps1 파일만 받습니다.

자주 묻는 질문

실행 정책(Execution Policy)을 바꿔야 하나요?

이 오류는 파일을 찾지 못한 경우입니다. 실행 정책 설정과는 다른 문제이므로 정책을 바꾸기 전에 경로부터 확인합니다.

관리자 권한으로 실행하면 되나요?

관리자 권한은 파일 위치 문제를 해결하지 않습니다. 경로를 맞추는 것이 먼저입니다.


이 오류는 -File로 적은 경로에 .ps1 파일이 없다는 뜻입니다. 현재 폴더와 파일 존재를 확인하고, 전체 경로나 %~dp0으로 실행하면 해결됩니다.

반응형