如何搜索密钥并更改其值?

时间:2016-08-22 12:57:43

标签: powershell powershell-v3.0

sample.txt的:

$post->filter(function($value,$key){
  if(\Gate::allows('view-post',$value)){
    return $val;
  }
});

我想将{"ip":"","port":0,"protocol":"udp","user":false,"test":false} 更改为上述字典中的特定'value'

例如:对于'key':我需要更改'port',对于'23',我需要使用Windows PowerShell更改'protocol'等。

2 个答案:

答案 0 :(得分:1)

您的示例数据似乎是JSON格式,因此您可以通过将JSON字符串转换为对象来修改它,更改属性,然后将对象转换回JSON字符串,如下所示:

$file = 'C:\path\to\sample.txt'

(Get-Content $file -Raw) | ConvertFrom-Json | ForEach-Object {
  $_.port     = 23
  $_.protocol = 'tcp'
  $_                   # echo current object to feed it back into the pipeline
} | ConvertTo-Json -Compress | Set-Content $file

在PowerShell v2或更早版本中,您需要运行(Get-Content $file) | Out-String来模拟v3引入的参数-Raw

答案 1 :(得分:1)

由于您正在使用JSON,因此我们使用JSON!

$json = Get-Content .\sample.txt | ConvertFrom-Json
$json.port = 23
$json.protocol = 'tcp'
$json | ConvertTo-Json -Compress | Out-File .\sample.txt
  • 首先我读取文件并让powershell将它从JSON转换为对象。 (第1行)
  • 我现在可以编辑这个对象了。 (第2-3行)
  • 最后我将其转换回JSON并将其写入文件。 (第4行)

希望这有帮助。