簡體   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