我有一个小代码,我不知道它是否应该工作,因为我目前正在工作,并且代理地址仅在生产环境中创建,而且我担心该代码在我工作时不会工作在生产中使用它。
所以代码逻辑是:
-获取代理地址
-如果代理地址以"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
为您提供了一个数组,我觉得很合逻辑
预先感谢大家!
答案 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脚本才能完成该工具无法完成的工作。