从文本文件列表中编写URL有效性检查脚本

时间:2011-07-13 22:06:28

标签: url powershell

我正在尝试修改我在ElegantCode.Com上找到的PowerShell脚本。我想更改它以指定HTTP链接的大型文本文件,而不是单独将链接命名为参数。

一旦脚本解析了文件,我希望它只管道或回显有效回到新文件的链接。

我陷入第一道障碍,甚至无法弄清楚我如何将输入文件作为参数传递。

脚本的直接链接是here

    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 个答案:

答案 0 :(得分:2)

它似乎是希望url通过管道输入的脚本。变量$_表示当前管道对象。因此,如果每行包含在URL上的文本文件,您可以执行以下操作:

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

我将where放入管道以消除空行。

答案 1 :(得分:0)

根据要求将有效网址传输到文件中(添加到Keith的答案):

$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
   }
}