如果dns解析成功,我需要用“ fqdn”替换“ ip-netmask”。
此脚本将用于替换配置文件中的值。
如果DNS已解析,则需要将“ ip-netmask”的属性名称更改为“ fqdn”,并在其下存储新的dns值。该脚本解析DNS,如果成功,则仅更新ip-netmask,如果成功,还将添加带有DNS值的fqdn属性。
好像我在那儿一样,但是我无法将ip-netmask重命名为fqdn,或者仅删除ip-netmask属性而不将我的fqdn属性设置为空
来自原始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"
}
]
}
$a = Get-Content 'C:\Users\e\Desktop\puttytest1.json' | ConvertFrom-Json
$a.entry | ForEach-Object {
if ($namehost = (Resolve-DnsName $_.'ip-netmask').namehost) {
$_.'ip-netmask' = $namehost
$_ | Add-Member -MemberType AliasProperty -Name fqdn -Value ip-netmask
}
}
$newjson = $a | ConvertTo-Json
$newjson
输出
{
"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"
}
]
}
答案 0 :(得分:1)
您不应尝试重命名现有属性,而应将其删除并将新的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
希望有帮助