Изо всех сил пытается экспортировать информацию о работе PowerShell, чтобы преуспеть - PullRequest
1 голос
/ 01 июля 2019

У меня есть сценарий PowerShell, который выполняет веб-запрос как часть задания. С блоком сценария, который выполняется заданием, я регистрирую URI конечной точки и время ответа. и затем после того, как все задания завершены, но прежде чем удалить задания, я пытаюсь экспортировать результат в Excel.

PS Verion:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      17763  503     

Код:

$Code = {
    Param(
        [array]$Domain,
        [array]$Services,
        [array]$TestData,
        [string]$Path
    )

    $Log = @()

    ## Get Random School ##
    $Random = Get-Random -InputObject $TestData -Count 1

    ## Get Random Service ##
    $RandService = Get-Random -InputObject $Services

    ## Get Random Endpoint ## 
    $ServiceEndpoints = Get-Content "$Path\Service.Endpoints.json" | Out-String | ConvertFrom-Json
    $GatewayEndpoints = $ServiceEndpoints.Services.$RandService.Gateway
    $RandomEndpoint = Get-Random -InputObject $GatewayEndpoints

    $Headers = @{
        "Authorization" = "Bearer" + ' ' + $Random.Token
    }

    $Uri = 'https://' + $Domain + $RandomEndpoint

    Try {
        $TimeTaken = Measure-Command -Expression {
            $JsonResponse = Invoke-WebRequest -Uri $Uri -Headers $Headers -ContentType 'application/json' -Method Get -UseBasicParsing
        }
    }
    Catch {
    }

    $ResponseTime = [Math]::Round($TimeTaken.TotalMilliseconds, 1) 

    $LogItem = New-Object PSObject
    $LogItem | Add-Member -type NoteProperty -Name 'Endpoint' -Value $Uri
    $LogItem | Add-Member -type NoteProperty -Name 'Time' -Value $ResponseTime
    $Log += $LogItem 

    Write-Host $Log
}

#Remove all jobs
Get-Job | Remove-Job

#Start the jobs. Max 4 jobs running simultaneously.
foreach($Row in $TestData){
    While ($(Get-Job -state running).count -ge $MaxThreads){
        Start-Sleep -Milliseconds 3
    }
    Start-Job -Scriptblock $Code -ArgumentList $Domain, $Services, $TestData, $Path
}

#Wait for all jobs to finish.
While ($(Get-Job -State Running).count -gt 0) {
    start-sleep 1
}

$Log | Export-XLSX -Path .\Test.Results\Performance\Performance.Test.Log.xlsx -ClearSheet

#Get information from each job.
foreach($Job in Get-Job) {
    $Info = Receive-Job -Id ($Job.Id)
}

#Remove all jobs created.
Get-Job | Remove-Job

Кажется, я не могу получить конечную точку URI и время ответа из блока сценария. Когда я пытаюсь экспортировать $Log, все, что происходит, это создает пустой файл Excel.

Write-Host $ Log

@{Endpoint=https://domain/customer/v1/years/2019/marks; Time=1233.3}
@{Endpoint=https://domain/customer/v1/years/2019/marks; Time=2131.7}

Ответы [ 3 ]

1 голос
/ 01 июля 2019

Глобальные переменные внутри заданий не видны в основном скрипте, так как задание выполняется в новом сеансе с собственным глобальным пространством.

1 голос
/ 01 июля 2019

Вы должны вернуть $Log в своем блоке скрипта, поскольку $Log находится в другой области видимости.Вы можете вернуть $Log в своем $Code блоке сценария и, наконец, получить его через Receive-Job.

Измените свой код на:

$Code = {
    ...
    $Log += $LogItem 

    Write-Host $Log
    $Log # return via pipeline to the caller
}

Как подсказывает вам ответ Нираджа Гаджараможно использовать командлет Export-Csv для создания файла Excel:

#Get information from each job.
foreach($Job in Get-Job) {
    Receive-Job -Id ($Job.Id) | Export-CSV -Path .\Test.Results\Performance\Performance.Test.Log.xlsx -Append -NoTypeInformation
}
0 голосов
/ 01 июля 2019

Вы можете использовать Export-Csv, чтобы открыть файл в Excel.

пример кода с несколькими заданиями в формате CSV:

$jobs = @() # INITILIZING ARRAY
$jobs += Start-Job { appwiz.cpl } # START JOB 1 AND ADDING TO ARRAY
$jobs += Start-Job { compmgmt.msc } # START JOB 2 AND ADDING TO ARRAY
$jobs += Start-Job { notepad.exe } # START JOB 3 AND ADDING TO ARRAY

foreach ( $job in $jobs) # INTERATION OF JOBS
{
    Export-Csv -InputObject $job "C:\result.csv" -Append # SAVING TO FILE
}

enter image description here

Примечание. Существуют некоторые внутренние свойства задания, которые не конвертируются CSV, поскольку глубина равна 1, но доступны некоторые основные свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...