![](/img/trans.png)
[英]Trying to export from a multivalued attribute "Proxyaddresses" to csv
[英]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.