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