我有一个冒号分隔的CSV,
Mailbox:Users
AcmeCorp:("jsmith","trex")
XyzCorp:("sjobs","bfranklin")
然后将其添加到一个变量中:
$file = import-csv file.csv -delimiter :
现在,我使用它:
foreach ($record in $file) {
$record.Users | % { get-aduser $_ }
}
foreach循环中的write-host
报告$record.Users
为("jsmith","trex")
但是,get-aduser
(或其他cmdlet)抱怨它找不到具有identity '("jsmith","trex")'
的对象。
如何防止foreach向参数添加单引号?
我已经尝试过像"sjobs","bfranklin"
这样的用户,但是import-csv去掉了sjobs
中的双引号
或者更好的是,如何将用户列表传递给foreach?
PowerShell版本4
发布于 2015-05-15 02:16:56
PS未添加报价。它们就在你的文件里。下面是一段代码片段,可以让你在正确的方向上开始:
$file = Import-csv file.csv -delimiter ':'
foreach($row in $file){
foreach($user in $row.Users.split(',')){
Get-ADUser ($user.replace('(','').Replace('"','').replace(')',''))
}
}
发布于 2015-05-15 14:08:00
我认为这里的问题是,您认为您正在导入一个字符串数组作为Users
的值,但实际上您只是导入了单个字符串。这里有几个选项,使用您已经发现的split
方法:
$file = import-csv file.csv -delimiter ':'
ForEach($Record in $File){
$Record.Users.Trim('()').Split(',') | ForEach{
Get-ADUser $_.Trim('"')
}
}
因此,$Record.Users.Trim('()')
将从字符串中删除圆括号。然后,它使用.Split(',')
将字符串拆分成字符串数组。然后,当从每个字符串中获取ADUser时,在去掉它周围的引号(使用.Trim('"')
)之后,它将它传递给一个内部ForEach循环。
或者,您可以让每行有一个用户,这样您的CSV将如下所示:
Mailbox:User
AcmeCorp:jsmith
AcmeCorp:trex
XyzCorp:sjobs
XyzCorp:bfranklin
然后,在导入CSV后,如果需要,您可以只按邮箱分组,例如,按邮箱或其他方式添加用户:
$File = Import-CSV C:\Path\To\File.csv -delimiter ':'
$MBGroups = $File | Group Mailbox
ForEach($Record in $MBGroups){
$Mailbox = $Record.Name
$Users = $Record.Group | ForEach{Get-ADUser $_.User}
$Users | ForEach{Set-ADUser -mail ($_.samaccountname+"@"+$Mailbox+".com")}
}
https://stackoverflow.com/questions/30244235
复制相似问题