我正在尝试修改我在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 {
}
答案 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
}
}