【发布时间】:2014-08-12 19:42:21
【问题描述】:
我有一个脚本,用于从 csv 文件创建批量用户,该脚本运行良好。
Import-Csv e:\temp\newemps.csv | %{
$ou = $_.ou
$firstname = $_.first
$lastName = $_.last
$accountName = $("{0}{1}" -f $firstname.Substring(0,1),$lastName).ToLower()
$description = $_.desc
$password = "Welcome1"
$name = "$firstName $lastName"
New-AdUser -SamAccountName $accountName -GivenName $firstName -UserPrincipalName "$accountName@ba.net" -Surname $lastName -DisplayName $name -Name $name -AccountPassword (ConvertTo-SecureString -AsPlainText $password -Force) -Enabled $true -Path $ou -Description $description -ChangePasswordAtLogon:$False
If ($_.Group -ne ""){
Add-adgroupmember -identity $_.group -members $accountName
}
If ($_.email -eq "y"){
Enable-Mailbox -Identity $accountName -Alias $accountName
Set-Mailbox $accountName -MaxSendSize 10mb -MaxReceiveSize 10mb
Get-CasMailbox $accountName -OwaEnabled:$false -ActiveSyncEnabled:$false
}
}
我正在尝试修改此脚本,以便创建一些不符合我们典型约定的通用帐户。输入是一个这里字符串,因为唯一的唯一项目是机场代码。为简洁起见,我缩短了此处的字符串。
$bases = @"
YAB
YEK
YYH
YHI
"@
$bases.Split("`n") | %{
$ou = "CN=Users,DC=BA,DC=NET"
$firstname = "$_".ToString()
$lastName = "Counter"
$accountName = "$_" + "Counter"
$description = "Base Front Counter"
$password = "Welcome1"
$name = "$firstName $lastName"
New-AdUser -SamAccountName $accountName -GivenName $firstName -UserPrincipalName "$accountName@ba.net" -Surname $lastName -DisplayName $name -Name $name -AccountPassword (ConvertTo-SecureString -AsPlainText $password -Force) -Enabled $true -Path $ou -Description $description -ChangePasswordAtLogon:$False
}
关于使用这里字符串的一些事情我没有考虑到。它成功创建的唯一帐户是YHI 的帐户(此处字符串的最后一个)。对于所有其他人,它提供New-AdUser : The object name has bad syntax。互联网研究显示 csv-imports 存在许多错误,其中数据有空格和其他问题,但我不确定这里的问题是什么。
最后我只是制作了一个 csv 文件而不是使用这里的字符串,但我想知道我做错了什么。
【问题讨论】:
-
为什么要使用here字符串?只需创建一个字符串数组...
$bases=("YAB","YEK","YYH","YHI")然后$bases | ForEach{... -
这是一次性的。我从已经有换行符的列表中复制了数据。 Here-string 不需要我格式化列表。我只需要粘贴到位。不,没有任何空格
-
我知道你说没有空格,但我有点想知道是否有隐藏字符或某些可能是从其他文件复制的。 Unicode 什么的。如果是我,我会使用您的 $Bases=Here-String 并执行 $bases.split("
n")[0].length and see if it comes back longer than 3 characters. Perhaps there is a CR along with the LF being copied? There's a lot unknown. Maybe do a Write-Host ">$($bases.split("n")[0])YAB -
我检查了空格,所以现在假设没有空格还为时过早。长度最终为 4。额外的字符是回车符。 $bases.Split("`n")[0].ToCharArray() | %{ [int][char]$_}
标签: powershell csv for-loop active-directory