无法通过管道将 cmdlet 传递给另一个?

Unable to pipe and pass through cmdlets to another?

下面的脚本用于收集 Exchange Online 的邮箱大小。

    $Mailboxes = @('User1.name@domain.co.uk', 'user2.name@company.com') + GetEXOMailbox | Where-Object {$_.Name -like '*User*'}
        
    $folderAndSubfolderSize = @{n='FolderAndSubfolderSize'; e={[math]::Round(($_.FolderAndSubfolderSize.Replace(',', '') -replace '.*?\((\d+)\s+bytes\)', '') / 1MB, 1)}}
$DisplayName = @{n='Display Name'; e='Identity'}

$Mailboxes | Get-EXOMailbox | Select-Object -ExpandProperty Name | ForEach-Object {
    Write-Host "Processing $_ ..." -ForegroundColor Yellow
   Get-EXOMailboxFolderStatistics -Identity $_ |
      Where-Object {$_.Name -like "Top of Information Store"} |
      Select-Object -Property $DisplayName, $folderAndSubfolderSize, ItemsInFolderAndSubfolders |
      Where-Object {$_.FolderAndSubfolderSize -gt 1 }
} | Out-GridView

但是,下面的错误导致结果无法正常显示。

Get-EXOMailboxFolderStatistics : Identity is a mandatory value to provide for running Get-ExoMailboxFolderStatistics. You can specify identity by using either of the following
Identity, ExternalDirectoryObjectId, UserPrincipalName.
At line:6 char:2
+     Get-EXOMailboxFolderStatistics $_.Name |
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ProtocolError: (:) [Get-EXOMailboxFolderStatistics], RestClientException
    + FullyQualifiedErrorId : Identity is a mandatory value to provide for running Get-ExoMailboxFolderStatistics. You can specify identity by using either of the following
Identity, ExternalDirectoryObjectId, UserPrincipalName.
,Microsoft.Exchange.Management.RestApiClient.GetExoMailboxFolderStatistics

我想知道如何解决这个问题?

Get-EXOMailboxFolderStatistics每个参数的文档说明每个参数的位置是Named。因此,您必须使用 -Parameter Value 将值绑定到参数。

Get-EXOMailboxFolderStatistcs -Identity $_.UserPrincipalName

您尝试的内容取决于 -identity 参数的数字位置。默认情况下,函数按照声明的顺序启用位置参数。您可以使用 CmdletBinding 属性的 PositionalBinding 参数明确禁用位置。您还可以使用 Parameter 属性设置位置。参见 Advanced Parameters