0

我想从一个文件搜索特定关键字到另一个文件,如果一个文件中的关键字不存在,那么它应该显示该关键字。两个 Json 文件都有不同的语法。我想通过 Powershell 实现这一点:

文件 1:Data.json

[
    "The request will be processed at a domain controller for domain xxx.COM.",
    "",
    "Group name     ROL_xxx_xxx.NetAppProdAdmins",
    "Comment        Owner: Ramesh (XXXX\\ramesh)",
    "",
    "Members",
    "",
    "-------------------------------------------------------------------------------",
    "RAJESH1                  RAMESH1                  ASHOK12                  ",
    "ABHIJIT                  RITIKA1                  BHUPESH                  ",
    "YASHWAN                  ",
    "The command completed successfully.",
    ""
]

第二个文件:Data2.json

{
    "Group": {
        "Path": "/xx-life-xxxxx-xxxx/", 
        "CreateDate": "2017-12-08T12:08:39Z", 
        "GroupId": "xxxxxxxxxxxxxxxxxxxxx", 
        "Arn": "arn:aws:iam::123456789012:group/xx-xxxx-xxxxxxx-xxxxxx/xx-xxxx-xxxxxxx-xxxxxx-admin", 
        "GroupName": "xx-xxxx-xxxxxxx-xxxxxx-admin"
    }, 
    "Users": [
        {
            "UserName": "RAJESH1", 
            "PasswordLastUsed": "2020-05-06T07:10:37Z", 
            "CreateDate": "2020-03-27T07:12:44Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RAJESH1"
        }, 
        {
            "UserName": "RAMESH1", 
            "PasswordLastUsed": "2020-06-04T07:01:44Z", 
            "CreateDate": "2019-07-25T08:36:28Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RAMESH1"
        }, 
        {
            "UserName": "ASHOK12", 
            "PasswordLastUsed": "2020-06-03T13:18:49Z", 
            "CreateDate": "2020-04-20T14:43:59Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/ASHOK12"
        }, 
        {
            "UserName": "ABHIJIT", 
            "PasswordLastUsed": "2020-06-05T03:20:48Z", 
            "CreateDate": "2019-05-15T09:55:04Z", 
            "UserId": "AIDA5GALAASEO7TUXCB3T", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/ABHIJIT"
        }, 
        {
            "UserName": "RITIKA1", 
            "PasswordLastUsed": "2020-06-02T14:01:11Z", 
            "CreateDate": "2019-08-01T11:13:30Z", 
            "UserId": "AIDA5GALAASEOADBBKJ7N", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RITIKA1"
        }, 
        {
            "UserName": "BHUPESH", 
            "PasswordLastUsed": "2020-06-01T08:13:14Z", 
            "CreateDate": "2018-07-26T14:11:10Z", 
            "UserId": "AIDAI2A5HABPPLA6PL5AC", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/BHUPESH"
        }
    ]
}

所以我特别想从第一个 json 到第二个 Json 搜索 RAJESH1,如果它在那里,那么如果它不在那里也没关系,那么它将在输出中显示 RAJESH1。在上面的两个 JSON 中,第二个 JSON 中不存在“YASHWAN”,因此输出需要以“YASHWAN”的形式出现。

提前致谢。

4

1 回答 1

1

为了测试,我在 Data2.JSON 文件中添加了一个额外的用户:

{
    "用户名": "PARIDA",
    "PasswordLastUsed": "2020-06-01T08:13:14Z",
    "创建日期": "2018-07-26T14:11:10Z",
    "UserId": "AIDAI2A5HABPPLA6PL5AX",
    "路径": "/xx-xxxx-xxxxxxx-xxxxxx/",
    “arn”:“arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/PARIDA”
}

才能更好地展示结果。

您可以像这样比较两个文件中的成员:

# read the JSON files
$data1 = Get-Content -Path 'Data.json' -Raw | ConvertFrom-Json
$data2 = Get-Content -Path 'Data2.json' -Raw | ConvertFrom-Json

# get the members from $data1
$members1 = (($data1 -join '' -split '-{2,}')[-1] -split 'The command')[0].Trim() -split '\s+'

# get the members from $data1
$members2 = $data2.Users.UserName

# compare both member arrays
Compare-Object -ReferenceObject $members1 -DifferenceObject $members2

输出看起来像

InputObject SideIndicator
----------- -------------
PARIDA      =>           
YASHWAN     <= 

SideIndicator显示在哪个文件中找到了差异,即

  • =>表示在 $data2 中找到了成员名称 PARIDA,但在 $data1 中没有找到
  • <=表示在 $data1 中找到了成员名称 YASHWAN,但在 $data2 中没有找到
于 2020-07-15T12:06:23.323 回答