5 개의 스크립트를 파이프 라인으로 연결하는 15 개의 스크립트 인스턴스를 실행하고 싶습니다. 지금까지 pixie 먼지가 누락되었습니다. 나는 sub_slave 스크립트를 호출하는 슬레이브 스크립트를 호출하는 마스터 스크립트를 사용하여 문제를 해결했다. (실패를 재연하는 데 파이프 라인이 필요하지 않다.)* .ps1 스크립트가 백그라운드 작업으로 실행되어 * .ps1 스크립트를 실행할 수 있습니까?
master.ps1이 slave.ps1 각 백그라운드 작업은 slave.ps1이 sub_slave.ps1을 호출하는 지점에서 무기한 중단됩니다. slave.ps1에서 sub_slave.ps1로 호출을 주석 처리하면 master.ps1이 완료까지 실행됩니다. 그리고 slave.ps1을 직접 시작하면 sub_slave.ps1에 대한 호출이 정상적으로 실행됩니다. 문제는 다루기 힘든 것 같습니다. 이중 체인을 시도해보십시오. 문서에서 임의의 깊이를 지나서 이러한 스크립트를 데이지 체인으로 연결할 수 없다는 것을 알지 못했지만 어쩌면 충분히 깊이 읽지 않을 수 있습니까?
간단한 텍스트 파일에 추가 콘텐츠로 스크립트를 통해 진행 상황을 추적하고 있습니다.
D : 작업 \ \ master.ps1
$indexes = @(0,1,2)
$initString = "cd $pwd"
$initCmd = [scriptblock]::create($initString)
set-content -path out.txt -value "Master started"
foreach ($index in $indexes)
{
add-content -path out.txt -value "job starting"
start-job -filepath slave.ps1 -InitializationScript $initCmd -ArgumentList @("master index $index originated")
}
add-content -path out.txt -value "master completed"
D : \ 작업 \ slave.ps1
#requires -version 2.0
param (
[parameter(Mandatory=$false)]
[string]$message = "slave_originated"
)
begin
{
Set-StrictMode -version Latest
add-content -path out.txt -value "slave beginning in $pwd"
}
process
{
add-content -path out.txt -value "slave processing $message"
invoke-expression "D:\jobs\sub_slave.ps1 -message $message"
}
end
{
add-content -path out.txt -value "slave ending"
}
D : 작업 \ sub_slave.ps1 #requires -version \ 2.0
param (
[parameter(Mandatory=$false)]
[string]$message = "sub_slave originated"
)
begin
{
Set-StrictMode -version Latest
add-content -path out.txt -value "sub_slave beginning"
}
process
{
add-content -path out.txt -value "sub_slave processing $message"
}
end
{
add-content -path out.txt -value "sub_slave ending"
}
코드를 주석으로 처리하지 않고 작성한 것으로 실행하면 out.txt에 다음과 같이 표시됩니다.,363,210 D : \ 작업 각 작별 메시지 후 바로 다음 명령을 sub_slave.ps1로부터 메시지가 전혀 나타나지 않는 것을 sub_slave.ps1과에 대한 호출입니다 \ out.txt
Master started
job starting
job starting
job starting
master completed
slave beginning in D:\jobs
slave processing master index 0 originated
slave beginning in D:\jobs
slave processing master index 1 originated
slave beginning in D:\jobs
slave processing master index 2 originated
참고. 3 개의 powershell.exe 프로세스가 영원히 행복하게 실행되어 시스템이 중단됩니다. Get-job은 3 개의 프로세스가 여전히 실행 중이고 HasMoreData를보고합니다.
내가 가지고있는 유일한 단서가 나는 사고가 정지 된 프로세스를 덤프하는 경우, 내가 볼 것입니다 :
Number of exceptions of this type: 2
Exception MethodTable: 79330e98
Exception object: 012610fc
Exception type: System.Threading.ThreadAbortException
Message: <none>
InnerException: <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131530
-----------------
Number of exceptions of this type: 2
Exception MethodTable: 20868118
Exception object: 01870344
Exception type: System.Management.Automation.ParameterBindingException
Message: System error.
InnerException: <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131501
-----------------
은 아마도 내가 매개 변수 문제의 어떤 종류가 있어요? sub_slave.ps1에서 모든 매개 변수를 제거하면 동작이 변경되지 않으므로 의심 스럽지만 가능합니다. 나는 어떤 생각이든 열려 있습니다.
Grrrr. 고마워, 제이슨. 25 번의 시도를하면서 어딘가에서 invoke-expression을 추가하여 해결책을 닦았습니다. 나는 라인 어딘가에 invoke-expression을 추가했다. 내가 다시 데려 간다면! 테스트 작업을 수정하여 파이프 라이닝을 포함 시켰습니다. 솔루션이 아직 보유하고 있으므로이 답변에 완전히 답변했습니다. 고맙습니다. – codepoke
Invoke-Expression은 항상 나에게 노란 깃발을 가지고 있습니다. 코드를 문자열로 변환 한 다음 다시 평가하는 것을 의미합니다. 인용, 인수 바인딩 등에서 문제를 일으킬 수 있습니다.BTW, 원래 코드가 내게 걸리지 않았으므로 세 작업 모두 Failed로 완료되었지만 동일한 로그 출력이 있습니다. – JasonMArcher
감사. 문제는 내가 코딩 한 서버에서 원격 기능이 꺼져 있다는 것입니다. 내 랩톱에서 코드를 시도하지 않았지만 실제로 mod를 적용한 후에도 제대로 작동했지만 서버에서 여전히 실패했습니다. WinRM이 단서를주었습니다. – codepoke