Power Shell的新功能,短脚本中的对象引用错误

时间:2017-06-06 20:55:20

标签: powershell active-directory

首先,我对Power Shell(以及一般的脚本)非常陌生。我试着编写一个简单的脚本,让所有用户都使用某个管理员,然后将它们设置为新的管理员,从而​​让我的脚湿透。目前,我们在AD中手动执行此操作,这可能非常耗时。

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

Set-ADUser:未将对象引用设置为对象的实例。 在行:6 char: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
}

1 个答案:

答案 0 :(得分:2)

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

$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将告诉您要做什么,而不是进行任何更改