我希望有人能帮助我。我有一个 csv 文件,我试图用它来创建新的 AD 用户帐户。 csv 看起来像这样。
“ID”,“部门”,“FN”,“LN”,“BDATE”,“GRD”
"111111","1480","测试","HS","19980601","2018"
"222222","1479","测试","埃莱姆","19980522","2025"
运行以下代码时,我收到有关“路径”为空或为空的错误。提供一个不为 null 或空的参数。
如有任何帮助,我们将不胜感激。
# Import active directory module for running AD cmdlets
Import-Module activedirectory
#Store the data from ADUsers.csv in the $ADUsers variable
$ADUsers = Import-csv adusers.csv
#Store report in log file in the $log variable
$log = "log.txt"
#Set Additional Variables
$Password = (ConvertTo-SecureString -AsPlainText "$User.BDATE" -Force)
$DisplayName = "$User.FN+ ' ' + $user.LN"
$SCHID = $User.DEPT
# Choose OU
Switch ($SCHID)
{
"1480" {$OU = 'OU=students,OU=users,ou=hs,dc=clasd,dc=net'}
"1479" {$OU = 'OU=students,OU=users,ou=elem,dc=clasd,dc=net'}
"1480" {$Folder = '\\hs-ss\students\hs'}
"1479" {$Folder = '\\hs-ss\students\elem'}
}
#Create Hash Table for New User Creation
$ADUsers = @{
'SamAccountName' = "$User.ID"
'UserPrincipalName' = "$User.ID + '@clasd.net'"
'GivenName' = "$User.FNAME"
'SurName' = "$User.LNAME"
'EmailAddress' = "$User.ID = '@clasd.net'"
'Path' = "$OU"
'Department' = "$User.GRD"
'Company' = "$User.DEPT"
'AccountPassword' = $Password
'ChangePasswordAtLogon' = $true
'Enabled' = $true
'DisplayName' = "$DisplayName"
'Name' = $Displayname
'Homedrive' = "Z"
'Homedirectory' = "$Folder\'$User.ID'"
}
#Call New-ADUser with the parameters Above
Foreach ($User in $ADUsers) {
New-ADUser @ADUsers}
错误代码如下
New-ADUser:无法验证参数“Path”的参数。参数为 null 或为空。提供一个不为 null 或空的参数,然后重试该命令。 在 C:\Users\jmerwin\Desktop estUser.ps1:49 char:12 + 新 ADUser @ADUsers} + ~~~~~~~~~ + CategoryInfo : InvalidData: (:) [New-ADUser],ParameterBindingValidationException + FullQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.NewADUser
首先,正如 @TheMadTechnician 所指出的,您的循环和 CSV 被保存在同一个变量中。更进一步,您将需要循环 CSV 中的每个用户。这使得当您查找属性时可以定义
$user
。
为了清晰起见,我没有像早期定义几个像
$password
这样的变量,而是将它们移动到像参数哈希表那样被调用的位置。
接下来你的
Switch
块我合并了重复的语句。
最后,在参数块中,正如 @Swonkie 所指出的,当您将
$variable.property
放入双引号中时,变量将被扩展 .property
附加而不是仅获取属性的值。要评估双引号内部,您可以使用子表达式 $()
这将评估内部的所有内容,然后构建字符串。但如果属性已经是字符串,那么您可以将 ""
关闭。
$ImportedCSV = Import-csv adusers.csv
$log = "log.txt"
ForEach ($User in $ImportedCSV) {
Switch ($User.DEPT) {
"1480" {
$OU = 'OU=students,OU=users,ou=hs,dc=clasd,dc=net'
$Folder = '\\hs-ss\students\hs'
}
"1479" {
$OU = 'OU=students,OU=users,ou=elem,dc=clasd,dc=net'
$Folder = '\\hs-ss\students\elem'
}
}
$ADUserParams = @{
'SamAccountName' = $User.ID
'UserPrincipalName' = "$($User.ID)@clasd.net"
'GivenName' = $User.FNAME
'SurName' = $User.LNAME
'EmailAddress' = "$($User.ID)@clasd.net"
'Path' = $OU
'Department' = $User.GRD
'Company' = $User.DEPT
'AccountPassword' = (ConvertTo-SecureString -AsPlainText $User.BDATE -Force)
'ChangePasswordAtLogon' = $true
'Enabled' = $true
'DisplayName' = "$($User.FN) $($User.LN)"
'Name' = "$($User.FN) $($User.LN)"
'Homedrive' = "Z"
'Homedirectory' = "$Folder\$($User.ID)"
}
New-ADUser @ADUserParams
}
还有一点,我质疑使用生日作为密码是否明智。
新玩家在这里....在上面的脚本中,“New-ADUser @ADUserParams”语句有问题吗?
我已经复制了上面的内容,但是当我运行它时,我收到以下错误
New-ADUser:无法验证参数“名称”的参数。参数为 null 或为空。提供一个不为 null 或空的参数,然后重试该命令。 在 E:\shared data\ict ss\AD_Import_from_CSV.ps1:34 char:20
New-ADUser @NewADUserParams -Passthru
~~~~~~~~~~~~~~~~