Powershell 添加到多值属性的Proxyaddresses不显示在单独的行中

Powershell 添加到多值属性的Proxyaddresses不显示在单独的行中,powershell,active-directory,Powershell,Active Directory,我正在使用以下脚本创建一个包含用户和proxyaddress值(匹配字符串)的电子表格,作为删除它们之前的记录,在紧急情况下,我希望能够将这些值放回去 如果每个用户只有一个条目,那么脚本工作得很好,当用户有多个条目时就会出现问题。问题是,当我尝试恢复到原始值时,通过属性编辑器查看时,代理地址显示在一行上,而不是每个代理地址的单独一行。我不确定故障是在收集脚本上,还是在我用来设置值的脚本上。要收集我正在运行的值,请执行以下操作: $entry = "*test.com" $users = get-

我正在使用以下脚本创建一个包含用户和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
}
要将值返回到原始状态,我将运行以下操作:

$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

救命啊

导出数据时,请从此处更改select语句

选择samaccountname,@{l=“Proxyaddresses”;e={$\uu.Proxyaddresses}}

对此

选择samaccountname,@{Name=“Proxyaddresses”;Expression={$\.Proxyaddresses-join“*”}

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

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


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

很好的解释-解决了我的问题。注意:我继续使用-add而不是-replace as-replace将所有proxyaddresses属性项替换为新项