使用Windows PowerShell从数据库导入用户
虽然在70-640考试中并不涉及使用Windows PowerShell导入数据库的方法,不过学习这样的做法可为以后自动创建用户的工作产生巨大的帮助。正如您看到的,只需要几行额外的代码和强大的Windows PowerShell Cmdlet,即可实现目的。
假设从人力资源部门得到了一个包含新雇佣员工信息的Excel表格,Excel可以直接将文件保存为逗号分隔文本文件(.csv),这样的文件即可使用Windows PowerShell导入。.csv文件的***行必须列出所有字段名称,这些内容对应着每个用户的信息。例如下面的例子,可以将下列.csv文件保存为Newusers.csv:Newusers.csv
cn,sAMAccountName,FirstName,LastName
John Woods,john.woods,Johnathan,Woods
Kim Akers,kim.akers,Kimberly,Akers
请注意字段名并不需要与LDAP属性名保持一致,随后可以使用脚本将字段名与属性名进行映射。
Windows PowerShell只需要使用下列一行命令即可从数据源导入:$dataSource=import-csv "newusers.csv"
在导入数据源后,还必须对数据源中的每条记录进行循环。此时可以通过foreach块实现,例如可使用下列格式的代码:foreach($dataRecord in $datasource)
{
# do whatever you want to do
}
foreach cmdlet可对数据源中的每条记录或对象进行循环,并将当前对象分配给$dataRecord变量,因此$dataRecord变量可以代表当前记录。随后即可看到每条记录中的实际字段,分别称为$dataRecord变量的属性。例如,***位用户的姓氏如下:$dataRecord.FirstName
我们可以将其分配给变量:$givenName= $dataRecord.FirstName
再次提醒,变量或字段的名称并不需要与LDAP属性名称匹配。在将包含值的变量写入属性本身时,可以进行映射:$objUser.Put("givenName",$givenName)
LDAP属性"givenName"被包含在引号中。只有在代表对象的实际属性时才需要使用正确的名称。然而如果数据源中的字段名称和属性名称与实际的属性名一致,代码的编写工作那就更简单了。
将上述代码综合在一起,即可创建用户导入脚本:Userimport.ps1
$objOU=[ADSI]"LDAP://OU=People,DC=contoso,DC=com"
$dataSource=import-csv "NewUsers.csv"
foreach($dataRecord in $datasource) {
#map variables to data source
$cn=$dataRecord.cn
$sAMAccountName=$dataRecord.sAMAccountName
$givenName=$dataRecord.FirstName
$sn=$dataRecord.LastName
$displayName=$sn + ", " + $givenName
$userPrincipalName=$givenName + "." + $sn + "@contoso.com"
#create the user object
$objUser=$objOU.Create("user","CN="+$cn)
$objUser.Put("sAMAccountName",$sAMAccountName)
$objUser.Put("userPrincipalName",$userPrincipalName)
$objUser.Put("displayName",$displayName)
$objUser.Put("givenName",$givenName)
$objUser.Put("sn",$sn)
$objUser.SetInfo()
$objUser.SetPassword("C0mp!exP@ssw0rd")
$objUser.psbase.InvokeSet("AccountDisabled",$false)
$objUser.SetInfo()
脚本的***行用于连接到容器,也就是所有用户将要创建到的OU。随后两行则用于连接到数据源,并对每条记录进行循环,将每条记录分配给变量$dataRecord。其中foreach块将完成两件事:首先,将数据源中的字段映射给变量,随后则创建用户。
这里要注意,某些变量的建立需要将两个字段联系(附加)到一起。例如$displayName变量就需要使用"LastName, FirstName"的格式,而$userPrincipalName变量需要使用"FirstName.LastName@contoso.com"的格式。
要创建用户,则需要调用OU的Create方法。用户的属性会自动填写并提交,随后设置密码并启用帐户。收工!
【责任编辑:云霞 TEL:(010)68476606】
点赞 0