function Get-MemoryInventory { <# .SYNOPSIS Returns an OrderedDictionary that Represents the Memory Inventory. #> [CmdletBinding()] Param() $logLead = (Get-LogLeadName); $providerStopWatch = [System.Diagnostics.StopWatch]::StartNew() $memoryDictionary = New-Object System.Collections.Specialized.OrderedDictionary $memoryDetails = New-Object System.Collections.Specialized.OrderedDictionary Set-Variable megaByteDivisor -Option Constant -Value 1048576 try { Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Getting Memory Details" $memory = Get-CIMInstance -Namespace "root\CIMV2" -Class Win32_PerfRawData_PerfOS_Memory ` -Property CommitLimit, AvailableMBytes, CommittedBytes, CacheBytes, PoolNonpagedBytes, PoolPagedBytes Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Memory Details Retrieved" $memoryDetails["TotalMBytes"] = ($memory.CommitLimit / $megaByteDivisor) $memoryDetails["AvailableMBytes"] = $memory.AvailableMBytes $memoryDetails["CommittedMBytes"] = [int]($memory.CommittedBytes / $megaByteDivisor) $memoryDetails["SystemCacheMBytes"] = [int]($memory.CacheBytes / $megaByteDivisor) $memoryDetails["NonPagedPoolMBytes"] = [int]($memory.PoolNonpagedBytes / $megaByteDivisor) $memoryDetails["PagedPoolMBytes"] = [int]($memory.PoolPagedBytes / $megaByteDivisor) $memoryDictionary.Add("Memory" , $memoryDetails) } catch { $memoryDetails["Error"] = $_.Exception.ToString() } Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Provider Complete" $providerStopWatch.Stop() return $memoryDictionary }