dcv*_*cvl 3 powershell rename object
如果dns解析成功,我需要替换ip-netmask为。fqdn
该脚本将用于替换配置文件中的值。
\n如果 DNS 已解析,我需要更改ip-netmaskto的属性名称fqdn并在其下存储新的 dns 值。该脚本解析 DNS,并且仅在成功时更新 ip-netmask,如果成功,还会添加带有 DNS 值的 fqdn 属性。
好像 I\xe2\x80\x99m 在那里,但我无法将 ip-netmask 重命名为 fqdn,或者只是删除 ip-netmask 属性而不使我的 fqdn 属性为 null
\n来自原始 json 输入
\n@\'{\n "entry":[\n {\n "@name":"31.170.162.203",\n "ip-netmask":"31.170.162.203",\n "description":"test1"\n },\n {\n "@name":"37.193.217.222",\n "ip-netmask":"37.193.217.222",\n "description":"test2"\n },\n {\n "@name":"46.17.63.169",\n "ip-netmask":"46.17.63.169",\n "description":"test3"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n这是我的脚本
\n$a = Get-Content \'C:\\Users\\e\\Desktop\\puttytest1.json\' | ConvertFrom-Json\n \n$a.entry | ForEach-Object {\n if ($namehost = (Resolve-DnsName $_.\'ip-netmask\').namehost) {\n $_.\'ip-netmask\' = $namehost\n $_ | Add-Member -MemberType AliasProperty -Name fqdn -Value ip-netmask\n }\n }\n\n$newjson = $a | ConvertTo-Json\n$newjson\nRun Code Online (Sandbox Code Playgroud)\n这是输出:
\n{\n "entry": [\n {\n "@name": "31.170.165.68",\n "ip-netmask": "31.170.165.68",\n "description": "Test1"\n },\n {\n "@name": "31.170.162.203",\n "ip-netmask": "31.170.162.203",\n "description": "test2"\n },\n {\n "@name": "37.193.217.222",\n "ip-netmask": "l37-193-217-222.novotelecom.ru",\n "description": "test3",\n "fqdn": "l37-193-217-222.novotelecom.ru"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n
您不应尝试重命名现有属性,而应将其删除并将新的 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
Run Code Online (Sandbox Code Playgroud)
但是,我相信您使用了错误的方法从 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
Run Code Online (Sandbox Code Playgroud)
希望有帮助
要维持该顺序,请使用
$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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14261 次 |
| 最近记录: |