提取并保存特定的用户信息。 foreach中的参考
Extract and save specific user information. Reference in foreach
我正在寻求有关在新域的新 Exchange 服务器上自动创建别名的帮助。这是正在进行的迁移的许多步骤之一。
我想 运行 像下面这样的东西:
New-Mailbox -alias $Alias -name "$FullName" -database "CompanyDatabase" -org "CompanyMailboxes" -LinkedMasterAccount $UserAccount -LinkedDomainController domain.example.com -UserPrincipalName $UserEmailAddress
但是,我需要一种方法来从现有域中提取所需的变量并将它们输出到文件中。然后,通过foreach语句,递归运行上述命令。
我需要提取每个用户的:
- 别名(
John Doe = johnd
)
- 全名
- 帐户(
johnd@domain.example.com
或 john@domain.example.com
取决于创建用户的时间)
- 电子邮件地址(
johnd@another.domain.com
)
理想情况下,我想将输出存储在一个文件中,以后需要时可以使用。
然后以某种方式将上面的命令包装在 foreach 中并引用该文件。
$OLD = Get-mailbox -resultsize 10
foreach ( $NEW in $OLD ) { New-Mailbox -alias $OLD.alias -name $OLD.Name ... }
这是最简单的方法,您将需要更多地修改它,因为您将通过这种方式接收各种邮箱。
编辑:现有属性是否与新域中的属性相同?
-alias $( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] )
那你可以用同样的命令做邮箱地址吗?
$( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] + "@another.domain.com" )
我设法解决了这个问题。感谢受访者的帮助,并帮助其他有同样问题的人:
运行 域控制器上的以下 powershell 脚本。
Import-Module ActiveDirectory
foreach ($User in (Get-ADUser -Server "<SERVER>" -Filter * -Properties EmailAddress)){Write-Output "$($User.SamAccountName),$($User.EmailAddress),$($User.Name)" >> 'C:\output.csv'}
输出将保存为 CSV(无标题)到 C:\output.csv
将输出文件复制到您的交换服务器,并在交换控制台中 运行 以下脚本(您需要在 CSV 文件中包含自己的标题,我使用了 "Name" 和 "Surname" 等在这里,例如);
Import-CSV -delimiter ";" "output.csv" | Foreach {
$FullName = $_.Name + " " + $_.Surname
New-Mailbox -alias $_.Alias -name $Fullname -Firstname $_.Name -Lastname $_.Surname -database "<DATABASE>" -org "<OU>" -LinkedMasterAccount $_.AccountDomain -LinkedDomainController <DOMAIN CONTROLLER> -UserPrincipalName $_.Email
}
我能够使用此方法为所有用户成功创建别名。您的情况可能有所不同,但我希望这足以进行逆向工程,如果需要的话。
我正在寻求有关在新域的新 Exchange 服务器上自动创建别名的帮助。这是正在进行的迁移的许多步骤之一。
我想 运行 像下面这样的东西:
New-Mailbox -alias $Alias -name "$FullName" -database "CompanyDatabase" -org "CompanyMailboxes" -LinkedMasterAccount $UserAccount -LinkedDomainController domain.example.com -UserPrincipalName $UserEmailAddress
但是,我需要一种方法来从现有域中提取所需的变量并将它们输出到文件中。然后,通过foreach语句,递归运行上述命令。
我需要提取每个用户的:
- 别名(
John Doe = johnd
) - 全名
- 帐户(
johnd@domain.example.com
或john@domain.example.com
取决于创建用户的时间) - 电子邮件地址(
johnd@another.domain.com
)
理想情况下,我想将输出存储在一个文件中,以后需要时可以使用。
然后以某种方式将上面的命令包装在 foreach 中并引用该文件。
$OLD = Get-mailbox -resultsize 10
foreach ( $NEW in $OLD ) { New-Mailbox -alias $OLD.alias -name $OLD.Name ... }
这是最简单的方法,您将需要更多地修改它,因为您将通过这种方式接收各种邮箱。
编辑:现有属性是否与新域中的属性相同?
-alias $( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] )
那你可以用同样的命令做邮箱地址吗?
$( ( $OLD.Name ).Split( " " )[-1] + ( $OLD.Name ).Split( " " )[0] + "@another.domain.com" )
我设法解决了这个问题。感谢受访者的帮助,并帮助其他有同样问题的人:
运行 域控制器上的以下 powershell 脚本。
Import-Module ActiveDirectory
foreach ($User in (Get-ADUser -Server "<SERVER>" -Filter * -Properties EmailAddress)){Write-Output "$($User.SamAccountName),$($User.EmailAddress),$($User.Name)" >> 'C:\output.csv'}
输出将保存为 CSV(无标题)到 C:\output.csv
将输出文件复制到您的交换服务器,并在交换控制台中 运行 以下脚本(您需要在 CSV 文件中包含自己的标题,我使用了 "Name" 和 "Surname" 等在这里,例如);
Import-CSV -delimiter ";" "output.csv" | Foreach {
$FullName = $_.Name + " " + $_.Surname
New-Mailbox -alias $_.Alias -name $Fullname -Firstname $_.Name -Lastname $_.Surname -database "<DATABASE>" -org "<OU>" -LinkedMasterAccount $_.AccountDomain -LinkedDomainController <DOMAIN CONTROLLER> -UserPrincipalName $_.Email
}
我能够使用此方法为所有用户成功创建别名。您的情况可能有所不同,但我希望这足以进行逆向工程,如果需要的话。