晚上好。 Stack Overflow 和 Powershell 新手在这里。
Powershell 中的以下代码返回的值比我想要的要多。例如,它捕获 JSON 文件中与 PPVCOUNT 匹配的变量,以及以 PPVCount 字符串前后的字符命名的变量。示例:
PPVCountAtInception
操作员计数大于 PPVCountIndicator
目标:我的目标是让代码仅返回变量 PPVCount。我还想保留以下列:Pattern、LineNumber、Line。请原谅我的知识匮乏,并提前感谢您
$file = 'C:\\Users\\B187515\\Downloads\\j.json'
$PPVCount="PPVCount"
Get-Content $file | Select-String -Pattern $PPVCount -Context 1| Select-Object Pattern,LineNumber, Line -ExpandProperty Context -First 18 | Format-Table | Out-file -FilePath 'C:\\Users\\B187515\\Downloads\\test.csv' -Append
预期结果:
我的目标是让代码仅返回 CSV 文件中的变量“PPVCount”。 我还想保留这些列:Pattern、LineNumber、Line
实际结果 有多个变量返回变量名称中某处包含“PPVCount”。请参阅 CSV 的屏幕截图 在此输入图片描述
以有用的评论为基础:
$file = 'C:\Users\B187515\\Downloads\j.json'
# Enclose the property name in embedded "..."
$searchRegex ='"PPVCount"'
Select-String -LiteralPath $file -Pattern $searchRegex -Context 1 |
Select-Object Pattern, LineNumber, Line -ExpandProperty Context -First 18 |
Export-Csv -LiteralPath 'C:\Users\B187515\Downloads\test.csv'
您的意图是查找字符串
PPVCount
作为单独的单词;由于您似乎正在寻找此字符串作为 JSON 属性名称,因此您可以假设它包含在嵌入的 "..."
中,因此可以使其成为搜索字符串的一部分。
Export-Csv
来创建它。
至于您使用的内容:
Format-Table
和Out-File
都为人类观察者创建数据表示,这就是为什么您永远不应该使用它们来打印数据以进行编程处理 - 请参阅这个答案更多信息。
字符编码警告:在 Windows PowerShell(直至 v5.1 的版本)中,
Export-Csv
莫名其妙地默认为 ASCII(!) 编码;而在 PowerShell (Core) 7 中,它是值得称赞的无 BOM UTF-8。根据需要使用 -Encoding
参数,但请注意,-Encoding utf8
始终会在 Windows PowerShell 中创建带有BOM 的 UTF-8 文件。
\\
代替
\
。
\
是不是 转义字符。在 PowerShell 中,
`
是 - 请参阅about_Special_Characters 帮助主题。
Select-String
参数将要搜索的文件路径直接通过 传递给
-LiteralPath
。这比通过 Get-Content
将文件的行逐一传输到文件要高效得多,如果您想在默认显示输出中看到匹配行旁边的行号,则这是必需的。