2014-09-17 4 views
0

Мне действительно очень нужна ваша помощь. У меня возникла задача создать/импортировать пользователей из csv в AD.powershell - new-aduser пропустить пустые ячейки CSV - атрибуты с -

Но у меня есть две проблемы

  1. не все пользователи имеют все атрибуты заполнены = есть пустая «ячейка» в CSV
  2. Два пользовательских атрибуты содержат тир - и PSH возвращается сообщение об ошибке, что это не допускается.

Я пытался искать, есть какое-то решение, но я не уверен, как реализовать это в мой файл (|.. ForEach-Object {$ CSV = $ _ ????? Cant сделать его работу

Вот то, что я до сих пор

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 
    } 

Если вы можете помочь, это было бы спасти мою жизнь :-) Как пропустить пустые ячейки ??? А сделать атрибуты с - рабочим - апострофа достаточно? «награда-наем»?

+0

Существует опечатка вокруг строки 20 ish '$ sam = $ line.samaccoutnname', которая может способствовать сбою сценария. – Bluecakes

+0

Таким образом, ячейка _ANY_ будет пустой, и вам придется ее учитывать. Если бы была пустая ячейка в строке, вы проигнорировали бы ее и не сделали бы пользователя на ее основе? – Matt

ответ

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" 
+0

Спасибо тебе большое !!!! Благодаря вам я сейчас понимаю, как это работает. Я разделил скрипт на две отдельные функции, потому что мне нужно, чтобы ВСЕ пользователи были созданы, но только атрибуты NOT EMPTY. И ваше обновление сделало трюк! Я боролся с ним в течение нескольких дней! СПАСИБО СПАСИБО! – Filla

+0

Это приятно услышать. Я рад, что это помогло. Пожалуйста, проявите свою признательность, отметив это как принятый ответ. Надеюсь снова увидеть тебя. – Matt