PowerShell Invoke-WebRequest проблема со ссылками - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать скрипт, который будет анализировать URL-адрес для указанной ссылки c exe и загружать ее. Я делаю это, потому что ссылка для скачивания часто меняется. Ниже кода:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$path = "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep14"
$definitionPath = (Invoke-WebRequest $path).Links |
Where-Object{$_.InnerText -like "*core15sdsv5i64.exe" -and $_.InnerText -notlike "*.jdb"} | 
Select-Object -ExpandProperty href
$Output = "C:\temp\virus_definition.exe" 
$start_time = Get-Date
Invoke-WebRequest -Uri $definitionPath -OutFile $Output

Я получаю одну ошибку, сообщающую, что аргумент "$ definitionPath" является пустым или пустым. Любые идеи, как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 10 марта 2020

Вы должны выбрать свойство, которое вы хотите явно, которое вы делаете, но оно не может быть пустым, поэтому вы должны ловить эту возможность.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$path = "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep14"
($definitionPath = (Invoke-WebRequest $path).Links)

<#
# Results

innerHTML  :  Cookie Policy.
innerText  :  Cookie Policy.
outerHTML  : <a class="banner-policy-link" aria-label=" Cookie Policy." href="https://www.broadcom.com/company/legal/cookie-policy"> Cookie Policy.</a>
outerText  :  Cookie Policy.
tagName    : A
class      : banner-policy-link
aria-label :  Cookie Policy.
href       : https://www.broadcom.com/company/legal/cookie-policy

innerHTML  : More Information
innerText  : More Information
outerHTML  : <a aria-label="More Information" onclick="Optanon.TriggerGoogleAnalyticsEvent('OneTrust Cookie Consent', 'Preferences Cookie Policy');" 
             href="https://cookiepedia.co.uk/giving-consent-to-cookies" target="_blank">More Information</a>
outerText  : More Information
tagName    : A
aria-label : More Information
onclick    : Optanon.TriggerGoogleAnalyticsEvent('OneTrust Cookie Consent', 'Preferences Cookie Policy');
href       : https://cookiepedia.co.uk/giving-consent-to-cookies
target     : _blank

innerHTML : <div title="powered by OneTrust" id="optanon-popup-bottom-logo" style='background: 
            url("https://cdn.cookielaw.org/skins/5.9.0/default_flat_bottom_two_button_black/v2/images/cookie-collective-top-bottom.png"); width: 155px; 
            height: 35px;' alt="OneTrust Website"></div>
innerText : 
outerHTML : <a href="https://onetrust.com/poweredbyonetrust" target="_blank" rel="noopener"><div title="powered by OneTrust" id="optanon-popup-bottom-logo" 
            style='background: url("https://cdn.cookielaw.org/skins/5.9.0/default_flat_bottom_two_button_black/v2/images/cookie-collective-top-bottom.png"); 
            width: 155px; height: 35px;' alt="OneTrust Website"></div></a>
outerText : 
tagName   : A
href      : https://onetrust.com/poweredbyonetrust
target    : _blank
rel       : noopener
#>


Try
{
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    $path = "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep14"
    ($definitionPath = (Invoke-WebRequest $path).Links) | 
    Where-Object{$_.InnerText -like "*core15sdsv5i64.exe" -and $_.InnerText -notlike "*.jdb"} | 
    Select-Object -ExpandProperty href
}
Catch {Write-Warning -Message 'The target resource is not found or is blank'}
Finally {Write-Warning -Message 'Some other issue occurred'}

<#
# Results

Some other issue occurred
#>

Лично я бы рефакторинг к этому для более прямой ссылки

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$path = "https://www.broadcom.com/support/security-center/definitions/download/detail?gid=sep14"

($definitionPath = (Invoke-WebRequest $path).Links).href
<#
https://www.broadcom.com/company/legal/cookie-policy
https://cookiepedia.co.uk/giving-consent-to-cookies
https://onetrust.com/poweredbyonetrust
#>

($definitionPath = (Invoke-WebRequest $path).Links).href | 
Select-String -Pattern 'cookie'
<#
https://www.broadcom.com/company/legal/cookie-policy
https://cookiepedia.co.uk/giving-consent-to-cookies
#>
...