繁体   English   中英

添加到多值属性的代理地址不会出现在单独的行上

[英]Proxyaddresses added to the multivalued attribute not appearing on seperate lines

我使用以下脚本在删除用户和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

救命!!!

导出数据时,请从此更改选择语句

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM