2014-09-17 3 views
0

정말 도움이 필요합니다. CSV에서 AD로 사용자를 만들거나 가져 오는 작업이 있습니다.powershell - new-aduser 빈 셀을 건너 뛰기 CSV - attributes with-

하지만이 두 가지 문제

  1. 하지

    모든 사용자가 모든 속성이 비어 "세포"CSV에있다 = 채운
  2. 사용자 지정 특성을
  3. 두 대시를 포함 -과 PSH이인지 오류를 반환 허용되지 않습니다. .

나는 (이 어떤 솔루션을하지만 내 파일에 구현하는 방법을 잘 모르겠습니다, 검색을 시도 |.를 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 
    } 

어떻게 빈 셀을 건너 뛸 :-) 당신이 내 인생을 절약 할 수 있습니다 경우이 무엇입니까 ??? 그리고 아포스트로피로 속성을 만드는 것만으로도 충분합니까? '수상 경력'?

+0

스크립트 실패의 원인이 될 수있는 20 번째 줄 '$ sam = $ line.samaccoutnname'이 있습니다. – Bluecakes

+0

그래서 _ANY_ 셀이 비어있을 수 있으며이를 고려해야합니다. 행에 빈 셀이 있으면 무시하고 사용자를 기반으로하지 않습니까? – Matt

답변

0

빈 셀을 건너 뛰고 싶다고하셨습니다. 나는 당신이 그걸 어떻게 가져 가고 싶었는지 잘 모르겠다.하지만 여기서 내가 속임수라고 생각하는 어떤 것이있다. 너는 그 선을 가지고있다.

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

을 다음과 같이

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

나는 이것이 할 것입니다 것은 그 값의 배열로 각 항목을 휴식이다가 업데이트되는 제안 할 것입니다. 값이 비어 있거나 "" 인 경우 $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.$line.award-hireDate-hireData을 치료하기 위해 노력하고 추측되어지고 오류가 있으리라 믿고있어. 당신이하려는 것은이 경우에 최선입니다. 매개 변수 이름을 따옴표로 묶으십시오. 매개 변수에 공백이 있으면 동일한 작업을 수행합니다.

+0

정말 고마워요 !!!! 당신 덕분에 지금 어떻게 작동하는지 이해합니다. 스크립트를 두 개의 분리 된 함수로 나누었습니다. 왜냐하면 모든 사용자를 생성해야하지만 EMPTY 속성 만 설정해야하기 때문입니다. 그리고 당신의 업데이트는 트릭을했습니다! 나는 며칠 동안 그것과 싸우고 있었다! 감사합니다. – Filla

+0

듣기 좋습니다. 도움이 된 것을 기쁘게 생각합니다. 이 답변을 수락 된 답변으로 표시하여 감사의 마음을 표시하십시오. 다시 당신을 볼 수 있기를 바랍니다. – Matt

관련 문제