Get-WindowsMemory.ps1


<#PSScriptInfo
 
.VERSION 1.3.5
 
.GUID aea43ca3-73aa-4262-9f20-5e73c134af11
 
.AUTHOR saw-friendship
 
.COMPANYNAME
 
.COPYRIGHT saw-friendship
 
.TAGS saw-friendship Windows WMI Remote Memory Sytem
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
#>


<#
 
.DESCRIPTION
 Get Windows Memory by Wmi on local and remote system
 
.LINK
 https://sawfriendship.wordpress.com/
 
.EXAMPLE
 Get-WindowsMemory
 
.EXAMPLE
 Get-WindowsMemory FileServer01 -Credential (Get-Credential)
 
.EXAMPLE
 Get-WindowsMemory FileServer01,FileServer02
 
.EXAMPLE
 Get-ClusterNode | Get-WindowsMemory | ft
 
#>


[CmdletBinding()]
    param(
        [Parameter(ValueFromPipelineByPropertyName=$true)][alias("DNSHostName","Name")]$ComputerName = '.',
        [PSCredential]$Credential
    )
    
    BEGIN {}
    
    PROCESS  {
        Foreach ($Comp in $ComputerName) {
            $param = @{
                'ComputerName' = $Comp
                'ErrorVariable' = 'WmiRequestError'
            }
            if($Credential -and ($Comp -notin @($env:COMPUTERNAME,'.'))){$param.Credential = $Credential}
                
            try{
                $PerfOS_Memory = Get-WmiObject -Class Win32_PerfRawData_PerfOS_Memory @param
                $PhysicalMemory = Get-WmiObject -Class Win32_PhysicalMemory @param
                $TotalPhysicalMemory = ($PhysicalMemory | Measure-Object -Sum -Property Capacity).Sum
            } Catch {$WmiRequestError; break}
            
            if($PerfOS_Memory -and !$WmiRequestError){
            
                [pscustomobject][ordered]@{
                    'ComputerName' = $PerfOS_Memory.PSComputerName
                    'AvailableGB' = [System.Math]::Round(($PerfOS_Memory.AvailableBytes/1gb),2)
                    'inUseGB' = [System.Math]::Round(($TotalPhysicalMemory/1gb - $PerfOS_Memory.AvailableBytes/1gb),2)
                    'CacheGB' = [System.Math]::Round(($PerfOS_Memory.CacheBytes/1gb),2)
                    'CommittedGB' = [System.Math]::Round(($PerfOS_Memory.CommittedBytes/1gb),2)
                    'CommitLimitGB' = [System.Math]::Round(($PerfOS_Memory.CommitLimit/1gb),2)
                    'PoolPagedMB' = [System.Math]::Round(($PerfOS_Memory.PoolPagedBytes/1mb),2)
                    'PoolNonpagedMB' = [System.Math]::Round(($PerfOS_Memory.PoolNonpagedBytes/1mb),2)
                    'TotalPhysicalMemory' = [System.Math]::Round(($TotalPhysicalMemory/1gb),2)
                    'ModuleSize' = ($PhysicalMemory | Group-Object -Property Capacity | % {[string]$($_.Count.ToString() + ' x ' + ($_.Name / 1GB).ToString() + 'GB')}) -join ', '
                }
            }
            $PerfOS_Memory = $Null
            $PhysicalMemory = $Null
            $TotalPhysicalMemory = $Null
            $WmiRequestError = $Null
            
        }
        
    }
    
    END {}