Создание сценария проверки правильности URL из списка текстовых файлов - PullRequest
1 голос
/ 14 июля 2011

Я пытаюсь изменить сценарий PowerShell, обнаруженный на ElegantCode.Com .Я хочу изменить его, указав большой текстовый файл HTTP-ссылок, а не называть ссылки в качестве параметра по отдельности.

После того, как скрипт проанализирует файл, я хочу, чтобы он передавал или выводил только те ссылки, которые верны в новый файл.

Я падаю на первое препятствие и даже не могу понять, как передать входной файл в качестве параметра.

Прямая ссылка на скрипт здесь

    BEGIN {
    }
    PROCESS {

$url = $_;

$urlIsValid = $false
try
{
    $request = [System.Net.WebRequest]::Create($url)
    $request.Method = 'HEAD'
    $response = $request.GetResponse()
    $httpStatus = $response.StatusCode
    $urlIsValid = ($httpStatus -eq 'OK')
    $tryError = $null
    $response.Close()
}
catch [System.Exception] {
    $httpStatus = $null
    $tryError = $_.Exception
    $urlIsValid = $false;
}

$x = new-object Object | `
        add-member -membertype NoteProperty -name IsValid -Value $urlIsvalid -PassThru | `
        add-member -membertype NoteProperty -name Url -Value $_ -PassThru | `
        add-member -membertype NoteProperty -name HttpStatus -Value $httpStatus -PassThru | `
        add-member -membertype NoteProperty -name Error -Value $tryError -PassThru
$x 
       }
      } 
      END { 
      }

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Появляется сценарий, в котором ожидается передача url. Переменная $_ представляет текущий объект конвейера. Так что, если текстовый файл содержится в URL на строку, вы можете сделать что-то вроде этого:

Get-Content Urls.txt | Where {$_ -notmatch '^\s*$'} | Check-Url

Я положил where в трубу, чтобы убрать пустые строки.

0 голосов
/ 14 июля 2011

Чтобы передать действительные URL-адреса в файл по запросу (добавление к ответу Кейта):

$validUrls = ".\ValidUrls.txt"
if (Test-Path $validUrls) { Remove-Item -Force $validUrls }
$result = New-Item -Type File -Path $validUrls

Get-Content Urls.txt | Where {$_ -notmatch '^\s*$'} | Foreach-Object {
   $url = ($_ | Check-Url)
   if ($url.IsValid)
   {
      $url.Url | Out-File $result -Append
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...