2017-06-06 57 views
1

首先,我对Power Shell(以及一般脚本)非常陌生。我试图编写一个简单的脚本,让所有的用户都拥有某个经理,然后将他们设置为一名新的经理,从而让自己的脚步变得湿润。目前,我们在我们的AD中手动执行此操作,并且可能非常耗时。非常新的Power Shell,对象参考错误简短脚本

然而,下面的脚本我不断收到以下错误:

的Set-ADUser便有:对象引用不设置到对象的实例。 在行:6字符:2 + SET-ADUser便有-Identity $用户-manager jane.manager

这里是我的短脚本:

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

ForEach ($user in $users) { 

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

应该说不是'$ user',而不是'$ users'? – t0mm13b

+1

根据@ t0mm13b ...你循环遍历'$ users'中的每一个,调用当前正在处理'$ user'的项目,所以你想要确保'Set-ADUser' cmdlet只在运行依次在每个(单个)'$ user'上。 –

+3

另外,如果你是新来的这个游戏(例如以编程方式修改Active Directory),请使用'Set-ADUser'上的'-WhatIf'和/或'-Confirm'开关,直到你确信没有什么疯狂的事情发生。你不想把每个人的**经理都设为简?她很快会要求加薪。 –

回答

2

有两个问题与您当前的脚本。

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

Set-ADUser将无法​​识别这样的对象。既然你要的directReports对象的引用,它扩展为与ExpandProperty参数值的列表:

​​

第二个问题似乎是一个错字,内环路您参考$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

+0

啊。谢谢你,杰森先生。只是输入与你的答案相同的答案。我担心,当您向“Set-ADUser”输入错误数据时(请参阅原帖的评论),AD仍然会发生什么情况。 ;-) –

+0

@CharlieJoynt哦,绝对! –

+0

非常感谢!我绝对接近,因为我没有得到任何错误。但是,我没有看到我之前设置为“John”的用户的经理开关。将继续拔掉! –