我真的需要你的帮助。我有一个任务来创建/导入用户从csv到AD。
但我有两个问题
我尝试搜索,有一些解决方案,但我不知道如何将其实现到我的文件中(| 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 :(得分: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"