Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在没有'的情况下输出价值产出@{}';更换字符串后?_String_Powershell_Replace_Output - Fatal编程技术网

String 如何在没有'的情况下输出价值产出@{}';更换字符串后?

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:

我正在尝试从Exchange 365导出转发列表,并从输出中删除“smtp:”字符串

以下是Exchange 365转发列表的PS代码:

$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:",""}}