批量导入到AD PowerShell

我试图使用PowerShell导入员工列表到AD。 该脚本需要更新现有的AD对象。

我遇到的问题是,有些用户将手机号码的一些内部数字和一些只是一个扩展,当我以最基本的forms运行Set-ADuser命令时,它似乎失败,只要一个值是空的。

我不是很擅长编写脚本,任何人都可以向我解释为什么下面的脚本不起作用? 如果有的话,任何人都可以build议如何使它工作? 干杯

Import-module ActiveDirectory $CSVPath = "c:\scripts\ictdepartment2.csv" $csvData = Import-CSV $CSVPath -delimiter "," -Header ("SamaccountName","identity","Title","Company","Department","Description","Office","OfficePhone","IPPhone","MobilePhone") ## foreach ($line in $csvData) { $accountTable = @{ 'SamaccountName'= $line.SamaccountName 'identity'= $line.identity 'title'= $line.title 'company'= $line.company 'department'= $line.department 'description'= $line.description 'office'= $line.office 'officephone'= $line.officephone 'IPPhone'= $line.ipPhone 'mobilephone'= $line.mobilephone } } ## ForEach($line in $csvData) { $SamaccountName = $line.SamaccountName $identity = $line.identity $title = $line.title $company = $line.company $department = $line.department $description = $line.description $office = $line.office $officephone = $line.officephone $IPPhone = $line.ipPhone $mobilephone = $line.mobilephone } ## ForEach($line in $csvData) { if ($officephone -ne $null) {Set-ADUser -Identity $SamaccountName -OfficePhone $officephone} if ($mobilephone -ne $null) {Set-ADUser -Identity $SamaccountName -MobilePhone $mobilephone} if ($ipphone -ne $null) {Set-ADUser -Identity $SamaccountName -replace @{ipPhone=$ipphone}} Set-ADUser -Identity $SamaccountName -Company $Company -Department $Department -Description $Description -Office $office -Title $title } 

如果我使用下面的命令它的作品,但是,只要我添加if $ null语句在它再次失败:(

 ForEach($line in $csvData) { Get-ADUser -Filter "SamAccountName -eq '$($line.samaccountname)'" | Set-ADUser -Replace @{ipphone=$ipphone} } ForEach($line in $csvData) { Get-ADUser -Filter "SamAccountName -eq '$($line.samaccountname)'" | Set-ADUser -Company $Company -Department $Department -Description $Description -MobilePhone $mobilephone -Office $office -OfficePhone $officephone -Title $title } 

$null和一个空string(“”)是Powerhell的两种不同的数据types。 用""replace任何$null实例,你应该是好的。 几乎所有MS提供的cmdlet都设置为[ValidateNotNull]

我想扩大$Null是什么。 Powershell是一个OOP(面向对象的编程)shell,可直接挂接到.Net。 $Null是一个占位符,它自己的权利是一个对象,不表示什么。 不要担心在这个时候完全理解$Null ,很多人(甚至一些程序员)不了解$Null到N的程度。

那么为什么现在这个相关呢? 让我把你链接到这个参考,但我会复制相关信息在这里…

…你不能使用$ null来表示“没有参数值”。 $ null的参数值将覆盖默认的参数值。

在你的情况下,你试图将一个variables的内容等同于$Null对象,它永远不会匹配,因为只有$Null是-eq到$Null

一个空string(“”)是一个没有值的String对象。 这就是为什么你想用比较运算符(-eq,-lt,-ge)来评估其他string的原因。