提取并保存特定用户信息。参考foreach

时间:2018-05-04 09:14:23

标签: powershell email active-directory exchange-server alias

我正在寻找一些帮助,以便在新域上的新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.comjohn@domain.example.com 取决于创建用户的时间)
  • 电子邮件地址(johnd@another.domain.com

理想情况下,我想将输出存储在一个文件中,如果需要,我可以在以后使用。

然后以某种方式将上面的命令包装在foreach中并引用该文件。

2 个答案:

答案 0 :(得分:0)

$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" )

答案 1 :(得分:0)

我设法解决了这个问题。感谢受访者的帮助,并帮助其他人解决同样的问题:

在域控制器上运行以下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

将输出文件复制到Exchange服务器,并在交换机控制台中运行以下脚本(您需要在CSV中包含自己的标题,我使用&#34;名称&#34;和&# 34;姓氏&#34;等,例如);

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
}

我能够使用此方法为所有用户成功创建别名。您的情况可能会有所不同,但如果需要,我希望这足以进行逆向工程。