여러개의 runspace가 다른 시간에 멈추기 시작하는 runspace 풀을 생성 중입니다.arraylist의 runspace에 대한 Register-ObjectEvent
내 모든 실행 영역을 추적하려면 컬렉션으로 이동하십시오.
GUI에있는 사용자에게 runspace의 정보를 반환 할 수 있도록 각 이벤트 이벤트를 등록하려고합니다. 현재 열심히 테스트를 위해 0으로 구분 한 코드가 레지스터 objectevent 줄에 실패
$Global:RunspaceCollection
$Global:x = [Hashtable]::Synchronized(@{})
$RunspaceCollection = @()
[Collections.Arraylist]$Results = @()
$RunspacePool = [RunspaceFactory]::CreateRunspacePool(1,5)
$RunspacePool.Open()
$action = {
Foreach($Runspace in $Global:RunspaceCollection.ToArray()) {
If ($Runspace.runspace.iscompleted){
$results.add($runspace.powershell.endinvoke($Runspace.runspace))
$runspace.powershell.dispose()
$runspacecollection.remove($Runspace)
Write-Host "I AM WORKING"
test-return
}
}
Function Start-PasswordReset($username) {
$scriptblock = {
Param($userame)
start-sleep -Seconds 10
$Result = "I have reset" + $username
$result
}
$Powershell = [PowerShell]::Create().AddScript($ScriptBlock).AddArgument($username)
$Powershell.RunspacePool = $RunspacePool
[Collections.Arraylist]$Global:RunspaceCollection += New-Object -TypeName PSObject -Property @{
Runspace = $PowerShell.BeginInvoke()
PowerShell = $PowerShell
}
Register-ObjectEvent -InputObject $runspacecollection[0].Runspace -EventName statechanged -Action $Action
}
}
하지만 현재 실행 영역 수있을 것입니다 :
나는 문제가 있어요 부분은 여기 최종 버전에서. 나는 작은 실수를 저 지르거나 이것이 어떻게 작동하는지에 대한 근본적인 이해가 부족하다는 것을 알지 못합니다. 나는 두 가능성에 모두 열려 있습니다!
실제로 달성하려는 내용이 명확하지 않습니다. 당신이 게시 한 코드가 작동하지 않습니다, 나를 위해 배열 목록에 새 개체를 추가하지 못했습니다, 그 완전한 코드가 아니어야합니까? Register-Object 이벤트에는 개체에서 발생하는 이벤트가 필요하므로 PSObject.Runspace에 StateChanged 이벤트가 있어야합니다. 더 완벽한 코드 목록이나 달성하려는 내용에 대한 자세한 설명을 제공해주십시오. –
완전한 코드가 아니며, tommorow로 돌아 가면 게시 할 것입니다. 본질적으로 나는 컬렉션에 저장되어있는 Runspace 객체가 statechanged 이벤트를 가지길 기대하지만, get-member로 체크하면 누락되었습니다. – Lister
@BenRichards 전체를 많이 추가했습니다. 이것은 변수 & 쉘에 쓰는 것 외에는 실제로 아무것도하지 않는 테스트 함수입니다. 작동이 끝나면 장시간 실행되는 작업을 방해하기 위해 GUI 뒤에 넣을 계획입니다. 완료하는 데 최대 2 분이 소요될 수있는 동시에 여러 번 실행됩니다. – Lister