【问题标题】:CSV Import Powershell - ADCSV 导入 Powershell - AD
【发布时间】:2015-08-11 14:12:58
【问题描述】:

您好,我正在运行以下代码来更新 AD 中的用户信息

import-module activedirectory

$Users=Import-CSV C:\UserFeed.csv 

foreach($_ in $Users)
{

if ($_."FAX" -ne $null){
$fax = $_."FAX"
}
else {
$fax = $null
}

if ($_."MOBILETELEPHONE" -ne $null){
$mobile = $_."MOBILETELEPHONE"
}
else {
$mobile = $null
}

if ($_."COUNTRY" -ne $null){
$country = $_."COUNTRY"
}
else {
$country = $null
}

 $Mgr = Get-ADUser -Filter "SamAccountName -like '$($_."REPORTSTOEMAIL")'" |              
Select -ExpandProperty DistinguishedName

Get-ADUser -filter "EmailAddress -like '$($_.EMAILPRIMARY)'" | 
Set-ADUser -Replace @{physicalDeliveryOfficeName=($_."ACTUALOFFICE");Title=             
($_."PERSONALJOBTITLE");department=($_."DeptName");company=  
($_."COMPANYNAME");facsimileTelephoneNumber="$fax";StreetAddress=  
($_."STREET");l=($_."TOWNCITY");postalCode=($_."POSTZIPCODE");Co=$country;C=
($_."COUNTRY2");CountryCode=($_."COUNTRY3");givenName=($_."KNOWNAS");sn=
($_."LASTNAME");telephoneNumber=($_."WORKTELEPHONE");mobile="$mobile
";manager="$Mgr"}
}

问题出在 CSV 中,用户说没有传真号码,并且该字段为空白,而不是在传真中放置任何内容,而是放置空格字符。如何让它不为该字段设置任何内容。

示例请看图片http://s22.postimg.org/nsf66ngc1/mobile.jpg

这是 CSV 的样子

TITLE、KNOWNAS、姓氏、姓名首字母、部门、部门代码、公司编号、WORKTELEPHO‌​NE、移动电话、WORKPHONESHORTCODE、EMAILPRIMARY、传真、街道、城镇、邮政编码‌​E、国家、公司名称、报告邮件、实际办公室、部门名称、办公室、国家2 ,COUNTR‌​Y3 Mr,Peter,Smith,P,Executive,IT,PL,+44 (0) 1234 567 890,,,user1@testdomain.co.uk,+44 (0) 1234 567 890,Road,London, QWER,United Kingdom,COMPANY,j.smith,OfficeName,Computers,City,GB,826

提前致谢

【问题讨论】:

  • 我尝试了代码修改,但是当 AD 中的字段应该为空时,我仍然会在 AD 中得到奇怪的字符。问题似乎在于 $fax = $null。对于 null 为什么要放置那个奇怪的字符 -
  • 我强烈建议不要使用foreach($_ in $Users) 语法。 $_ 是保留变量。如果你想使用它,我建议使用 to ForEach-Object cmdlet ($Users | ForEach-Object {[...]}) 而不是 foreach 语句。

标签: powershell csv import


【解决方案1】:

在这种情况下测试字符串的更好方法是 [string]::IsNullOrWhiteSpace()

试试这个:

if ([string]::IsNullOrWhiteSpace($_."FAX"){
    $fax = $null
} else {
    $fax = $_."FAX" 
}

【讨论】:

  • 我尝试了代码修改,但当 AD 中的字段应该为空时,我仍然在 AD 中得到奇怪的字符。问题似乎在于 $fax = $null。对于 null 为什么要放那个奇怪的字符
  • 好的,试试 $Fax =""。
  • 我用 "" 试过了,但它赋予了那个有趣的角色。
  • 您是否检查过“FAX”字段实际上是一个字符串?而不是像数组这样愚蠢的东西。
【解决方案2】:
if ($_."FAX" -ne $null -and $_."FAX" -ne " "){
$fax = $_."FAX"
}
else {
$fax = $null
}

【讨论】:

  • 嗨,保罗。我根据您的建议更新了移动、传真和国家/地区的代码,但仍然无法正常工作。请参阅 AD s22.postimg.org/nsf66ngc1/mobile.jpg 中出现的屏幕截图的链接如您所见,移动字段具有那个有趣的字符,如果您将其复制并粘贴到记事本中,则该字符是空格
  • 这是 CSV 的样子 TITLE、KNOWNAS、LASTNAME、首字母、DIVISION、DEPARTMENTCODE、COMPANYREFNO、WORKTELEPHONE、MOBILETELEPHONE、WORKPHONESHORTCODE、EMAILPRIMARY、FAX、Street、TOWNCITY、POSTZIPCODE、COUNTRY、COMPANYNAME、REPORTSTOEMAIL、 ACTUALOFFICE,DeptName,Office,COUNTRY2,COUNTRY3 Mr,Peter,Smith,P,Executive,IT,PL,+44 (0) 1234 567 890,,,user1@testdomain.co.uk,+44 (0) 1234 567 890 ,Road,London,QWER,United Kingdom,COMPANY,j.smith,OfficeName,Computers,City,GB,826
  • @user3770745 请将其添加到您的问题中。没有人可以在 cmets 中读取它
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多