0

私はいくつかのproerties、合計、平均を追跡し、私がしたいと思います一つの特性の平均Measure-ObjectでPowershellでリフレクション/ダイナミックタイピングを行うにはどうしたらいいですか?

$Databases = Get-MailboxDatabase -Status 
    foreach($Database in $Databases) { 
     $DBSize = $Database.DatabaseSize 
     $MBCount = @(Get-MailboxStatistics -Database $Database.Name).Count 

    # This line is giving me trouble 
     $MBAvg = Get-MailboxStatistics -Database $Database.Name | %{$_.TotalItemSize.value.ToMb()} | Measure-Object -Average   

     New-Object PSObject -Property @{ 
      Server = $Database.Server.Name 
      DatabaseName = $Database.Name 
      LastFullBackup = $Database.LastFullBackup 
      MailboxCount = $MBCount 
      "DatabaseSize (GB)" = $DBSize.ToGB() 
      "AverageMailboxSize (MB)" = $MBAvg.Average 
      "WhiteSpace (MB)" = $Database.AvailableNewMailboxSpace.ToMb() 
      Items = 0 
      LogicalSize = 0 
     } 
    } 

「測定・オブジェクト」を計算し、次のコマンドを持っています。

$MeasureProps = "AssociatedItemCount", "DeletedItemCount", "ItemCount", "TotalDeletedItemSize", "TotalItemSize" 

    $Databases = Get-MailboxDatabase -Status 
    foreach($Database in $Databases) { 
     $DBSize = $Database.DatabaseSize 
     $MBCount = @(Get-MailboxStatistics -Database $Database.Name).Count 

     $MBStats = Get-MailboxStatistics -Database $Database.Name  

     #Expanded version of problem line above 
     foreach($mb in $MBStats) 
     { 
     foreach($prop in $MeasureProps) 
     { 
      #this is a random hack. I have almost no idea what I'm doing. 
      select $mb.$prop | Measure-Object -Property $prop -Sum -Average 
     }   
     } 

     New-Object PSObject -Property @{ 
      Server = $Database.Server.Name 
      DatabaseName = $Database.Name 
      LastFullBackup = $Database.LastFullBackup 
      MailboxCount = $MBCount 
      "DatabaseSize (GB)" = $DBSize.ToGB() 
      "AverageMailboxSize (MB)" = $MBAvg.Average 
      "WhiteSpace (MB)" = $Database.AvailableNewMailboxSpace.ToMb() 
      Items = 0 
      LogicalSize = 0 
     } 
    } 

私が持っている問題は、私は、各オブジェクトの合計にアクセスできるように%{$_.TotalItemSize.valueを編集する方法を考え出すされています。

答えて

1

%ForEach-Objectの別名です。正しく理解している場合はをTotalItemSizeの値のセットに使用したいと考えています。その場合は、Select-Objectのエイリアスであるselectを使用してください。これらの線に沿って何か:

[...] | select -ExpandProperty TotalItemSize | Measure-Object [...] 

そしてもちろん私が正しくあなたの問題を理解していなかったなら、私を修正してください。)

編集:私はきれいなのかわからない

/ビルドの仕方あなたが気づいた2番目の質問の条件を満たす(つまり、複数のプロパティを渡す)。私がチェックしExpandPropertyは、あなたが複数のプロパティを選択するこの方法を可能にするほど魔法ではありません;)私は、コードを少し書き換えると、とにかくプロパティを列挙示唆している:数値上

$MeasureProps = "AssociatedItemCount", [...], "TotalItemSize" 
foreach($prop in $MeasureProps) 
{ 
    select $prop | Measure-Object -Property $prop -Sum -Average 
} 
+0

ああ、これは近い私を得ました。私はちょうど質問を更新した – LamonteCristo

2

Measure-Object作品を。問題はTotalItemSizeとTotalDeletedItemSizeの値が文字列です。この制限を回避するには、Measure-Objectに結果を最初TotalItemSizeとTotalDeletedItemSizeの値を展開し、パイプにSelect-Objectコマンドレットを使用することができます。

$TotalItemSize = @{n='TotalItemSize';e={$_.TotalItemSize.Value.ToMB()}} 
$TotalDeletedItemSize = @{n='TotalDeletedItemSize';e={$_.TotalDeletedItemSize.Value.ToMB()}} 

Get-MailboxStatistics -Database 'Mailbox Database 0311695863' | ` 
    Select-Object -Property AssociatedItemCount,DeletedItemCount,ItemCount,$TotalItemSize,$TotalDeletedItemSize | ` 
     Measure-Object -Property AssociatedItemCount,DeletedItemCount,ItemCount,TotalItemSize,TotalDeletedItemSize -Sum -Average 
関連する問題