2016-08-08 5 views
0

Я пытаюсь проверить асинхронный режим работы в PowerShell 3.Возврат результата из скриптового блока из Get-Job?

Так что я решил, я бы запросить uptimes некоторых серверов удаленно, и написал следующий скрипт:

function getServerUptimes() { 
    # Obtain credentials for logging into 
    # the remote machines... 
    $cred = Get-Credential 

    $compsHash = @{ 
     "server1.domain.com" = $null; 
     "server2.domain.com" = $null; 
    } 

    # Define an async block to run...no blocking in this script... 
    $cmd = { 
     param($computer, $dasCred) 

     Write-Host "which: $($computer)" 
     $session = new-cimsession $computer -Credential $dasCred 

     return (get-CimInstance win32_operatingsystem -CimSession $session | Select PScomputername, LastBootuptime); 
    } 

    ForEach($comp in $compsHash.Keys) { 
     Write-Host "${comp}" 

     # Kick off an async process to create a cimSession 
     # on each of these machines... 
     Start-Job -ScriptBlock $cmd -ArgumentList $comp, $cred -Name "Get$($comp)" 
    } 

    $results = Get-Job | Wait-Job | Receive-Job 

    # Retrieve the job, so we can look at the output 
    ForEach($comp in $compHash.Keys) { 
     $dasJob = Get-Job -Name "Get$($comp)" 
     Write-Host $dasJob.output 
    } 

} 

Однако, я не» t действительно, кажется, возвращает какой-либо вывод в результате объекта $dasJob, я вернул значение в моем скриптблоке, где он собирается?

ответ

0

У вас уже есть выход (без учета Write-Host выход, конечно) в переменной $results. В PowerShell вы получаете выход задания через Receive-Job. Свойство Output кажется всегда пустым (не знаете почему).