我正在使用以下脚本在删除之前创建用户和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 !!!
答案 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