我有像这样的冒号分隔的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)会抱怨它无法找到标识为'("jsmith","trex")'
的对象。
如何防止foreach在参数中添加单引号?
我已尝试像"sjobs","bfranklin"
这样的用户,但import-csv会从sjobs
或者更好的是,如何将用户列表传递给foreach?
PowerShell版本4
答案 0 :(得分:0)
PS没有添加引号。它们就在您的文件中。这是一个片段,为您提供正确的方向:
$file = Import-csv file.csv -delimiter ':'
foreach($row in $file){
foreach($user in $row.Users.split(',')){
Get-ADUser ($user.replace('(','').Replace('"','').replace(')',''))
}
}
答案 1 :(得分:0)
我认为这里的问题是你认为你正在导入一个字符串数组作为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之后将其传递给内部ForEach循环,从中移除引号(使用.Trim('"')
)。
或者,每行可以有一个用户,因此您的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")}
}