我正在尝试创建一个脚本,该脚本将从Invoke-WebRequest cmdlet输出HTTP标头以及请求的URL。
这是我到目前为止所拥有的:
$url = "http://www.example.com"
$a = Invoke-WebRequest -Uri $url | Select-Object -ExpandProperty Headers
$a
这给了我以下输出:
Key Value
--- -----
Vary Accept-Encoding
X-Cache HIT, HIT from 10.193.64.18
Proxy-Connection Keep-Alive
Content-Length 1270
Cache-Control max-age=604800
Content-Type text/html; charset=UTF-8
Date Tue, 19 Feb 2019 16:02:56 GMT
Expires Tue, 26 Feb 2019 16:02:56 GMT
ETag "1541025663+ident"
Last-Modified Fri, 09 Aug 2013 23:54:35 GMT
Server ECS (dca/246E)
Via SWG
现在,我的目标是最终遍历带有URL的文本文件并输出到CSV进行进一步分析。
要获得有用的数据,我需要将请求的URL作为每个标题键/值的附加列。
我花了几个小时在网上搜索并尝试不同的示例,但收效甚微。
已编辑 根据一些其他搜索找出答案:
$workingdirectory = $PSScriptRoot + '\'
$urlpath = $workdirectory + 'URLs.txt'
$savepath = $workingdirectory + 'output.csv'
$results = @()
foreach($url in Get-Content -Path $urlpath){
$ht = Invoke-WebRequest -Uri $url | Select-Object -ExpandProperty Headers
$keys = $ht.keys
foreach ($key in $keys) {
$results += New-Object psobject -Property @{'Name'=$key;'Value'=$ht[$key];'URL'=$url}
}
}
$results | Export-Csv -Path $savepath -NoTypeInformation
哪位会给您类似的信息(当以表格形式显示时):
URL Name Value
--- ---- -----
http://www.example.com/ Vary Accept-Encoding
http://www.example.com/ X-Cache HIT, HIT from 10.193.64.18
...
http://www.microsoft.com/ Pragma no-cache
http://www.microsoft.com/ X-UA-Compatible IE=Edge;chrome=1
...
答案 0 :(得分:0)
您已经具有此基础:
$URLs = get-content -path "URLs.txt"
$Output = @()
$Output = foreach ($URL in $URLs) {
$a = Invoke-WebRequest -Uri $url | Select-Object -ExpandProperty Headers
$objA = [pscustomobject]$a
$objA | Add-Member -Type noteproperty -name "URL" -value $URL
$objA
}
$Output | export-csv -path "CSVFile.csv" -notypeinformation
答案 1 :(得分:0)
这里有一些可以帮助您入门的东西。研究代码,在VSCode或ISE中进行调试,并搜索帮助Get-Help
中的新概念。有很多方法可以优化此代码,但是出于学习目的,扩展每个步骤有时会有所帮助。
$uri = @(
"http://microsoft.com"
"http://google.com"
"http://yahoo.com"
"http://twitter.com"
)
$out = @()
foreach ($u in $uri)
{
$h = Invoke-WebRequest -Uri $u | Select -ExpandProperty Headers
# create hash table/dictionary
$o = [ordered]@{}
# add Uri
$o.Add('Uri', $u)
# add each Key/Value from $h
foreach ($k in $h.Keys)
{
$o.Add($k, $h[$k])
}
# Create psobject from the dictionary
$p = New-Object psobject -Property $o
# inefficient to store in $p, but you can see $p in debugger
$out += $p
}
# create csv
$c = $out | ConvertTo-Csv -NoTypeInformation
# save to csv file?
$c | Out-File -FilePath e:\test.csv
# view csv
notepad.exe E:\test.csv