PowerShell - тестируйте несколько URL-адресов из файла TXT / CSV и записывайте код HTTP в файл CSV для создания отчетов. - PullRequest
0 голосов
/ 19 июня 2020

Надеюсь, что кто-то может помочь с этим.

Я создал сценарий на основе этой ссылки

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$urlStr = Read-Host "Please enter URL to check"
[uri]$urlStr

# First we create the request.
$HTTPS_Request = [System.Net.WebRequest]::Create("$urlStr")

# We then get a response from the site.
$HTTPS_Response = $HTTPS_Request.GetResponse()

# We then get the HTTP code as an integer.
$HTTPS_Status = [int]$HTTPS_Response.StatusCode
$HTTPS_StatusDesc = [string]$HTTPS_Response.StatusDescription

#Write-Host "HTTP CODE: $HTTPS_Status"

do { 
If ($HTTPS_Status -eq 301) {
    Write-Host "HTTP CODE: $HTTPS_Status"
    Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
    Write-Host "Landing page moved permanently and redirects to another URL."
    Write-Host "Please update Landing page to new URL"
}
ElseIf ($HTTPS_Status -eq 302) {
    Write-Host "HTTP CODE: $HTTPS_Status"
    Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
    Write-Host "If this occurs once, then no issues"
    Write-Host "If this occurs more than once, please update Landing page to new URL"
}
} while ($HTTPS_Status -ge 300 -and $HTTPS_Status -lt 400)

If ($HTTPS_Status -eq 200) {
    Write-Host "HTTP CODE: $HTTPS_Status"
    Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
    Write-Host "Landed on page"
}
ElseIf ($HTTPS_Status -gt 400) {
    Write-Host "HTTP CODE: $HTTPS_Status"
    Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
    Write-Host "Error - issue with Landing page. Please investigate."
}


# Finally, we clean up the http request by closing it.
$HTTPS_Response.Close()
$HTTPS_Response.Dispose()
#Read-Host -Prompt “Press Enter to exit”

В настоящее время вышеперечисленное построено для обработки одного URL в время, которое меня устраивало, так как количество ссылок и использование скрипта в целом было низким, поэтому я оставил его как есть.

Но поскольку использование и URL-адреса для вышеуказанного скрипта увеличиваются, я надеюсь чтобы в дальнейшем код был изменен для одновременного запуска нескольких URL-адресов.

Моя идея состоит в том, чтобы сохранить URL-адреса в файл TXT или CSV и прочитать его построчно и запустить сценарий для каждого линия. Затем он записывает ответ и выводит HTTP-код (например, 200, 404, и т. Д. c ...) в CSV (или исходный CSV-файл) и вводит туда данные.

Если возможно, я хотел бы записать вывод «$ HTTP_Response» и добавить его, но это будет второстепенной задачей.

Любая помощь будет принята с благодарностью.

Спасибо.
Раджив.

1 Ответ

1 голос
/ 19 июня 2020

Первое, что вам нужно сделать, это превратить ваш скрипт в функцию с URL-адресом в качестве параметра!

function Get-HTTPResponseCode
{
  param(
    [Parameter(Mandatory = $true, Position = 0)]
    [uri]$Url,

    [switch]$Quiet
  )

  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  try {
    # First we create the request.
    $HTTPS_Request = [System.Net.WebRequest]::Create("$Url")

    # We then get a response from the site.
    $HTTPS_Response = $HTTPS_Request.GetResponse()

    # We then get the HTTP code as an integer.
    $HTTPS_Status = [int]$HTTPS_Response.StatusCode
    $HTTPS_StatusDesc = [string]$HTTPS_Response.StatusDescription
  }
  finally {
    # Finally, we clean up the http request by closing it.
    $HTTPS_Response.Close()
    $HTTPS_Response.Dispose()
  }

  #Write-Host "HTTP CODE: $HTTPS_Status"

  if(-not $Quiet){
    if ($HTTPS_Status -eq 301) {
      Write-Host "HTTP CODE: $HTTPS_Status"
      Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
      Write-Host "Landing page moved permanently and redirects to another URL."
      Write-Host "Please update Landing page to new URL"
    }
    elseif ($HTTPS_Status -eq 302) {
      Write-Host "HTTP CODE: $HTTPS_Status"
      Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
      Write-Host "If this occurs once, then no issues"
      Write-Host "If this occurs more than once, please update Landing page to new URL"
    }
    elseif ($HTTPS_Status -eq 200) {
      Write-Host "HTTP CODE: $HTTPS_Status"
      Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
      Write-Host "Landed on page"
    }
    elseif ($HTTPS_Status -gt 400) {
      Write-Host "HTTP CODE: $HTTPS_Status"
      Write-Host "HTTP CODE DESCRIPTION: $HTTPS_StatusDesc"
      Write-Host "Error - issue with Landing page. Please investigate."
    }
  }

  # return the response code
  return $HTTPS_Status
}

Теперь, когда у нас есть функция, которую легко использовать повторно, мы можем делать интересные вещи, например использовать ее в вычисляемом свойстве, например:

$URLs = @(
  'https://www.stackoverflow.com'
  'https://www.stackexchange.com'
)

$URLs |Select-Object @{Name='URL';Expression={$_}},@{Name='Status'; Expression={Get-HTTPResponseCode -Url $_}} |Export-Csv .\path\to\result.csv -NoTypeInformation

Если вы хотите сохранить ввод URL-адреса отдельно, просто поместите их в файл, по одному на строку, а затем используйте Get-Content, чтобы прочитать их с диска:

$URLs = Get-Content .\path\to\file\with\urls.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...