我有一个在线学习管理系统,其大部分数据都在sql server中,但其页面结构和内容在AD LDS实例中。我有几个类已经设置了50个页面,称为“Unused Portfolio 01”到“Unused Portfolio 50”。这些是他们的显示名称。他们的CN是“Portfolio 01”到“Portfolio 50”。
我需要更改显示名称,每个名称都有不同的学生姓名,格式为“Last,First”。我正在尝试将Active Directory模块用于Windows Powershell。现在我正在测试服务器上试图让这个工作只有几页。我无法一次更改多个显示名称。
我可以获得这些页面的对象列表:
Get-ADObject -Server localhost:389 -filter 'displayname -like "*Portfolio*" -and cn -like "Portfolio*"' -searchbase 'CN=DMIN2013-LMS 101-02,CN=LMS 101,CN=LMS,CN=Academics,CN=Portal,O=Jenzabar,C=US'
我得到所有三个预期对象的distinguishedname,name,objectclass和objectguid,没有意外的对象。大。
我可以一次更改任何一个对象的显示名称:
set-adobject -Server localhost:389 -identity "CN=Portfolio 01,CN=DMIN2013-LMS 101-02,CN=LMS 101,CN=LMS,CN=Academics,CN=Portal,O=Jenzabar,C=US" -displayname "testing"
指定的对象的displayname更改为“testing”。真棒。
我正在尝试使用它来将这三个对象的所有显示名一次性更改为“测试”,显然我有些错误,因为它不起作用:
Get-ADObject -Server localhost:389 -filter 'displayname -like "*Portfolio*" -and cn -like "Portfolio*"' -searchbase 'CN=DMIN2013-LMS 101-02,CN=LMS 101,CN=LMS,CN=Academics,CN=Portal,O=Jenzabar,C=US' | foreach-object 'set-adobject -Server localhost:389 -identity $_ -displayname "testing"'
最终目标是我将有一个csv文件(我将从sql server的sql查询中获得)包含一个“number”列01到50,一个“lastname”列和一个“firstname”列,我将为每个学生更改每个页面的显示名称以匹配“,”但是我还没到那个时候。
感谢您提供的任何帮助。
答案 0 :(得分:2)
Foreach-Object使用脚本块而不是字符串,因此请使用:
something | Foreach-Object {Do something with $_}
答案 1 :(得分:1)
这可能是因为$_
包含一个对象而不是其DN。 $_.DistinguishedName
。也是ojk所说的
Get-ADObject -Server localhost:389 -filter 'displayname -like "*Portfolio*" -and cn -like "Portfolio*"' -searchbase 'CN=DMIN2013-LMS 101-02,CN=LMS 101,CN=LMS,CN=Academics,CN=Portal,O=Jenzabar,C=US' | foreach-object {set-adobject -Server localhost:389 -identity $_.DistinguishedName -displayname "testing"}