Powershell Power Shell非常新,短脚本中的对象引用错误

Powershell Power Shell非常新,短脚本中的对象引用错误,powershell,active-directory,Powershell,Active Directory,首先,我对powershell(以及一般的脚本编写)非常陌生。我试图编写一个简单的脚本,让所有用户都使用某个管理器,然后将他们设置为一个新的管理器,这让我大吃一惊。目前,我们在广告中手动执行此操作,这可能会很耗时 但是,使用下面的脚本,我不断遇到以下错误: Set ADUser:对象引用未设置为对象的实例。 第6行字符数:2 +设置ADUser-Identity$users-Manager jane.Manager 以下是我的短文: $users=Get-ADUser -Identity joh

首先,我对powershell(以及一般的脚本编写)非常陌生。我试图编写一个简单的脚本,让所有用户都使用某个管理器,然后将他们设置为一个新的管理器,这让我大吃一惊。目前,我们在广告中手动执行此操作,这可能会很耗时

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

Set ADUser:对象引用未设置为对象的实例。 第6行字符数:2 +设置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
}

当前脚本有两个问题

$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
}
Set-ADUser -Identity $user -Manager jane.manager -WhatIf

如果您不确定自己在做什么,请注意并将
-WhatIf
开关参数与
设置调节器一起使用:

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

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

如果您省略了
Set ADUser
将告诉您它将要做什么,而不是进行任何更改,
Set ADUser
将告诉您它将要做什么,如果您省略了
-根据@t0mm13b,它不应该是
$user
而应该是
$users
。。。您正在遍历每个
$users
,调用您正在处理的当前项目
$user
,因此您希望确保
Set-ADUser
cmdlet仅依次对每个(单个)
$user
进行操作。此外,如果您是此游戏的新手(即以编程方式修改Active Directory)看在上帝的份上,使用
-WhatIf
和/或
-Confirm
开关打开
设置调节器
,直到您确定不会发生任何疯狂的事情。你不会想让每个人的经理都是简吧?她很快就会要求加薪了。谢谢你抓住了单数/复数的问题!还有哈!!我在一个测试环境中,但是很高兴知道有一个-WhatIf命令!谢谢啊。谢谢你,杰森先生。我只是打了和你一样的答案。我担心当你把坏数据输入到Set ADUser(见原文评论)时,广告会发生什么情况@哦,当然!非常感谢你!我肯定更接近了,因为我没有得到任何错误。然而,我并没有看到管理员打开我之前设置为“John”的用户。它将继续删除!