명령줄 인수를 PowerShell ps1 파일에 전달하는 방법
몇 년 동안, 나는 그 제품을 사용해 왔습니다.cmd/DOS/Windows
셸 및 명령줄 인수를 배치파일에 전달합니다.예를 들어, 파일이 하나 있는데zuzu.bat
그리고 그 안에서, 나는%1
,%2
, 등입니다.이때, 전화했을 때, 같은 조작을 실시합니다.PowerShell
대본when I am in a Cmd.exe shell
대본이 있는데xuxu.ps1
(PS1을 PATHEXT 변수에 추가하고 PS1 파일을 PowerShell과 관련짓습니다).하지만 내가 뭘 하든, 난 아무것도 얻을 수 없을 것 같아.$args
변수.길이는 항상 0입니다.
만약 내가 안에 있다면PowerShell
셸, 대신cmd.exe
(물론) 효과가 있습니다.하지만 PowerShell 환경에서 하루 종일 생활할 수 있을 만큼 편안하지는 않습니다.타이핑하고 싶지 않다powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. 타이핑하고 싶다.xuxu p1 p2 p3 p4
.
이것이 가능한가, 가능하다면 어떻게?
작업에 착수할 수 없는 샘플은 사소한 것입니다.foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
결과는 항상 다음과 같습니다.
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
이 기사가 도움이 됩니다.특히 이 섹션은 다음과 같습니다.
- 파일
지정된 스크립트를 로컬 범위("닷 소스")에서 실행하여 스크립트가 생성하는 함수 및 변수를 현재 세션에서 사용할 수 있도록 합니다.스크립트 파일 경로 및 매개 변수를 입력합니다.File 파라미터 이름 뒤에 입력된 모든 문자는 스크립트파일 경로로 해석되고 그 뒤에 스크립트파라미터가 이어지기 때문에 File은 명령어의 마지막 파라미터여야 합니다.
예.
powershell.exe -File "C:\myfile.ps1" arg1 arg2 arg3
즉, myfile.ps1 파일을 실행하고 arg1 arg2 & arg3은 PowerShell 스크립트의 파라미터입니다.
PowerShell 문서를 검토한 후 이 문제에 대한 유용한 정보를 발견했습니다.를 사용할 수 없습니다.$args
를 사용했을 경우param(...)
파일을 시작할 때 대신$PSBoundParameters
코드를 PowerShell 스크립트에 복사/붙여 넣었는데 PowerShell 버전 2에서 예상한 대로 작동했습니다(이 문제가 발생했을 때 어떤 버전을 사용했는지 알 수 없습니다).
사용하시는 경우$PSBoundParameters
(또한 이 방법은param(...)
스크립트 시작 시)는 배열이 아니라 해시 테이블이므로 키/값 쌍을 사용하여 참조해야 합니다.
param($p1, $p2, $p3, $p4)
$Script:args=""
write-host "Num Args: " $PSBoundParameters.Keys.Count
foreach ($key in $PSBoundParameters.keys) {
$Script:args+= "`$$key=" + $PSBoundParameters["$key"] + " "
}
write-host $Script:args
그리고 전화했을 때...
PS> ./foo.ps1 a b c d
결과는...
Num Args: 4
$p1=a $p2=b $p3=c $p4=d
네, 먼저 PowerShell의 기본적인 보안 기능을 해제하겠습니다.이러한 점을 이해하면 다음과 같은 작업을 수행할 수 있습니다.
- Windows 탐색기 창을 엽니다.
- 메뉴 도구 -> 폴더 옵션 -> 탭 파일 유형
- PS1 파일 유형을 찾아 [상세설정]버튼을 클릭합니다.
- [New] 버튼을 클릭합니다.
- 액션 풋: 오픈
- 응용 프로그램 입력: "C:\WINNT\system32\"Windows PowerShell\v1.0\powershell.exe" "-file" %1" %*
붙이는 것도 것 요.-NoProfile
프로파일의 동작에 따라서도, 거기에 인수가 들어가 있습니다.
파라미터는 다음과 같이 파일에 선언할 수 있습니다.
[string]$param1
[string]$param2
. PowerShell 파일을 불러옵니다..\temp.ps1 param1 param2....param10
등등.
을 PowerShell 수 ..bat
다음과 같이 합니다.
rem ps.bat
@echo off
powershell.exe -command "%*"
다음 이 のの の の の の の in in 에 넣었을 PATH
PowerShell 。
ps foo 1 2 3
다만, 견적은 조금 혼란스러울 수 있습니다.
ps write-host """hello from cmd!""" -foregroundcolor green
cmd에서 ps1 스크립트를 호출하고 스크립트를 호출하지 않고 인수를 전달하려면 다음과 같이 하십시오.
powershell.exe script.ps1 -c test
script -c test ( wont work )
다음을 수행할 수 있습니다.
setx PATHEXT "%PATHEXT%;.PS1;" /m
assoc .ps1=Microsoft.PowerShellScript.1
ftype Microsoft.PowerShellScript.1=powershell.exe "%1" %*
이는 powershell.exe가 경로에 있다고 가정합니다.
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ftype
'xuxu p1 p2 p3 p4'가 표시되지 않을 수 있습니다.하지만 PowerShell을 사용하여
PS > Set-ExecutionPolicy Unrestricted -Scope CurrentUser
이러한 스크립트는 다음과 같이 실행할 수 있습니다.
./xuxu p1 p2 p3 p4
또는
.\xuxu p1 p2 p3 p4
또는
./xuxu.ps1 p1 p2 p3 p4
PowerShell에 조금 더 익숙해지시길 바랍니다.
언급URL : https://stackoverflow.com/questions/1293907/how-to-pass-command-line-arguments-to-a-powershell-ps1-file
'prosource' 카테고리의 다른 글
SQL WHERE...IN 절 다중 열 (0) | 2023.04.08 |
---|---|
Powershell - Invoke-WebRequest 사용이 브라우저 다운로드보다 느린 이유는 무엇입니까? (0) | 2023.04.08 |
Maven 클린 설치: 목표 org.apache.maven을 실행하지 못했습니다.플러그인: maven-displicate-displicate: 3.2.0: 개요 (0) | 2023.04.03 |
Wordpress 메타 상자에 wysiwyg 편집기를 추가하는 방법 (0) | 2023.04.03 |
사용자 지정 지시의 범위 바인딩에서 기호 '@', '&', '=' 및 '>' 사용: 각도JS (0) | 2023.04.03 |