添加到多值属性的Proxyaddresses不会出现在单独的行上

时间:2017-04-07 12:43:38

标签: powershell active-directory

我正在使用以下脚本在删除之前创建用户和proxyaddress值(匹配字符串)的电子表格作为记录,在紧急情况下我希望能够将值放回去。

如果每个用户只有一个条目,则脚本运行良好,当用户有多个条目时会出现此问题。问题是,当我尝试恢复到原始值时,通过属性编辑器查看时,代理地址全部出现在一行而不是每个代理地址的单独行。我不确定错误是在收集脚本上,还是我用来设置值的脚本。要收集值,我运行以下内容:

$entry = "*test.com"
$users = get-content "Testusers.txt"
$date = get-date
$mydata = @()
$domain = [system.environment]::UserDomainName 
$attribute = "Proxyaddresses"
$report = "{0}_{1}_{2:HHmm_dd-MM-yyyy}.txt" -f $attribute,$domain,$date
$px = $users | Get-ADUser -Properties proxyaddresses -server $domain

foreach ($user in $px){
if ($user.proxyaddresses -like $entry){
    $name = $user.samaccountname
    $proxyaddresses = $user.proxyaddresses -like $entry
    $mydata += New-Object PSObject -Property @{
        Samaccountname = $name
        Proxyaddresses = $proxyaddresses
    }
  }
}
$mydata | select samaccountname,@{ l = "Proxyaddresses"; e = {$_.Proxyaddresses } }| export-csv "$PWD\$report" -NoTypeInformation -Append

要将值返回到原始状态,我运行以下命令:

$csv = import-csv "Proxyaddresses_Domain_1201_05-04-2017.csv"
$domain = [system.environment]::UserDomainName 
$attribute = "Proxyaddresses"
foreach ($line in $csv){
$user = $line.samaccountname
$proxyaddresses = $line.proxyaddresses
Get-aduser $User -server $domain -Properties $attribute | Set-ADUser -add 
@{$attribute = $proxyaddresses} -server $domain
}

我尝试了各种各样的东西,比如收集脚本

$proxyaddresses = $line.proxyaddresses -join ","

我还在用于设置值的脚本中尝试了相同的策略,但是当通过AD属性编辑器查看时,它不会创建新行,而是删除同一行上的条目之间的空格。

我也试图改变

$proxyaddresses = $user.proxyaddresses -like $entry 

以下但是这并没有解决问题

$proxyaddresses = ([Microsoft.ActiveDirectory.Management.ADPropertyValueCollection]$user.proxyaddresses -like $entry

HELP !!!

1 个答案:

答案 0 :(得分:1)

导出数据时,请从此

更改select语句

select samaccountname,@{ l = "Proxyaddresses"; e = {$_.Proxyaddresses } }

到这个

select samaccountname,@{Name="Proxyaddresses";Expression={$_.proxyaddresses -join "*"}}

ADPropertyValueCollection转换为*分隔的字符串。如果要导出为CSV,则不希望使用逗号作为连接分隔符,因为它会弄乱CSV。我在示例中使用了*,因为交换使用了冒号和半冒号。

然后当你重新导入它时,只需确保将*分隔的字符串转换回字符串数组,然后使用-replace而不是-add

Set-ADUser -replace @{$attribute = $proxyaddresses.Split("*")} -server $domain