我有一个固定列数的CSV文件,第一个记录始终是列字段名称,后跟数据。我想为新列计算添加一个新的计算列 - 我想调用Invoke-WebRequest
从现有字段传入数据并将返回的数据存储为附加字段值。
现有log.csv文件的示例:
date,time,User,Page,Client-IP,X-Forwarded-For,Server-IP 2017-12-11,16:54:48,user@domain.com,/owa/test.html,111.111.111.111,222.222.222.222,121.121.121.121 2017-12-11,16:54:48,user@domain.com,/owa/test.html,222.222.222.222,222.222.222.222,111.111.111.121
对于CSV文件中的每条记录,我想采用X-Forwarded-For字段数据并按如下方式调用Invoke-WebRequest
:
Invoke-WebRequest -Uri http://localhost:6779/json/222.222.222.222 |
Select -Expand Content |
ConvertFrom-Json |
Select -ExpandProperty country_name
在上面的cmd中,222.222.222.222是第一条记录的X-Forwarded-For数据。返回的数据将是国家/地区名称。
我会想象代码是......
$GEOIP = Invoke-WebRequest -Uri http://localhost:6779/json/$($OWAHTTPLog).X-Forwarded-For |
Select -Expand Content |
ConvertFrom-Json |
Select -ExpandProperty country_name
$OWAHTTPLog = Import-Csv C:\owalog.csv |
Select *,@{Name='GEOIP-Country';Expression={"$GEOIP"}} |
Export-Csv C:\audit.csv -NoTypeInformation
问题是,我需要从CSV中获取X-Forwarded-For的值,并将其作为Invoke-WebRequest
传递给$IPAddress
?如何在我的例子中做到这一点?
答案 0 :(得分:1)
只需使用您想要在calculated property的表达式中派生新列值的属性:
Import-Csv 'C:\owalog.csv' |
Select *,@{n='GEOIP-Country';e={
$uri = 'http://localhost:6779/json/{0}' -f $_.'X-Forwarded-For';
(Invoke-WebRequest -Uri $uri).Content | ConvertFrom-Json |
Select -ExpandProperty country_name
}} |
Export-Csv 'C:\audit.csv' -NoType
答案 1 :(得分:1)
其他方法:
import-csv 'C:\owalog.csv' | %{
$row=$_
$uri = 'http://localhost:6779/json/{0}' -f $row.'X-Forwarded-For';
$Result=(Invoke-WebRequest -Uri $uri).Content | ConvertFrom-Json | Select -ExpandProperty country_name
$row | Add-Member -Name 'GEOIP-Country' -Value $Result -MemberType NoteProperty
$row
} | Export-Csv 'C:\audit.csv' -NoType