如何将PowerShell处理JSON的输出转为字符串并拼接至文本控件?
问题描述
我是Stack Overflow、PowerShell和ObjectGraph的新手,希望增强现有程序:把一段PowerShell代码的输出转为字符串,再将这个字符串拼接到$Item1_txt.Text的赋值语句里。
我的需求:
- 基于给定的JSON和PowerShell代码,把这段PowerShell代码的输出保存为字符串(命名为
$apple)。我觉得需要在管道里用| Out-String和.Trim(),但目前没法正确实现。
给定的JSON代码
{ "id": "4fd338f7-746b-420b-9d7e-b41709e9a641", "RD": { "PDR": [] }, "TimeStamp": "2025-02-14T16:55:20.1433467Z", "NNTl": { "CD": [ { "EntityType": "Occurrence", "Characteristics": [ "OFGE" ], "Cardinality": "Many" }, { "EntityType": "Operator", "Characteristics": [ "ADL", "EsRO"], "Cardinality": "Many" } ], "RRXC": true }, "EntitiesData": { "Entities": [ { "Id": "b0000000-0000-0000-0000-00000000000b", "EntityType": "IHUR", "Ordinal": 0, "Characteristics": { "PBIL": { "StringValue": "DDDD" } } }, { "Id": "833e2a7f-c173-4062-9cd6-2196432e0001", "EntityType": "Operator", "Ordinal": 0, "Characteristics": { "FN": { "StringValue": "Da" }, "RatedOI": { "BoolValue": true }, "fdfdf": { "DDFDF": "SDFDS43R5" } }, "EntityCreationDateTime": "2025-02-12T19:42:59.2852792Z" }, { "Id": "6fe06340-072f-49b2-8d5a-449e3db80002", "EntityType": "Operator", "Characteristics": { "Deleted": { "StringValue": "0" }, "RatedOI": { "BoolValue": false } } } ] }, "OR": "FFFFF01" }
现有PowerShell代码
Set-Location C:\Users\A187515\Downloads\ $file = Get-ChildItem -Path C:\Users\A187515\Downloads\ -Filter *.json | Sort-Object LastAccessTime -Descending | Select-Object -First 1 (Get-Content -Raw $file | ConvertFrom-Json) | ForEach-Object { foreach ($entity in $_.EntitiesData.Entities) { if ($entity.EntityType -eq 'Operator' -and $entity.Characteristics -issnot [array] -and $entity.Characteristics.RatedOI) { $entity | Select-Object ` id, @{ Name = 'RatedOI'; Expression = { $_.characteristics.RatedOI.boolValue } } } } }
解决方案
要把代码输出转为字符串并赋值给$apple,只需在原有代码块末尾添加| Out-String | ForEach-Object { $_.Trim() },再将结果赋值给$apple即可。修改后的完整代码如下:
Set-Location C:\Users\A187515\Downloads\ $file = Get-ChildItem -Path C:\Users\A187515\Downloads\ -Filter *.json | Sort-Object LastAccessTime -Descending | Select-Object -First 1 $apple = (Get-Content -Raw $file | ConvertFrom-Json) | ForEach-Object { foreach ($entity in $_.EntitiesData.Entities) { if ($entity.EntityType -eq 'Operator' -and $entity.Characteristics -issnot [array] -and $entity.Characteristics.RatedOI) { $entity | Select-Object ` id, @{ Name = 'RatedOI'; Expression = { $_.characteristics.RatedOI.boolValue } } } } } | Out-String | ForEach-Object { $_.Trim() }
关键说明:
| Out-String:把管道中的对象转换成和控制台输出格式一致的字符串| ForEach-Object { $_.Trim() }:去除字符串首尾的空白字符,避免多余的换行或空格
之后你可以直接用$apple拼接$Item1_txt.Text,示例:
$Item1_txt.Text = "查询结果:$apple"
内容的提问来源于stack exchange,提问作者BigSmooth82
相关产品推荐
相关产品推荐

