执行invoke-webrequest以获取Powershell中多个网站的状态

时间:2018-08-16 04:04:11

标签: powershell url iis web-administration http-status-code-200

我们有几个网站,我不想每次使用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

2 个答案:

答案 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
}

导出并追加到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中的值,从而防止任何数据完整性问题。

答案 1 :(得分:-1)

您应该为此使用foreach,因为您有网站列表。所以您应该尝试这样的事情。

$urls = Get-Content C:\webSiteAddress.txt

foreach($url in $urls)
{
Invoke-webrequest -URI $url |statuscode | export-csv c:\status.csv
}