通过 Set-ADAccountPassword 获取未设置为对象实例的对象引用

Getting a Object reference not set to an instance of an object via Set-ADAccountPassword

提问人:Norbert Yuhas 提问时间:8/7/2023 更新时间:8/7/2023 访问量:159

问:

尝试通过 Set-ADAccountPassword 重置用户密码时,我收到 NullReference。

我提出以下要求:

Get-ADUser -Filter * -SearchBase "DC=domain,DC=hu" -Properties OfficePhone, Mobile, SID | Where-Object { $_.OfficePhone -eq "888888" -or $_.Mobile -eq "888888" } | Select-Object SID | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "HvUpJP13" -Force) -PAssThru | Unlock-ADAccount

我收到一个错误:

+ ... bject SID | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-Secu ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Microsoft.Activ...ement.ADAccount:ADAccount) [Set-ADAccountPassword], NullReference 
   Exception
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.NullReferenceException,Microsoft.ActiveDirectory.Management.Commands. 
   SetADAccountPassword

同时,如果我删除 Set-ADAccountPassword,则该用户将位于此请求的位置。

Get-ADUser -Filter * -SearchBase "DC=domain,DC=hu" -Properties OfficePhone, Mobile, SID | Where-Object { $_.OfficePhone -eq "888888" -or $_.Mobile -eq "888888" } | Select-Object SID 

SID                                          
---                                          
S-1-5-21-1684329652-2275368447-683485574-8603

为什么请求没有完成?

PowerShell 活动目录

评论

3赞 Santiago Squarzon 8/7/2023
删除,它应该可以工作。这是完全不必要的,并且很可能导致此问题Select-Object SID
0赞 Norbert Yuhas 8/7/2023
非常感谢,它真的按预期工作。如果你有时间 - 你能稍后写下为什么这会导致错误吗?所有手册都包含使用此部件的示例。
2赞 Santiago Squarzon 8/7/2023
如果要扩展该值,那么它将起作用:因为 a 可用于构造实例。但是具有 name 属性的对象不能Select-Object -ExpandProperty SIDSIDADAccountSID
1赞 Norbert Yuhas 8/7/2023
感谢您的澄清和帮助
2赞 Santiago Squarzon 8/7/2023
我可以稍后发布答案,但如果该解释足够,请随时自行回答

答:

2赞 Santiago Squarzon 8/7/2023 #1

Set-ADAccountPassword需要来自管道的 ADAccount,它可以是以下值之一:

  • Microsoft.ActiveDirectory.Management.ADUser
  • Microsoft.ActiveDirectory.Management.ADComputer
  • Microsoft.ActiveDirectory.Management.ADServiceAccount

请参阅输入部分。也可以由以下之一构造:ADAccount

  • 可分辨名称
  • GUID (objectGUID)
  • 安全标识符 (objectSid)
  • SAM 帐户名称 (sAMAccountName)

请参见 -Identity 参数详细信息。

在管道中使用时,对原始 ADUser 实例的引用会丢失,从而导致您看到的错误。只需从管道中删除此语句,问题就会得到解决。除此之外,您还可以删除:Select-Object SID

Where-Object { $_.OfficePhone -eq '888888' -or $_.Mobile -eq '888888' }

并使用使查询更高效:AD Filter

# Note:
#   `telephoneNumber` is the LDAP DisplayName of `officePhone`
#   `mobile` is the LDAP DisplayName` of `MobilePhone`
Get-ADUser -LDAPFilter '(|(telephoneNumber=888888)(mobile=888888))' -SearchBase 'DC=domain,DC=hu' |
    Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText 'HvUpJP13' -Force) -PassThru |
    Unlock-ADAccount