Powershell 从多个json文件中提取特定文本

Powershell 从多个json文件中提取特定文本,powershell,cmd,Powershell,Cmd,所以我试图从多个json文件中提取一行,创建一个txt文件,并将这些提取的行添加到这个txt文件中 下面是每个json文件的外观 { "type": "service_account", "project_id": "mm-sxxxxxxxxxxxxxxxxxxxxxxxxxxx", "private_key_id": "01xxxxxxxxxxxxxxxxxxxxxxxxx

所以我试图从多个json文件中提取一行,创建一个txt文件,并将这些提取的行添加到这个txt文件中

下面是每个json文件的外观

{
  "type": "service_account",
  "project_id": "mm-sxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "private_key_id": "01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADAh\nk9P8vIQogdfdIxxxxxxx/9Fq\nwxeBX5Wk+CRXvklQQP37TDM=\n-----END PRIVATE KEY-----\n",
  "client_email": "mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com",
  "client_id": "1xxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com"
}
每个json文件都有这种模式

我感兴趣的是这行
“客户电子邮件”:“mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxx qr.iam.gserviceaccount.com”,

我只需要那一行的电子邮件,即在这种情况下
mm-xxxxxxxxxxxxxxxxxxxxxxxx qr.iam.gserviceaccount.com

我正试图在Powershell中实现这一点

我尝试了下面的解决方案

(Select-String -Path *json -Pattern 'client_email').Line | Set-Content AllSAEmails.txt
这创建了一个具有以下模式的txt文件

  "client_email": "mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com",
  "client_email": "mm-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyas.iam.gserviceaccount.com",
  "client_email": "mm-zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzae.iam.gserviceaccount.com",
  "client_email": "mm-qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquh.iam.gserviceaccount.com"
但我感兴趣的是如下所示,是否可以用这种模式创建一个txt文件

因为我有多个JSON,每个JSON都有这样一封邮件,我希望所有这些邮件都放在一个用逗号分隔的txt文件中

mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com,
mm-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyas.iam.gserviceaccount.com,
mm-zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzae.iam.gserviceaccount.com,
mm-qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquh.iam.gserviceaccount.com
任何帮助都将不胜感激


谢谢

使用
convertfromjson
解析文件,然后剩下的就变得很简单了:

$emails = Get-ChildItem .\*.json |Get-Content -Raw |ConvertFrom-Json |Select -ExpandProperty client_email
如果要将电子邮件输出到文件,并每10行插入一个换行符,可以执行以下操作:

@(
  for($i = 0;$i -lt $email.Length ;$i += 10){
    # output 10 emails and a blank string
    $emails[$i..($i + 9)]
    ""
  }
) |Set-Content .\path\to\file

使用
convertfromjson
解析该文件,其余部分将变得微不足道:

$emails = Get-ChildItem .\*.json |Get-Content -Raw |ConvertFrom-Json |Select -ExpandProperty client_email
如果要将电子邮件输出到文件,并每10行插入一个换行符,可以执行以下操作:

@(
  for($i = 0;$i -lt $email.Length ;$i += 10){
    # output 10 emails and a blank string
    $emails[$i..($i + 9)]
    ""
  }
) |Set-Content .\path\to\file

这太棒了。我测试了这个,效果很好。我还有一个小请求。我可以在每10行之后添加一个空行吗?可以在上面的同一个命令中添加一个空行吗?谢谢@Mathias R。Jessen你的意思是如果你以后将
$emails
输出到一个文件中,你想每10行换行吗?是的,正好是
$emails=Get ChildItem.\*.json | Get Content-Raw | ConvertFrom json | Select-ExpandProperty client_email>>emails.txt
我用它创建了一个非常棒的文件..我测试了这个,效果很好..我还有一个小请求..我能在每10行之后添加一个空行吗..是吗也可以将其添加到上面的同一命令中,谢谢@Mathias R.Jessen您的意思是如果您在之后将
$emails
输出到文件中,你想每10行换行吗?是的,正好是
$emails=Get ChildItem.\*.json | Get Content-Raw | ConvertFrom json | Select-ExpandProperty client_email>>emails.txt
我用它创建了一个文件