它是一个单独的命令行,即导入一个 CSV 文件并使用其中的信息创建数十甚至数百个新的 Active Directory 用户:
Import-CSV 'C:\provision1.csv' | ForEach-Object {New-QADUser -organizationalUnit 'company.pri/Singers' -name ($_.'First Name' + '.' + $_.'Last Name') -samAccountName $_.'Logon name' -city $_.city -title $_.'Job title' -department $_.department}
它确实是个很长的命令,但功能却强大得令人惊讶。首先是 Import-CSV(本机外壳 cmdlet),它只需读取一个 CSV 文件并返回对象。CSV 文件中的每一行都是一个单独的对象,并且 CSV 文件的列将成为对象的属性。在 Provision1.csv 文件中,列名类似于 "Logon Name" 和 "First Name"—这一点非常有趣,因为列名不会直接映射到 Active Directory 用户属性。我发现,文件(比如此文件)通常都是使用听起来熟悉的列名,而非特定于 Active Directory 的名称。毕竟,您可能是从公司人事部的某个人那里收到的此文件,他们不太可能知道 Last Name 在 Active Directory 实际是 sn 属性。
一旦将 CSV 文件中的所有数据导入并转换成对象,这些对象即会被通过管道传送到 ForEach-Object cmdlet,它将针对每个对象执行代码块(刚才的单行式命令的花括号中的内容)。即,对 CSV 文件中的每一行均执行一次该脚本。在该脚本中,特殊的 $_ variable 为当前对象(或 CSV 文件的当前行)的引用。
您可以看到,对于每个对象,我都执行了 New-QADUser cmdlet。它是 Quest 加载项中大约十几个 cmdlet 中的一个。名称 QADUser 值得关注一下。您可能已猜到,Q 代表 Quest。该命名约定旨在避免与 Microsoft Active Directory 团队将来可能推出的终极版 New-ADUser cmdlet 发生冲突。这样,如果同时将这两个 cmdlet 加载到外壳中,您和外壳将能够更加轻松地区分它们。
单行式命令的剩余部分包含 New-QADUser cmdlet 的参数。它首先指定 organizationalUnit,即您希望在其中创建所有新用户的位置。接下来是 name 属性,我已将它设置为 First Name 列的内容、句点以及 Last Name 列的内容。
最后一个有趣的事实是:city 参数实际会实际更改 Active Directory 中的 l 属性(或 Locality-Name)。cmdlet 还接受名为 l 的参数,所实现的功能完全相同。大多数情况下,引用 Active Directory 属性的参数可使用 Active Directory 用户和计算机工具的属性名称或文本标签。
一旦将 CSV 文件中的所有数据导入并转换成对象,这些对象即会被通过管道传送到 ForEach-Object cmdlet,它将针对每个对象执行代码块(刚才的单行式命令的花括号中的内容)。即,对 CSV 文件中的每一行均执行一次该脚本。在该脚本中,特殊的 $_ variable 为当前对象(或 CSV 文件的当前行)的引用。
您可以看到,对于每个对象,我都执行了 New-QADUser cmdlet。它是 Quest 加载项中大约十几个 cmdlet 中的一个。名称 QADUser 值得关注一下。您可能已猜到,Q 代表 Quest。该命名约定旨在避免与 Microsoft Active Directory 团队将来可能推出的终极版 New-ADUser cmdlet 发生冲突。这样,如果同时将这两个 cmdlet 加载到外壳中,您和外壳将能够更加轻松地区分它们。
单行式命令的剩余部分包含 New-QADUser cmdlet 的参数。它首先指定 organizationalUnit,即您希望在其中创建所有新用户的位置。接下来是 name 属性,我已将它设置为 First Name 列的内容、句点以及 Last Name 列的内容。
最后一个有趣的事实是:city 参数实际会实际更改 Active Directory 中的 l 属性(或 Locality-Name)。cmdlet 还接受名为 l 的参数,所实现的功能完全相同。大多数情况下,引用 Active Directory 属性的参数可使用 Active Directory 用户和计算机工具的属性名称或文本标签。