在前面文章中介绍过一篇文章,主要讲的是"关于Exchange Server 2010 启用邮箱时MMC控制台崩溃问题处理"方法,其中排错思路中也提到过是由于批量创建帐号过程中部分字段带空格导致的,其实这个是不能够完全避免的,由于毕竟是人工操作出现错误再所难免,完全解决导入数据不带空格其实是有办法的。

方法一:通过Excel的替换将空格去掉。

方法二:利用Excel中的SUBSTITUTE函数法去掉。

方法三:利用Excel中的CLEAN函数去掉。

当然上述都是需要运维人员对Excel中函数或替换比较了解的情况下可以很容易规避,有没有办法能够让不懂Excel的人也可以正常运行脚本而不会因为空格而出现创建帐号异常?那么我就要介绍“方法四”通过在PowerShell脚本中增加相关的字段来在运行时就去掉空格。

脚本如下:

import-Module activedirectory

$csvpath = "d:\New-User\Employee.csv"

(Get-Content -Path $csvpath) -replace "\s{1,}" | Set-Content -Path $csvpath -Encoding UTF8

$pwd = convertto-Securestring "cc@123.com" -AsPlainText -Force

Import-Csv 'd:\New-User\Employee.csv'| foreach {New-ADUser -path $_.path -SamAccountName $_.SamAccountName -Name $_.Name -DisplayName $_.DisplayName -GivenName $_.GivenName -Surname $_.Surname -AccountPassword $pwd  -Manager $_.Manager -UserPrincipalName $_.UserPrincipalName -Enabled $true -ChangePasswordAtLogon $true -PassThru}

Import-Csv  'd:\1\userinfo.csv'| foreach {Add-ADGroupMember -Identity $_.group1 -Members $_.SamAccountName}


注意,在上述脚本中增加了“-replace "\s{1,}"来确保导入的CSV文件空格被去掉”,而如果没有进行脚本修改的情况下,脚本内容如下:


import-Module activedirectory

$csvpath = "d:\New-User\Employee.csv"

(Get-Content -Path $csvpath) | Set-Content -Path $csvpath -Encoding UTF8

$pwd = convertto-Securestring "cc@123.com" -AsPlainText -Force

Import-Csv 'd:\New-User\Employee.csv'| foreach {New-ADUser -path $_.path -SamAccountName $_.SamAccountName -Name $_.Name -DisplayName $_.DisplayName -GivenName $_.GivenName -Surname $_.Surname -AccountPassword $pwd  -Manager $_.Manager -UserPrincipalName $_.UserPrincipalName -Enabled $true -ChangePasswordAtLogon $true -PassThru}

Import-Csv  'd:\1\userinfo.csv'| foreach {Add-ADGroupMember -Identity $_.group1 -Members $_.SamAccountName}


至于为何会在这里专门介绍这个内容,主要还是一点运维过程中,我们既然无法保证所有人都能记得和会去运行Excel来去掉空格,那么为何不在脚本运行过程中就去掉,来提高脚本执行的正确率?


以上脚本还请大家借鉴使用,如有更优秀的去除方法,还请大家分享哦,谢谢大家。