PowerShell拆分值位于单独的行上

PowerShell拆分值位于单独的行上,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.0,下面我有一个脚本。我要运行并获取所有Office 365邮箱的报告。但是有一个属性EmailAddresses的值不止一个,我想在开始时删除SMTP来清理这个属性,这部分很好,我一直坚持使用的是最后的拆分,我想根据他们的电子邮件地址数量,根据需要将其拆分为多少行。我确实计数,但在底部构建自定义数组不起作用 Get-Mailbox `            | ForEach{            $DisplayName = $_.DisplayName            $Primary

下面我有一个脚本。我要运行并获取所有Office 365邮箱的报告。但是有一个属性EmailAddresses的值不止一个,我想在开始时删除SMTP来清理这个属性,这部分很好,我一直坚持使用的是最后的拆分,我想根据他们的电子邮件地址数量,根据需要将其拆分为多少行。我确实计数,但在底部构建自定义数组不起作用

Get-Mailbox `
           | ForEach{
           $DisplayName = $_.DisplayName
           $PrimarySmtpAddress = $_.PrimarySmtpAddress
           $alias = $_.alias
           $UserPrincipalName = $_.UserPrincipalName
           $EmailAddresses = $_.EmailAddresses
           $OtherProxyAddress = $_.EmailAddresses -cmatch "smtp:" -replace "smtp:",""
           $StepProxyAddress = ($OtherProxyAddress).count
           $number = 0
           $UserPrincipalName | Select-Object `
           @{n="DisplayName";e={$DisplayName}},`
           @{n="alias";e={$alias}},`
           @{n="UserPrincipalName";e={$UserPrincipalName}},`
           @{n="PrimarySmtpAddress";e={$PrimarySmtpAddress}},`
           @{Name="PrimaryProxyAddresses"; Expression={$EmailAddresses -cmatch "SMTP:" -replace "SMTP:",""}},`
           do {@{Name="OtherProxyAddress" + $number++; Expression={($OtherProxyAddress)[$number]}}} until($number -eq $StepProxyAddress)
           }
以下是$OtherProxyAddress的原始值:

fred.smith@tenant.onmicrosoft.com
fred.smith@company.com
我希望输出(尤其是此属性)为:


您可能需要这样的内容(假设
EmailAddresses
属性包含一个电子邮件地址数组,其格式为
smtp:localpart@example.com
):

获取邮箱|%{
$o=新对象-类型PSCustomObject-属性@{
“DisplayName”=$\u.DisplayName
“别名”=$\别名
'UserPrincipalName'=$\ UserPrincipalName
“PrimarySmtpAddress”=$\ PrimarySmtpAddress
“PrimaryProxyAddress”=($\ 0.EmailAddresses |选择-第一个1)-替换“^smtp:”
}
$i=1
$|.EmailAddresses |选择-跳过1 |%{
$o |添加成员-类型NoteProperty-名称“OtherProxyAddress$i”`
-值($\替换“^smtp:”)
$i++
}
$o
}

首先,构建一个具有“简单”属性的自定义对象,然后,通过在嵌套循环中使用,将每个电子邮件地址作为单独的属性添加到该对象。

原始值和所需结果的示例可能会有所帮助。以下是
$OtherProxyAddress
:fred的原始区域值。smith@tenant.onmicrosoft.com弗雷德。smith@company.com我想要输出(特别是这个属性)将成为:
OtherProxyAddress1。smith@tenant.onmicrosoft.com其他代理地址2弗雷德。smith@company.com
@MarcKean这很好,但您能否将其添加到您的问题中,并向我们展示您希望问题中的输出是什么样子的。我这样问是因为看到你想要什么是我们能确定的唯一方法。我可以猜,但如果我错了,那将是浪费我的时间。如果对象在第一个创建的地址之外有更多的附加地址,这不会导致问题吗?我打算这样做,但要计算地址的最大数量,这样每个对象都有相同的地址amount@Matt我对这个问题的理解是,无论有多少个地址,他都希望每个地址有一处房产。不过,他可能想跳过第一个地址,因为这已经是
PrimaryProxyAddress
。更新。我更改了行(第8行和第12行)
'PrimaryProxyAddress'=$\u0.EmailAddresses-cmatch“SMTP:”-替换“^SMTP:”
$\u0.EmailAddresses-cmatch”SMTP:“%{
使用cmatch更准确,因为大写的SMTP地址是主要代理地址。然而,在这样做时,我现在有了{}结果中电子邮件地址的任一侧。如何从结果中删除{}?实际上,我想我已经解决了,将行更改为
'PrimaryProxyAddress'=($.EmailAddresses)-cmatch“SMTP:”-替换“^SMTP:”-加入“”
加入函数成功了
OtherProxyAddress1  fred.smith@tenant.onmicrosoft.com
OtherProxyAddress2  fred.smith@company.com