Powershell

函式或表達式中帶有 Get-MailboxDatabaseCopyStatus 的空/零結果

  • February 26, 2021

我無法Get-MailboxDatabaseCopyStatus在函式或表達式中獲得 Exchange 管理 CmdLet (OnPremises) 的任何結果。

function Get-DAGDatabaseCopys ($Identity) {
  # Neither this line:
  #[Int]$DBCopys = Invoke-Command { @(Get-MailboxDatabaseCopyStatus -Identity $Identity).count }
  # Or this line works:
  $DBCopys = @(Get-MailboxDatabaseCopyStatus -Identity $Identity).count
  return $DBCopys
}

用法:

Get-DAGDatabaseCopys -Identity "DatabaseName"

表達式範例:

$strMasterType = "DatabaseAvailabilityGroup"
$expDatabaseSpaceGB   = @{Expression={if(($_.MasterType -eq $strMasterType) -and ($IncludeDagCopys)){
   start-sleep 1 
   $DBCopys = @(Get-MailboxDatabaseCopyStatus -Identity $_).count
   return [math]::Round((Value-ToGB -Value $_.AvailableNewMailboxSpace),2) * $DBCopys
};Label="DatabaseWhiteSpaceSizeGB"}

用法:

$MailboxDBStatus      = Get-MailboxDatabase -Status | select ServerName, Name, MasterType, $expDatabaseSpaceGB

函式或表達式的返回值將始終為empty0(如果 DataType 為 Int)。函式/表達式中的對像中沒有數據$DBCopys,即使我嘗試接收完整的對象(不僅僅是計數)。

腳本根目錄或 Powershell 控制台上的相同 CmdLet 直接按預期工作。

這是此 cmdlet 的一般行為還是我在這裡做錯了什麼?

謝謝。

cmdlet 在函式或腳本根目錄中按預期工作。該問題僅發生在內聯 powershell 表達式中。所以我通過避免內聯表達式來解決它。

根據我的知識和測試,該**AvailableNewMailboxSpace參數僅用於Get-MailboxDatabasecmdlet 而不是Get-MailboxDatabaseCopyStatus**cmdlet: 在此處輸入圖像描述

你想得到AvailableNewMailboxSpace參數的值還是你的磁碟的可用空間(DiskFreeSpace)? 在此處輸入圖像描述

如果是前者,我認為您需要將**Get-MailboxDatabaseCopyStatuscmdlet替換為Get-MailboxDatabase -Statuscmdlet。如果是後者,請將AvailableNewMailboxSpacecmdlet替換為DiskFreeSpace**cmdlet。

此外,**Value-ToGB -Value**PowerShell似乎不支持該cmdlet,我認為您可以嘗試使用以下命令:

return [math]::Round(($_.AvailableNewMailboxSpace)/1GB,2) * $DBCopys

引用自:https://serverfault.com/questions/1043008