PowerShell使用Set-ADUser更改Active Directory中的代理地址

时间:2018-06-25 09:11:47

标签: powershell proxy active-directory

我有一个小代码,我不知道它是否应该工作,因为我目前正在工作,并且代理地址仅在生产环境中创建,而且我担心该代码在我工作时不会工作在生产中使用它。

所以代码逻辑是: -获取代理地址 -如果代理地址以"smtp:"开头,它将更改为"smtp:d_"

例如,"smtp:test@gmail.com"将更改为"smtp:d_test@gmail.com"

这是我的代码:

#### proxy adresses
$Obj_CompteMPOP3 = Get-ADUser $login -Properties proxyaddresses -server $serverSource
$NewProxyAddresses = @() #new array of proxy addresses

$Proxies = $Obj_CompteMPOP3.proxyaddresses #get the proxy addresses of the LDAP object
foreach ($Proxy in $Proxies) {
    if ($Proxy.Substring(0, 5) -like 'smtp:*') #if the address starts with smtp:
    {
        $ProxyPrefixe = $Proxy.Substring(0, 5)
        $NewProxy = "$ProxyPrefixe$D_$($proxy.Substring(5))" #make the new proxy address with the format "smtp:" -> "smtp:d_"
        $MPOP3_NewProxyAddresses += $NewProxy #add the value to the new array of proxy addresses

        Set-ADUser $login -Replace @{ProxyAddresses = $MPOP3_NewProxyAddresses} -Server $serverSource -Credential $CredActivateSIRHMPOP3 #set the new addresses with the new array
    }

}

我完全不确定的行是set-aduser。可以使用吗?考虑到get-aduser为您提供了一个数组,我觉得很合逻辑

预先感谢大家!

2 个答案:

答案 0 :(得分:0)

设置的广告用户将作为命令工作,但您需要将该值添加为数组。

根据我的经验,当我们更改邮件服务器时,我必须导出所有用户地址,并将其添加到具有主要SMTP的主用户地址的代理地址属性中。

我所做的是:

Get-ADUser -Filter {(Enabled -eq $true) -and (sAMAccountType -ne 805306370) -and (cn -ne "Administrator")} -SearchBase "CN=,DC=,DC=,DC=" -Properties proxyAddresses |
Select Name, GivenName, Surname, Enabled, SamAccountName, Title,  `
@{L='ProxyAddress_1';E={$_.proxyaddresses[0]}}, `
@{L='ProxyAddress_2';E={$_.ProxyAddresses[1]}}, `
@{L='ProxyAddress_3';E={$_.ProxyAddresses[2]}}, `
@{L='ProxyAddress_4';E={$_.ProxyAddresses[3]}}, `
@{L='ProxyAddress_5';E={$_.ProxyAddresses[4]}}, `
@{L='ProxyAddress_6';E={$_.ProxyAddresses[5]}}, `

Export-Csv -Path "Your path\Your filename.csv" -NoTypeInformation -Encoding UTF8 -Delimiter "|"

我正在使用|作为分隔符,因此我不必关心是否存在或;在我导出的数据中。 然后使用replace命令更改地址并设置用户属性。

$Temp = Import-Csv -Path "Your path\Your filename.csv" -Encoding Default -Delimiter '|'
ForEach ($User in $Temp) {
Set-ADUser -Identity $User.SamAccountName -Clear proxyaddresses
Set-ADUser -Identity $User.SamAccountName -Add @{proxyAddresses = $User.ProxyAddress_1}
Set-ADUser -Identity $User.SamAccountName -Add @{proxyAddresses = $User.ProxyAddress_2}
Set-ADUser -Identity $User.SamAccountName -Add @{proxyAddresses = $User.ProxyAddress_3}
Set-ADUser -Identity $User.SamAccountName -Add @{proxyAddresses = $User.ProxyAddress_4}
Set-ADUser -Identity $User.SamAccountName -Add @{proxyAddresses = $User.ProxyAddress_5}
}

因此,Set-ADUser命令正在运行,但是您必须放入-Add并将该值设置为多值属性。

希望这对您有所帮助。

编辑:添加新值之前,您还可以看到-Clear命令,因为如果一个用户中的邮件别名过多,您可能会遇到困难。

答案 1 :(得分:0)

经过几次尝试后,我开始执行此操作以替换proxuAddresses数组属性中的错误字符:

$pa = Get-ADObject "$idistinguishedname" -Properties proxyAddresses | select proxyAddresses
$pa | foreach {If ($iVALUE -ceq $pa[0]){Set-ADObject "$idistinguishedname" -replace @{proxyAddresses=$iUPDATE}}}

$ iVALUE和$ iUPDATE来自我导出的CSV文件的输入,该文件是在运行IdFix工具和我的AD后导出并仔细编辑的,以解决不一致问题。 IdFix工具应该这样做,但是它出错了,必须编写PS脚本才能完成该工具无法完成的工作。