【问题标题】:Very New To Power Shell, Object Reference Error In Short ScriptPower Shell 非常新,短脚本中的对象引用错误
【发布时间】:2017-06-07 05:25:42
【问题描述】:

首先,我对 Power Shell(以及一般脚本)非常陌生。我试图编写一个简单的脚本,让所有用户都拥有一个特定的经理,然后将他们设置为一个新的经理,这让我感到很困惑。目前,我们在 AD 中手动执行此操作,这可能很耗时。

但是,使用下面的脚本,我不断收到以下错误:

Set-ADUser:对象引用未设置为对象的实例。 在行:6 字符:2 + Set-ADUser -Identity $users -Manager jane.manager

这是我的简短脚本:

$users=Get-ADUser -Identity john.manager -Properties directreports | Select directreports

ForEach ($user in $users) {

    Set-ADUser -Identity $users -Manager jane.manager
}

【问题讨论】:

  • 不应该是$user 而不是$users 吗?
  • 根据@t0mm13b...您正在循环遍历每个$users,调用您正在处理的当前项目$user,因此您要确保Set-ADUser cmdlet仅在每个(单个)$user 上依次运行。
  • 另外,如果您是这个游戏的新手(即以编程方式修改 Active Directory),请使用-WhatIf 和/或-Confirm 打开Set-ADUser,直到您确定什么都没有疯狂的事情会发生。您不想将每个人的经理设置为 Jane 吗?她很快就会要求加薪。
  • 感谢您发现单数/复数问题!还有,哈!我在测试环境中,但很高兴知道有一个 -WhatIf 命令!谢谢!

标签: powershell active-directory


【解决方案1】:

您当前的脚本存在两个问题。

$users=Get-ADUser -Identity john.manager -Properties directreports | Select directreports
                                                   #                   ^
                                                   #                   |
                                                   # this creates 1 object with a 
                                                   # "directreports" property

Set-ADUser 将无法识别这样的对象。由于您想要引用 directReports 对象,请将其扩展为带有 ExpandProperty 参数的值列表:

$users=Get-ADUser -Identity john.manager -Properties directreports | Select -ExpandProperty directreports

第二个问题似乎是一个错字,在循环中您引用了您正在循环的$users 集合,而不是当前的$user

$users=Get-ADUser -Identity john.manager -Properties directreports | Select -ExpandProperty directreports

foreach($user in $users){
    Set-ADUser -Identity $user -Manager jane.manager
}

如果您不确定自己在做什么,请注意Charlie Joynt's advice 并将-WhatIf 开关参数与Set-ADUser 一起使用:

Set-ADUser -Identity $user -Manager jane.manager -WhatIf

Set-ADUser 不会进行任何更改,而是会告诉你它要做什么,如果你省略了-WhatIf

【讨论】:

  • 啊。谢谢你,杰森先生。只是输入与您相同的答案。当您向Set-ADUser 提供不良数据时,我仍然担心 AD 会发生什么(请参阅原始帖子的评论)。 ;-)
  • @CharlieJoynt 哦,绝对!
  • 非常感谢!我肯定更接近,因为我没有收到任何错误。但是,我没有看到经理打开我之前设置为“John”的用户。将继续采摘!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2018-07-09
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多