【问题标题】:Exchange: Get-Mailbox output different in script vs command-lineExchange:脚本与命令行中的 Get-Mailbox 输出不同
【发布时间】:2016-06-17 06:56:04
【问题描述】:

在 Powershell 中,在脚本与命令行中运行时,我从 Get-Mailbox 得到不同的输出。

脚本:

$credy = get-credential

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $credy -Authentication Basic –AllowRedirection

Import-PSSession $session

Get-Mailbox

输出 - 脚本:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.0        ...                                 {Add-AvailabilityAddressSpace, Add-DistributionGroupMember...

RunspaceId                             : ...
Database                               : ...
MailboxProvisioningConstraint          :
MessageCopyForSentAsEnabled            : False
MessageCopyForSendOnBehalfEnabled      : False
MailboxProvisioningPreferences         : {}
UseDatabaseRetentionDefaults           : False
RetainDeletedItemsUntilBackup          : False

输出 - 命令行:

PS C:\> Get-Mailbox

Name                      Alias                ServerName           ProhibitSendQuota
----                      -----                ----------           -----------------
mailbox1                  mb1                  ...                  ... 
mailbox2                  mb2                  ...                  ...
mailbox3                  mb3                  ...                  ...

在脚本中运行 Get-Mailbox 时,我会获得完整的邮箱详细信息。但是,当通过命令行运行时,我会得到一个邮箱列表。为什么我得到不同的输出?我希望脚本只输出邮箱列表。

【问题讨论】:

    标签: powershell exchange-server


    【解决方案1】:

    脚本/函数/cmdlet 的输出(对象)在未保存时沿管道发送。管道是一个对象流,只要您不将其通过管道传输到另一个函数,PowerShell 就会在第一个对象到达时立即将输出写入控制台/主机。

    因为这是一个流,PowerShell 需要从一开始就猜测它应该如何输出最后一个对象,并且它使用第一个对象的格式/视图来决定,期望所有其他对象都是相同的类型。这就是为什么函数、脚本等的执行在输出不同类型的对象时会出现损坏的视图。脚本的管道包含来自Import-PSSession 和邮箱对象的结果。

    当您在控制台中写入时,管道会在每个命令完成后停止,因此一旦完成,“视图”就会重置。

    您可以通过以下方式解决此问题:

    • 将导入行替换为Import-PSSession $session | Out-Null,这样就不会设置“视图”。
    • 使用Out-Host 之类的东西直接写入主机,而不是通过管道发送邮箱。例如:Get-Mailbox | Out-Host

    【讨论】:

    • 您的回答很有帮助,解决了我的问题。感谢您更好地了解 powershell 和输出格式选项。
    • 很高兴我能帮上忙。如果这解决了您的问题,请使用答案旁边的复选标记将其标记为答案。欢迎使用 StackOverflow
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2019-04-01
    • 2020-02-07
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多