【发布时间】:2021-04-07 22:13:40
【问题描述】:
我使用 GUI 创建了一个新的 NAPTR 记录。但是我想使用 PowerShell 删除其中一个。
我可以证明有 2 条记录:
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType naptr
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
foo NAPTR 35 0 01:00:00
foo NAPTR 35 0 01:00:00
> $OldObj = Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType naptr
> $OldObj[0].RecordData.Data
010001000155036F6E65036F6E6500
> $OldObj[1].RecordData.Data
0200020001550374776F0374776F00
> $OldObj[2].RecordData.Data
>
如果我尝试删除记录,我可以交互方式:
> Remove-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR
Confirm
Removing DNS resource record set by name foo of type NAPTR from zone example.com on TOMDEV server. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
很遗憾,这两条记录都被删除了!
如果我尝试移除对象会怎样?
> $OldObj[1] | Remove-DnsServerResourceRecord -ZoneName "example.com" -Name "foo"
Confirm
Removing DNS resource record set by name foo of type NAPTR from zone example.com on TOMDEV server. Do you want to
continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType naptr
Get-DnsServerResourceRecord: Failed to get foo record in example.com zone on TOMDEV server.
哦不!这删除了两条记录!
我可以为Remove-DnsServerResourceRecord指定一条记录吗?
这是我尝试过的:
这会被直接拒绝:
> Remove-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR -RecordData "0200020001550374776F0374776F00"
Remove-DnsServerResourceRecord: InputObject for resource record has an invalid value. Failed to remove the resource record on TOMDEV server. Please check extended error for additional details.
如果我尝试捕获一条记录并将其通过管道传输到Remove-,则会删除两条记录:
# First, we single out exactly one record:
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR | Where-Object {$_.HostName -eq "foo" -and $_.RecordData.Data -eq "0200020001550374776F0374776F00" }
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
foo NAPTR 35 0 01:00:00
>
# That worked! Let's use that query and pipe it to Remove!
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR | Where-Object {$_.HostName -eq "foo" -and $_.RecordData.Data -eq "0200020001550374776F0374776F00" } | Remove-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -Force
# Nope, that removed both records!
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType naptr
Get-DnsServerResourceRecord: Failed to get foo record in example.com zone on TOMDEV server.
>
它并没有删除“foo”处的所有内容,只是删除了那里的 NAPTR 记录。 (事实上,消息说的是“记录集”(复数),而不是“记录”。
让我们通过在标签“foo”处创建一条 A 记录和 2 条 NAPTR 记录来证明这一点。我们会看到同样的问题:
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo"
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
foo A 1 0 01:00:00 4.4.4.4
foo NAPTR 35 0 01:00:00
foo NAPTR 35 0 01:00:00
> $OldObj = Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType naptr
> $OldObj[0].RecordData.Data
010001000155036F6E65036F6E6500
> $OldObj[1].RecordData.Data
0200020001550374776F0374776F00
> $OldObj[2].RecordData.Data
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR | Where-Object {$_.HostName -eq "foo" -and $_.RecordData.Data -eq "0200020001550374776F0374776F00" } | Remove-DnsServerResourceRecord -ZoneName "example.com" -Name "foo"
Confirm
Removing DNS resource record set by name foo of type NAPTR from zone example.com on TOMDEV server. Do you want to
continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
> Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo"
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
foo A 1 0 01:00:00 4.4.4.4
>
如何删除单个 NAPTR 记录?
【问题讨论】:
-
你能显示
$OldObj[0].RecordData | get-member的输出吗?我的想法是-RecordData将使用.RecorData类型的ToString()覆盖输出。
标签: powershell dns windows-server