$path = "\\path\to\folder"
$ts = (Get-Date -format yyyyMMdd_HHmmss)
Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/combined" -UseBasicParsing -OutFile ($path + $ts + ".json")
$json = Get-Content -Raw ($path + $ts + ".json")
$x = $json | ConvertFrom-Json
$x | Select filters | Export-Csv -NoTypeInformation -Path ($path + $ts + ".csv")
上面给出了一个输出:
filters
System.Object[]
将脚本的最后一行更改为:
$x | Select-Object -ExpandProperty filters | Export-Csv -NoTypeInformation -Path ($path + $ts + ".csv")
给我一些下面的内容,即每个项目的长度计数:
Length
6
6
6
6
7
...
我不想要长度,我想要实际值,正如你从.json linke中看到的那样,它调用来自它的web请求应该是一个文件类型列表;导入FSRM以打击勒索软件。
我在Select-Object页面中没有看到关于选择你可以返回的内容的内容,所以我缺少什么?
答案 0 :(得分:1)
尝试像这样修改
$path = "c:\temp\"
$ts = (Get-Date -format yyyyMMdd_HHmmss)
Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/combined" -UseBasicParsing -OutFile ($path + $ts + ".json")
$json = Get-Content -Raw ($path + $ts + ".json")
$x = $json | ConvertFrom-Json
$x |%{ $_.filters} | select @{ N="Value";E={$_.ToString()}} | Export-Csv -Delimiter ";" -NoTypeInformation -Path ($path + $ts + ".csv")
答案 1 :(得分:1)
Invoke-RestMethod
包括转换来自JSON的响应,其中Invoke-WebRequest
没有,因此这是一个有用的cmdlet。
.filters
是一个字符串列表。您可以将它们放在一个文件中,每行一个,使用:
$filters = (Invoke-RestMethod -Uri https://fsrm.experiant.ca/api/v1/combined).filters
$filters | Set-Content "d:\path\$(get-date -Format u).csv"
如果确实需要列标题行:
$Path = "d:\path\$(get-date -Format u).csv"
$filters = (Invoke-RestMethod -Uri https://fsrm.experiant.ca/api/v1/combined).filters
'Filter' | Set-Content $Path
$filters | Add-Content $Path
如果它确实需要通过CSV,它将引用每一行并有一个标题行,那么:
$path = "d:\temp"
$ts = (Get-Date -format yyyyMMdd_HHmmss)
$json = Invoke-RestMethod -Uri "https://fsrm.experiant.ca/api/v1/combined"
$json.filters | select @{N="Value";E={$_}} | Export-Csv -NoTypeInformation -Path "$path\$ts.csv"
没有必要|%{$_.Filters}
,因为只有一个对象是从JSON转换而过滤器是它的属性,所以访问它一次:
{
filters: [
]
}
并且不需要E={$_.ToString()}
,因为过滤器值已经是字符串。
Import-CSV和Export-CSV的工作方式是:
Select
允许您从通过管道进入的某些对象开始,然后只使用您选择的某些属性将它们发送到管道中。
计算属性允许您动态地将新属性添加到通过管道的对象。
在这种情况下:
$json.filters |
正在发生的是字符串。
$json.filters | select @{Name="Value";Expression={$_}}
正在取一个字符串
"*.vbs"
并将其转换为具有一个属性的PSCustomObject:
@{Value="*.vbs"}
现在映射到CSV行,其中一列(“值”)和列内容*.vbs
。
管道变为
@{Value="*.vbs"}
@{Value="*.exe"}
@{Value="*.js"}
和Export-CSV
将其处理为CSV