我一直在尝试循环浏览.json配置文件列表,以提取'name'、'entity_id'、'contact_info'和'sp_endpoint'。我一直在尝试获取以下代码块,并将其转储到一个csv中,该csv在一列中列出了每个值,并且每一行都属于该值所属的文件。
{
"sfg_ping::qa::standard_sp_connections": [
{
"name": "test",
"entity_id": "test",
"contact_info": "test@test.com",
"sp_endpoint": "test",
"sso_initialization_and_signature_policy": {
"sign_assertion_or_response": "response",
"sp_trust_model": "anchored",
"signing_certificate_id": "test",
"sp_initiated": {
"require_signed_authn_requests": true,
"primary_verification_certificate": "test"
}
}
我一直在使用这个脚本来尝试并实现这一点,但它会转储空值,并且不会处理大量文件列表。
Get-ChildItem -Path "C:Usersuserappdevpowershell-scriptsspConnections" |
ForEach-Object {
{(Select-String -Pattern 'name' )}
{(Select-String -Pattern 'entity_id' )}
{(Select-String -Pattern 'contact_info' )}
{(Select-String -Pattern 'sp_endpoint' )}
}| Export-Csv "C:Usersuserappdevpowershell-scriptsexport.csv"
预期输出是这样的:
| filename | name | entityid |
|:---------|:----:| --------:|
| test | test | test |
真的迷失在这里,只是在寻找方向。
似乎可以通过遵循此逻辑从Json文件中获得所需信息,但它假设Json文件只有一个父属性,如sfg_ping::qa::standard_sp_connections
,但只要只有一个属性名称,这就可以用于任何属性名称。
Get-ChildItem pathtothejsonfolder -Filter *.json -PipelineVariable file | ForEach-Object {
(Get-Content $_ -Raw | ConvertFrom-Json).PSObject.Properties.Value | Select-Object @(
@{ N = 'FileName'; E = { $file.Name }}, 'Name', 'entity_id', 'contact_info', 'sp_endpoint'
)
} | Export-Csv pathtomyexport.csv -NoTypeInformation
我使用两个不同的Json文件得到的结果:
FileName name entity_id contact_info sp_endpoint
-------- ---- --------- ------------ -----------
test.json test test test@test.com test
test2.json test2 test2 test2@test.com test2
如果他们都有相同的父属性名称,那么:
(Get-Content $_ -Raw | ConvertFrom-Json).PSObject.Properties.Value
可替换为:
(Get-Content $_ -Raw | ConvertFrom-Json).'sfg_ping::qa::standard_sp_connections'