gpt4 book ai didi

powershell - 检查 URL 状态的脚本

转载 作者:行者123 更新时间:2023-12-04 21:55:50 29 4
gpt4 key购买 nike

我已经看到了一些与此类似的问题,但还没有找到适合我的情况的问题。

我有一个存储在文本文件中的 URL 列表,我需要运行它以查看它们是否返回 404 错误。我正在使用 powershell 并且一直在使用这里的示例:http://gallery.technet.microsoft.com/scriptcenter/Powershell-Script-for-13a551b3#content

我目前正在测试一个指向汇合页面的链接,在 Chrome 中观看控制台我可以看到返回的第一个状态是 404 - Not Found,然后是 304、200 之后的十几个请求。

我猜测第一个 404 之后的请求会影响我的结果,我需要脚本根据第一个响应返回。

到目前为止,我已经尝试过 powershell、php 和 javascript 解决方案,但都没有成功。

总而言之,有没有办法仅根据第一个响应返回答案?

剧本:

## The URI list to test 
$URLListFile = "H:\xxx\xxx\urlList.txt"
$URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue
$Result = @()


Foreach($Uri in $URLList) {
$time = try{
$request = $null
## Request the URI, and measure how long the response took.
$result1 = Measure-Command { $request = Invoke-WebRequest -Uri $uri }
$result1.TotalMilliseconds
}
catch
{
<# If the request generated an exception (i.e.: 500 server
error or 404 not found), we can pull the status code from the
Exception.Response property #>
$request = $_.Exception.Response
$time = -1
}
$result += [PSCustomObject] @{
Time = Get-Date;
Uri = $uri;
StatusCode = [int] $request.StatusCode;
StatusDescription = $request.StatusDescription;
ResponseLength = $request.RawContentLength;
TimeTaken = $time;
}

}
#Prepare email body in HTML format
if($result -ne $null)
{
$Outputreport = "<HTML><TITLE>Website Availability Report</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Availability Report </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B>StatusCode</B></TD><TD><B>StatusDescription</B></TD><TD><B>ResponseLength</B></TD><TD><B>TimeTaken</B></TD</TR>"
Foreach($Entry in $Result)
{
if($Entry.StatusCode -ne "200")
{
$Outputreport += "<TR bgcolor=red>"
}
else
{
$Outputreport += "<TR>"
}
$Outputreport += "<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TR>"
}
$Outputreport += "</Table></BODY></HTML>"
}

$Outputreport | out-file H:\xxx\xxx\test.htm
Invoke-Expression H:\xxx\xxx\test.htm

最佳答案

如果你想让你的脚本在第一个错误后退出循环,你可以尝试这样的事情:

Foreach($Uri in $URLList) {
$error.Clear()

$time = Measure-Command { $request = Invoke-WebRequest -Uri $uri } 2>$null

if ($error.Count -eq 0) {
$time.TotalMilliseconds
} else {
$error[0].Exception.Response
break
}
}

AFAICS try..catch这里不需要。

关于powershell - 检查 URL 状态的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500832/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com