Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 替换/重命名对象属性名称_Powershell_Object_Rename - Fatal编程技术网

Powershell 替换/重命名对象属性名称

Powershell 替换/重命名对象属性名称,powershell,object,rename,Powershell,Object,Rename,如果dns解析成功,我需要将“ip网络掩码”替换为“fqdn” 此脚本将用于替换配置文件中的值 如果解析了DNS,我需要将“ip网络掩码”的属性名称更改为“fqdn”,并将新的DNS值存储在它下面。脚本解析DNS并仅在成功时更新ip网络掩码,如果成功,还将使用DNS值添加fqdn属性 似乎我在那里,但我无法将ip网络掩码重命名为fqdn,或者在不使fqdn属性为空的情况下删除ip网络掩码属性 从原始json输入 @' { "entry":[ {

如果dns解析成功,我需要将“ip网络掩码”替换为“fqdn”

此脚本将用于替换配置文件中的值

如果解析了DNS,我需要将“ip网络掩码”的属性名称更改为“fqdn”,并将新的DNS值存储在它下面。脚本解析DNS并仅在成功时更新ip网络掩码,如果成功,还将使用DNS值添加fqdn属性

似乎我在那里,但我无法将ip网络掩码重命名为fqdn,或者在不使fqdn属性为空的情况下删除ip网络掩码属性

从原始json输入


@'
{
    "entry":[
        {
            "@name":"31.170.162.203",
            "ip-netmask":"31.170.162.203",
            "description":"test1"
        },
        {
            "@name":"37.193.217.222",
            "ip-netmask":"37.193.217.222",
            "description":"test2"
        },
        {
            "@name":"46.17.63.169",
            "ip-netmask":"46.17.63.169",
            "description":"test3"
        }
    ]
}
输出


{

    "entry":  [

                  {

                      "@name":  "31.170.165.68",

                      "ip-netmask":  "31.170.165.68",

                      "description":  "Test1"

                  },

                  {

                      "@name":  "31.170.162.203",

                      "ip-netmask":  "31.170.162.203",

                      "description":  "test2"

                  },

                  {

                      "@name":  "37.193.217.222",

                      "ip-netmask":  "l37-193-217-222.novotelecom.ru",

                      "description":  "test3",

                      "fqdn":  "l37-193-217-222.novotelecom.ru"

                  }

]

}


您不应该尝试重命名现有属性,而是将其删除并将新的NoteProperty添加到对象中,如下所示:

$newjson = $a.entry | ForEach-Object {
    if ($namehost = (Resolve-DnsName $_.'ip-netmask').namehost) {
        # remove the 'ip-netmask' property
        $_.PSObject.Properties.Remove('ip-netmask')
        # add a new NoteProperty 'fqdn'
        $_ | Add-Member -MemberType NoteProperty -Name 'fqdn' -Value $namehost
    }
} | ConvertTo-Json
但是,我认为您使用了错误的方法从IP地址检索fqdn。。这不应该是:

$newjson = $a.entry | ForEach-Object {
    if ($namehost = [System.Net.Dns]::GetHostByAddress($($_.'ip-netmask')).HostName) {
        # remove the 'ip-netmask' property
        $_.PSObject.Properties.Remove('ip-netmask')
        # add a new NoteProperty 'fqdn'
        $_ | Add-Member -MemberType NoteProperty -Name 'fqdn' -Value $namehost
    }
} | ConvertTo-Json
希望有帮助


根据您的评论,属性的显示顺序对您很重要

要维持秩序,请使用

$newjson = $a.entry | ForEach-Object {
    if ($namehost = (Resolve-DnsName $_.'ip-netmask').namehost) {
        # output a new object with properties ordered like you want them to be
        $_ | Select-Object '@name', @{Name = 'fqdn'; Expression = {$namehost}}, 'description'
    }
    else { 
        # output the object unchanged
        $_ 
    }
} | ConvertTo-Json

您不应该尝试重命名现有属性,而是将其删除并将新的NoteProperty添加到对象中,如下所示:

$newjson = $a.entry | ForEach-Object {
    if ($namehost = (Resolve-DnsName $_.'ip-netmask').namehost) {
        # remove the 'ip-netmask' property
        $_.PSObject.Properties.Remove('ip-netmask')
        # add a new NoteProperty 'fqdn'
        $_ | Add-Member -MemberType NoteProperty -Name 'fqdn' -Value $namehost
    }
} | ConvertTo-Json
但是,我认为您使用了错误的方法从IP地址检索fqdn。。这不应该是:

$newjson = $a.entry | ForEach-Object {
    if ($namehost = [System.Net.Dns]::GetHostByAddress($($_.'ip-netmask')).HostName) {
        # remove the 'ip-netmask' property
        $_.PSObject.Properties.Remove('ip-netmask')
        # add a new NoteProperty 'fqdn'
        $_ | Add-Member -MemberType NoteProperty -Name 'fqdn' -Value $namehost
    }
} | ConvertTo-Json
希望有帮助


根据您的评论,属性的显示顺序对您很重要

要维持秩序,请使用

$newjson = $a.entry | ForEach-Object {
    if ($namehost = (Resolve-DnsName $_.'ip-netmask').namehost) {
        # output a new object with properties ordered like you want them to be
        $_ | Select-Object '@name', @{Name = 'fqdn'; Expression = {$namehost}}, 'description'
    }
    else { 
        # output the object unchanged
        $_ 
    }
} | ConvertTo-Json

第一个几乎正是我想要的。我尝试了计算属性和其他一些东西,但从未遇到noteproperty。最后一件事…您知道如何将fqdn放置在JSON结构中ip网络掩码字段的位置吗?这是一个配置文件,我把它放回去,所以需要维护顺序。此处的输出将fqdn放在descriptionI之后。我尝试过选择对象,并在covert to json管道中按顺序列出属性,但不是这样working@dcvl我用代码编辑了我的答案,以维护财产秩序。非常好。谢谢我无法让计算出的属性自己工作,因为第一个几乎正是我想要的。我尝试了计算属性和其他一些东西,但从未遇到noteproperty。最后一件事…您知道如何将fqdn放置在JSON结构中ip网络掩码字段的位置吗?这是一个配置文件,我把它放回去,所以需要维护顺序。此处的输出将fqdn放在descriptionI之后。我尝试过选择对象,并在covert to json管道中按顺序列出属性,但不是这样working@dcvl我用代码编辑了我的答案,以维护财产秩序。非常好。谢谢我无法让计算出的属性自己工作