【问题标题】:How to use PowerShell to delete a single NAPTR record?如何使用 PowerShell 删除单个 NAPTR 记录?
【发布时间】: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


【解决方案1】:

如果你说你想删除其中一个,不管是哪一个,你也尝试过这个:

Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR | 
Where-Object {
    $PSItem.HostName -eq "foo" -and 
    $PSItem.RecordData.Data -eq "0200020001550374776F0374776F00" 
} |
Select-Object -First 1 |
Remove-DnsServerResourceRecord -WhatIf

【讨论】:

  • 遗憾的是,这会删除两条 NAPTR 记录。听起来像是 powershell 模块或更深层次的错误。
  • 即使提示表明它即将删除所有内容。 > Get-DnsServerResourceRecord -ZoneName "example.com" -Name "foo" -RRType NAPTR | Where-Object { $PSItem.HostName -eq "foo" -and $PSItem.RecordData.Data -eq "0200020001550374776F0374776F00" } | Select-Object -First 1 | Remove-DnsServerResourceRecord -Name "foo" -ZoneName "example.com" 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
猜你喜欢
  • 2013-06-29
  • 2015-10-18
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2010-12-17
相关资源
最近更新 更多