String 如何在没有'的情况下输出价值产出@{}';更换字符串后?
我正在尝试从Exchange 365导出转发列表,并从输出中删除“smtp:”字符串 以下是Exchange 365转发列表的PS代码:String 如何在没有'的情况下输出价值产出@{}';更换字符串后?,string,powershell,replace,output,String,Powershell,Replace,Output,我正在尝试从Exchange 365导出转发列表,并从输出中删除“smtp:”字符串 以下是Exchange 365转发列表的PS代码: $forwards = Get-Mailbox –ResultSize Unlimited | where {($_.ForwardingSmtpAddress –ne $null)} | select identity, *forward* $result = $forwards -replace "smtp:
$forwards = Get-Mailbox –ResultSize Unlimited |
where {($_.ForwardingSmtpAddress –ne $null)} |
select identity, *forward*
$result = $forwards -replace "smtp:",""
$result
My$forwards
值的格式为:
PS> $forwards
Identity DeliverToMailboxAndForward ForwardingAddress ForwardingSmtpAddress
-------- -------------------------- ----------------- ---------------------
name.surname1 True smtp:name.surname1@domain.com
name.surname2 True smtp:name.surname2@domain.com
name.surname3 True smtp:name.surname3@domain.com
但我得到的变量输出非常糟糕:
PS> $result
@{Identity=name.surname1; DeliverToMailboxAndForward=True; ForwardingAddress=; ForwardingSmtpAddress=name.surname1@domain.com}
@{Identity=name.surname2; DeliverToMailboxAndForward=True; ForwardingAddress=; ForwardingSmtpAddress=name.surname2@domain.com}
@{Identity=name.surname3; DeliverToMailboxAndForward=True; ForwardingAddress=; ForwardingSmtpAddress=name.surname3@domain.com}
PS>$result
@{Identity=name.names1;DeliverToMailboxAndForward=True;ForwardingAddress=;ForwardingSmtpAddress=name。surname1@domain.com}
@{Identity=name.names2;DeliverToMailboxAndForward=True;ForwardingAddress=;ForwardingSmtpAddress=name。surname2@domain.com}
@{Identity=name.names3;DeliverToMailboxAndForward=True;ForwardingAddress=;ForwardingSmtpAddress=name。surname3@domain.com}
如何摆脱这个
@{}
并以正确的方式呈现它,就像它在$forwards
变量中一样?也许有更好的方法从第一个值$forwards
?中删除smtp:
,而不是创建新变量,修改数组中的现有对象可能更容易。您需要对每个ForwardingSmtpAddress
属性进行替换:
$forwards | Foreach-Object {
$_.ForwardingSmtpAddress = $_.ForwardingSmtpAddress -replace "smtp:", ""
}
在此之后,只需将
$forwards
回显到屏幕上,就会显示更新后的值。使用此代码段会有什么结果?$forwards = Get-Mailbox –resultSize unlimited |
where {$_.ForwardingSmtpAddress –ne $null} |
select Identity, DeliverToMailboxAndForward, ForwardingAddress,
@{Name='ForwardingSmtpAddress';Expression={$_.ForwardingSmtpAddress.ToString().Replace('smtp:', $null)}}
如果您不想使用@{}
,也许您可以将其转换或导出为CSV格式
Export-Csv -Delimiter ';'
ConvertTo-Csv -Delimiter ';'
您还应该能够使用计算属性:
$forwards = Get-Mailbox –resultSize unlimited |
where { $_.ForwardingSmtpAddress –ne $null } |
select @{Name="Identity";Expression={$_.Identity}},
DeliverToMailboxAndForward, ForwardingAddress,
@{Name="ForwardingSmtpAddress";Expression={$_.ForwardingSmtpAddress -replace "smtp:",""}}
不过,我现在没有办法测试这一点。您想对结果做什么?@vonPryz我想以与$forwards变量相同的方式显示输出,该变量有列,没有@{;}符号。我的意思是,您想在控制台上打印它,保存到文件,在管道上或其他地方进一步处理?@vonPryz将其打印到控制台。这有一个技巧:)但您知道这是否可以修复$result变量,使其以相同的正确方式显示吗?这是可行的,但由于对象在powershell中的工作方式,可能不值得这么麻烦。您需要深度克隆对象。如果你真的想使用
$result
,你可以说$result=$forwards
,但这会在两者之间创建一个引用,即$result
的更改将反映在$forwards
中,那么这个对象是否已损坏-不可能删除符号@{}并修复列输出?对象未损坏。你想对输出做什么?正如我所说,您应该只对$forwards
数组进行操作,忘记将其分配给其他任何对象。我写错了:)它没有损坏,但我不知道如何将该变量以正确的格式写入输出(控制台)。标识值丢失-empty column.dam。如果只尝试Expression={$\.Identity}
或Expression={$\.Identity.toString()}
,会发生什么情况?这一个:Expression={$\.Identity}可以:)
$forwards = Get-Mailbox –resultSize unlimited |
where { $_.ForwardingSmtpAddress –ne $null } |
select @{Name="Identity";Expression={$_.Identity}},
DeliverToMailboxAndForward, ForwardingAddress,
@{Name="ForwardingSmtpAddress";Expression={$_.ForwardingSmtpAddress -replace "smtp:",""}}