매개 변수가 필요한 .ps1 스크립트를 실행하기 위해 start-job을 사용하고 싶습니다. 다음은 스크립트 파일입니다.
#Test-Job.ps1
Param (
[Parameter(Mandatory=$True)][String]$input
)
$output = "$input to output"
return $output
그리고 내가 그것을 실행하는 방법은 다음과 같습니다.
$input = "input"
Start-Job -FilePath 'C:\PowerShell\test_job.ps1' -ArgumentList $input -Name "TestJob"
Get-Job -name "TestJob" | Wait-Job | Receive-Job
Get-Job -name "TestJob" | Remove-Job
이렇게 실행하면 "to output"을 반환하므로 작업이 실행하는 스크립트에서 $ input은 null입니다.
이와 유사한 다른 질문을 보았지만 대부분 -FilePath 대신 -Scriptblock을 사용합니다. Start-Job을 통해 파일에 매개 변수를 전달하는 다른 방법이 있습니까?
tl; dr
$input
인 자동 변수 (PowerShell을 제공함으로써 값) 및 사용자 지정 변수로서 사용되어서는 안된다.
간단히 이름 $input
을 바꾸면 $InputObject
문제가 해결됩니다.
으로 Lee_Dailey의 노트, $input
이다 자동 변수 와 에 할당 할 수 없습니다한다 .
유감스럽게도 예기치 않게, 등 여러 가지 자동 변수는 $input
, 수 참조 :에 할당 이 답변 및 GitHub의 문제 # 12833 및 # 4394을
$input
매개 변수 변수 로 사용하는 경우 전달한 값은 조용히 삭제 되기 때문에 특히 교활한 예 입니다. 함수 나 스크립트의 컨텍스트에서 $input
항상 파이프 라인 입력에 대한 열거 자 이기 때문입니다 .
다음은 문제를 보여주는 간단한 예입니다.
PS> & { param($input) "[$input]" } 'hi'
# !! No output - the argument was quietly discarded.
기본 제공 정의 $input
가 우선한다는 것은 다음과 같이 설명 할 수 있습니다.
PS> 'ho' | & { param($input) "[$input]" } 'hi'
ho # !! pipeline input took precedence
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다