新的 ADUser 脚本。无法验证论点

问题描述 投票:0回答:2

我希望有人能帮助我。我有一个 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

powershell active-directory
2个回答
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
}

还有一点,我质疑使用生日作为密码是否明智。


0
投票

新玩家在这里....在上面的脚本中,“New-ADUser @ADUserParams”语句有问题吗?

我已经复制了上面的内容,但是当我运行它时,我收到以下错误

New-ADUser:无法验证参数“名称”的参数。参数为 null 或为空。提供一个不为 null 或空的参数,然后重试该命令。 在 E:\shared data\ict ss\AD_Import_from_CSV.ps1:34 char:20

  •     New-ADUser @NewADUserParams -Passthru
    
  •                ~~~~~~~~~~~~~~~~
    
    • CategoryInfo:无效数据:(:) [New-ADUser],ParameterBindingValidationException
    • FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.NewADUser
© www.soinside.com 2019 - 2024. All rights reserved.