문제

PowerShell에서 배경 작업을 사용하고 싶습니다.

스크립트 블록 정의의 순간에 변수를 평가하는 방법은 무엇입니까?

$v1 = "123"
$v2 = "asdf"

$sb = {
    Write-Host "Values are: $v1, $v2"
}

$job = Start-Job -ScriptBlock $sb

$job | Wait-Job | Receive-Job

$job | Remove-Job

나는 빈 v1과 $ v2의 빈 값을 인쇄합니다. 스크립트 블록과 배경 작업으로 어떻게 평가할 수 있습니까?

도움이 되었습니까?

해결책

한 가지 방법은 [scriptBlock] :: 메소드를 사용하여 로컬 변수를 사용하여 확장 가능한 문자열에서 스크립트 블록을 작성하는 것입니다.

$v1 = "123"
$v2 = "asdf"

$sb = [scriptblock]::Create("Write-Host 'Values are: $v1, $v2'")

$job = Start-Job -ScriptBlock $sb

또 다른 방법은 초기화 스크립트에서 변수를 설정하는 것입니다.

$Init_Script = {
$v1 = "123"
$v2 = "asdf"
}

$sb = {
    Write-Host "Values are: $v1, $v2"
}

$job = Start-Job -InitializationScript $Init_Script -ScriptBlock $sb 

세 번째 옵션은 -argumentlist 매개 변수를 사용하는 것입니다.

$v1 = "123"
$v2 = "asdf"

$sb = {
    Write-Host "Values are: $($args[0]), $($args[1])"
}

$job = Start-Job  -ScriptBlock $sb -ArgumentList $v1,$v2

다른 팁

가장 간단한 솔루션 (V3 이상이 필요)은 다음과 같습니다.

$v1 = "123"
$v2 = "asdf"

$sb = {
     Write-Host "Values are: $using:v1, $using:v2"
}

$job = Start-Job -ScriptBlock $sb

당신은 $를 사용하여 명시 적 매개 변수 () 블록과 같은 작업을 사용하는 것으로 생각할 수 있습니다.

스크립트 블록에서 값을 매개 변수로 선언 한 다음 사용으로 전달하십시오. -ArgumentList

$v1 = "123"
$v2 = "asdf"

$sb = {
    param
    (
        $v1,
        $v2
    )
    Write-Host "Values are: $v1, $v2"
}

$job = Start-Job -ScriptBlock $sb -ArgumentList $v1, $v2

$job | Wait-Job | Receive-Job

$job | Remove-Job

나는 검증 할 컴퓨터에 있지 않지만 이것은 작동해야합니다.

$sb = {
    param($p1,$p2)
    Write-Host "Values are: $p1, $p2"
}

$job = Start-Job -ScriptBlock $sb -ArgumentList $v1,$v2

직장에 출근 할 때 이것을 두 번 확인하겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top