我们有几个网站,我不想每次使用invoke-webrequest -URI google.com
来检查powershell中的状态。
我起草了这样的内容,该方法不起作用,我需要帮助:
$URLS = get-content c:\websitesaddress.txt
Invoke-webrequest -URI $urls |statuscode | export-csv c:\status.csv
我想检查几个网页的状态并将其导出为CSV,格式为website name, statuscode
。
答案 0 :(得分:0)
您离答案不远,您只需要获取Invoke-WebRequest调用的statuscode属性,就像这样:
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
}
使用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中的值,从而防止任何数据完整性问题。
答案 1 :(得分:-1)
您应该为此使用foreach,因为您有网站列表。所以您应该尝试这样的事情。
$urls = Get-Content C:\webSiteAddress.txt
foreach($url in $urls)
{
Invoke-webrequest -URI $url |statuscode | export-csv c:\status.csv
}