为什么 PS AD 模块 return 中 Get-ADGroup 命令上的 ProtectedFromAccidentalDeletion 属性 在一台机器上出现 NullReferenceException?

Why does the ProtectedFromAccidentalDeletion property on the Get-ADGroup command in the PS AD module return a NullReferenceException on one machine?

我有一个使用 Active Directory PowerShell 模块(RSAT 的一部分)的 PowerShell 脚本。在 PowerShell 7 的 Windows 10 机器上 运行 正常,但在 PowerShell 6 的 Windows Server 2019 VM 上 return 出现错误。 RSAT 的 AD 工具安装在两台机器上,当我 运行 Get-Module -Name ActiveDirectory:

时,ActiveDirectory v 1.0.1.0 在两台机器上显示正确安装

该脚本遍历所有 AD 组,并使用以下命令将它们放入一个数组中:

$ADGroupsList = @(Get-ADGroup -Filter * -Properties * | Select-Object DistinguishedName,CN,GroupCategory,Description | Sort-Object CN)

这是 returnServer 2019 VM 上的以下错误:

Get-ADGroup : Object reference not set to an instance of an object.
At line:1 char:19
+ Get-ADGroup -Identity ACC_Admin -Properties *
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (ACC_Admin:ADGroup) [Get-ADGroup], NullReferenceException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.NullReferenceException,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

当我将它分解成它的组成部分时,我发现我只用 Get-ADGroup -Properties * 就得到了同样的错误,即使我 select 我知道存在并具有属性的特定 AD 组,例如“ACC_Admin”:

如果我select只有一个属性,像CN,它工作正常:

当我遍历每个默认值 属性 以找到罪魁祸首时,我发现 ProtectedFromAccidentalDeletion 是导致错误的 属性。

这也令人困惑,因为当我从我的个人工作站检查它时,对于我正在检查的示例组,这个 属性 的值是“False”,而不仅仅是空白或空值:

为什么 ProtectedFromAccidentalDeletion return 如果 NRE 不是 return 我的个人工作站上的错误,它安装了相同版本的 Active Directory 模块 ( 1.0.1.0)?我该如何解决?

这是 PowerShell 6 中的错误。解决方案是升级到 PowerShell 7,其中 was fixed

参考 GitHub 问题首次报告并标记为已修复:

SteveL-MSFT commented on Aug 23, 2019:

This is fixed in PS7 Preview3

(另见 https://github.com/PowerShell/PowerShellModuleCoverage/issues/8