Вы можете настроить текущий запрос, чтобы получить первые 100 названий компаний.Это пропускает пустую компанию на фронте.Попробуйте использовать [PSCustomObject] @{ URLName = $url }
, который заменит устаревшую New-Object PSObject
.
$urlArray = @()
$i = 0
foreach ($tablerow in $tablerows) {
$url = $tablerow.InnerHTML.Split('"')[1]
if ($url) {
# Only add an object when the url exists
$urlArray += [PSCustomObject] @{ URLName = $url }
$i++
if ($i -eq 100) {break}
}
}
Для параллельного выполнения запросов используйте Start-RSJob
с блоком сценария.Invoke-Webrequest
затем выполняется параллельно.Обратите внимание, что в этом примере $_
относится к текущему элементу массива, который передается по конвейеру и состоит из объекта со свойством URLName
, но вам нужно быть немного осторожнее с тем, какие переменные вы используете в блоке сценариев, потому что они могут не восстанавливатьсяони ожидают, что они будут такими.
# Run the webrequests in parallel
# $_ refers to a PSCustomObject with the @{ URLName = $url } property
$requests = ($urlArray | start-rsjob -ScriptBlock { Invoke-WebRequest -Uri $_.URLName })
Затем можно дождаться завершения всех заданий и выполнить некоторую постобработку результатов.Здесь пишется только длина содержимого сайта, потому что сами страницы являются длинными.
# Get the results
# $_.Content.Length gets the length of the content to not spam the output with garbage
$result = Get-RSjob | Receive-RSJob | ForEach { $_.Content.Length }
Write-Host $result