powershell - new-aduser跳过空单元格CSV - 属性 -

时间:2014-09-17 23:47:50

标签: powershell csv active-directory

我真的需要你的帮助。我有一个任务来创建/导入用户从csv到AD。

但我有两个问题

  1. 并非所有用户都填写了所有属性= CSV中有空的“单元格”
  2. 两个自定义属性包含破折号 - 并且PSH返回错误,这是不允许的。
  3. 我尝试搜索,有一些解决方案,但我不知道如何将其实现到我的文件中(| ForEach-Object {$ CSV = $ _ ?????。无法使其正常工作。

    这是我到目前为止所拥有的

    Import-Module ActiveDirectory
    $ErrorActionPreference = 'SilentlyContinue'
    
    $ScriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
    $log = "$ScriptDir\Error-Import.log"
    $log1 = "$ScriptDir\Success-Import.log" 
    $date = Get-Date
    $inputFile = Import-CSV $ScriptDir\allusers.csv 
    
    Function cUser 
    { 
    
    "ERROR LOG from (" + $date + ")      :" | Out-File $log -Append 
    "————————————————-" | Out-File $log -Append
    "Following accounts has been successfully created (" + $date + ")      :" | Out-File $log1 -        Append 
    "————————————————-" | Out-File $log1 -Append  
    foreach($line in $inputFile) 
    { 
    $sam = $line.samaccoutnname
    
    #check if user already exists
    
    $exists = Get-ADUser -LDAPFilter "(sAMAccountName=$sam)" 
    if (!$exists) 
    { 
    # when does not exists - load data from CSV and set as variable
    $gn = $line.givenName
    $sn = $line.sn
    $title = $line.title
    $stAd=$line.streetAddress
    $upn = $line.sAMAccountName + "`@targetrange.local"
    $city=$line.l
    $st=$line.st
    $postc=$line.postalCode
    $ehrd=$line.award-hireDate
    $comp=$line.company
    $dvs=$line.division
    $edvs=$line.award-subdivision
    $dept=$line.department
    $st=$line.street
    $tarA=$line.targetAddress
    $dn=$line.displayName
    $ext2=$line.extensionAttribute2
    $ext4=$line.extensionAttribute4
    $ext5=$line.extensionAttribute5
    $alias = $line.sAMAccountName
    $cn=$line.cn
    $hdir=$line.unixHomeDirectory
    $desc=$line.description
    $pat = $line.OU
    $pwd = $line.pass
    $spass =ConvertTo-SecureString -AsPlainText -Force -String $pwd
    $aexp=$line.accountExpires
    $Expconv=(Get-Date $aexp ).ToFileTime()
    
    New-ADUser -SamAccountName $alias -UserPrincipalName $upn -GivenName $gn -Surname $sn -title $title -StreetAddress $stAd -l $city -State $st -PostalCode $postc -award-hireDate $ehrd -Company $comp -Division $dvs -award-subdivision $edvs -Department $dept -street $st -targetAddress $tarA -extensionAttribute2 $ext2 -extensionAttribute4 $ext4 -extensionAttribute5 $ext5 -DisplayName $dn -Name $cn -unixHomeDirectory $hdir -Description $Desc -path $pat -AccountExpirationDate $Expconv -AccountPassword $spass -PassThru | Enable-ADAccount 
    
    $exists1 = Get-ADUser -LDAPFilter "(sAMAccountName=$sam)" 
    if ($exists1) 
    { 
    
         "User successfully created : " + $sam | Out-File $log1 -Append 
    
    } 
    Else 
        { 
        "SKIPPED – MISSING OR INCORRECT VALUES : " + $sam | Out-File $log -Append 
        } 
    
    
    } 
    # if user already exists - skip and write to logfile 
    Else 
        { 
        "SKIPPED – ALREADY EXISTS OR DUPLICATE ALIAS : " + $sam | Out-File $log -Append 
        } 
    } 
    "————————————————-" + "`n" | Out-File $log -Append 
    } 
    createUsers
      # finito
      } 
    

    如果你可以帮忙,它会挽救我的生命:-)如何跳过空单元格???使用 - 工作 - 撇号来制作属性就足够了吗? '奖励'雇用'?

1 个答案:

答案 0 :(得分:0)

您提到要跳过空单元格。我不知道你想走多远,但我觉得这就是诀窍。你有这条线。

$inputFile = Import-CSV $ScriptDir\allusers.csv 

我建议将其更新如下

$inputFile = Import-CSV $ScriptDir\allusers.csv |  Where-Object{$_.psobject.properties.value -notcontains ""}

这样做会将每个条目分成一个值的数组。如果任何值为空或"",则它们将不会与$inputFile匹配。

Count                         EventID                       EventType                    
-----                         -------                       ---------                    
14                                                          Information                  
2                             7040                          Information                  
2                             0                                                          
1                             8224                          Information   

上述数据已放入过滤器,输出为

Count                         EventID                       EventType                    
-----                         -------                       ---------                    
2                             7040                          Information                  
1                             8224                          Information    

如您所见,过滤掉具有空数据的行,并且仍保留数据结构。

连字符

至于连字符-问题,我假设您收到的错误是Unexpected token '-Type' in expression or statement.,猜测它正在尝试处理-hireData中的$line.award-hireDate。在这种情况下,你要做的是最好的。只需在参数名称周围使用引号即可。如果参数中有空格,您也可以这样做。

$line."award-hireDate"
$line."award hireDate"