执行 invoke-webrequest 以获取 Powershell 中多个网站的状态
Executing invoke-webrequest to get status of multple websites in Powershell
我们有几个网站,我不想每次都使用 invoke-webrequest -URI google.com
在 powershell 中检查状态。
我起草了这样的东西,但没有用,我想得到帮助:
$URLS = get-content c:\websitesaddress.txt
Invoke-webrequest -URI $urls |statuscode | export-csv c:\status.csv
我想查看几个网页的状态,并以 website name, statuscode
.
格式导出为 CSV 文件
您应该为此使用 foreach,因为您有一个网站列表。所以你应该尝试这样的事情。
$urls = Get-Content C:\webSiteAddress.txt
foreach($url in $urls)
{
Invoke-webrequest -URI $url |statuscode | export-csv c:\status.csv
}
您离答案不远了,您只需要获取 Invoke-WebRequest 调用的状态码 属性,如下所示:
Invoke-webrequest -URI $url | select statuscode
或
$(Invoke-webrequest -URI $url).statuscode
如果将其通过管道传输到 Export-Csv
cmdlet,您将只能获得状态代码,而不是 url,而且每个循环都需要附加文件,按照目前的情况,每次都会重新创建文件,只显示文件中最后一个 url 的状态代码。
我在下面展示了两种可能的方法:
简单的文件写入
这种方法并不是最干净的方法,它不使用 Export-Csv
cmdlet
$urls = Get-Content C:\webSiteAddress.txt
# Add the header to the file
Set-Content "C:\status.csv" -Value "URL,Status"
foreach($url in $urls)
{
$status = $(Invoke-webrequest -URI $url).statuscode
# Create the data line
$line = "$url,$status"
# Append the data to the file
Add-Content "C:\status.csv" $line
}
导出并附加到 CSV
使用 Export-Csv
稍微复杂一些,因为 Export-Csv
需要将属性作为其列的对象。在每个循环中,您告诉进程 -Append
到现有的 CSV,这样数据就不会在进程中丢失。
# Remove the file if it exists already
if ([System.IO.File]::Exists("C:\status.csv")) {Remove-Item "C:\status.csv"}
# Get the web addresses
$urls = Get-Content "C:\webSiteAddress.txt"
# Loop over the URLs
foreach($url in $urls) {
# Create a new object containing the url and the statuscode property
# of an Invoke-WebRequest call. Choose the column names here by changing url,status
New-Object PSObject -Property @{
url=$url;
status=$(Invoke-webrequest -URI $url).statuscode
} |
export-csv "C:\status.csv" -Append -NoTypeInformation
}
第二种方法更可取,因为它正确地引用了 CSV 中的值,从而防止了任何数据完整性问题。
我们有几个网站,我不想每次都使用 invoke-webrequest -URI google.com
在 powershell 中检查状态。
我起草了这样的东西,但没有用,我想得到帮助:
$URLS = get-content c:\websitesaddress.txt
Invoke-webrequest -URI $urls |statuscode | export-csv c:\status.csv
我想查看几个网页的状态,并以 website name, statuscode
.
您应该为此使用 foreach,因为您有一个网站列表。所以你应该尝试这样的事情。
$urls = Get-Content C:\webSiteAddress.txt
foreach($url in $urls)
{
Invoke-webrequest -URI $url |statuscode | export-csv c:\status.csv
}
您离答案不远了,您只需要获取 Invoke-WebRequest 调用的状态码 属性,如下所示:
Invoke-webrequest -URI $url | select statuscode
或
$(Invoke-webrequest -URI $url).statuscode
如果将其通过管道传输到 Export-Csv
cmdlet,您将只能获得状态代码,而不是 url,而且每个循环都需要附加文件,按照目前的情况,每次都会重新创建文件,只显示文件中最后一个 url 的状态代码。
我在下面展示了两种可能的方法:
简单的文件写入
这种方法并不是最干净的方法,它不使用 Export-Csv
cmdlet
$urls = Get-Content C:\webSiteAddress.txt
# Add the header to the file
Set-Content "C:\status.csv" -Value "URL,Status"
foreach($url in $urls)
{
$status = $(Invoke-webrequest -URI $url).statuscode
# Create the data line
$line = "$url,$status"
# Append the data to the file
Add-Content "C:\status.csv" $line
}
导出并附加到 CSV
使用 Export-Csv
稍微复杂一些,因为 Export-Csv
需要将属性作为其列的对象。在每个循环中,您告诉进程 -Append
到现有的 CSV,这样数据就不会在进程中丢失。
# Remove the file if it exists already
if ([System.IO.File]::Exists("C:\status.csv")) {Remove-Item "C:\status.csv"}
# Get the web addresses
$urls = Get-Content "C:\webSiteAddress.txt"
# Loop over the URLs
foreach($url in $urls) {
# Create a new object containing the url and the statuscode property
# of an Invoke-WebRequest call. Choose the column names here by changing url,status
New-Object PSObject -Property @{
url=$url;
status=$(Invoke-webrequest -URI $url).statuscode
} |
export-csv "C:\status.csv" -Append -NoTypeInformation
}
第二种方法更可取,因为它正确地引用了 CSV 中的值,从而防止了任何数据完整性问题。