我希望有人可以帮助我。我有一个csv文件,我试图用来制作新的AD用户帐户。 csv看起来像这样。
" ID"" DEPT"" FN"" LN"" BDATE"&# 34; GRD"
" 111111"" 1480""试验"" HS"" 19980601"" 2018& #34;
" 222222"" 1479""试验"" ELEM"" 19980522"" 2025& #34;
运行以下代码时,我收到有关'路径'的错误为null或为空。提供非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 \ testUser.ps1:49 char:12 +新ADUser @ADUsers} + ~~~~~~~~ + CategoryInfo:InvalidData:(:) [New-ADUser],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.NewADUser
答案 0 :(得分:1)
首先,正如@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
}
另外一点,我质疑使用生日作为密码的智慧。
答案 1 :(得分:-1)
您使用" $ User.BDATE"," $ User.ID"和其他人一样。出于两个原因,这是错误的。 $用户此时不包含任何内容。你的probabyl意味着在这样的循环中这样做:
foreach ($User in $ADUsers) {
# do something
$User.ID
}
这是错误的另一个原因:你在变量周围有双引号。删除它们。否则,PowerShell会进行变量扩展以创建字符串,但您做错了。你应该做" $($ User.ID)"但通过做" $ User.ID"只会扩展$ User对象和文字" .ID"将结束。
还有更多错误。这不会像你期望的那样工作:
"$User.FN+ ' ' + $user.LN"
可能还有更多东西。我不会试图找到你在剧本中遇到的每一个错误。
我建议你阅读如何使用PowerShell中的字符串。