Get-WindowsMemory.ps1


<#PSScriptInfo
 
.VERSION 1.0.2
 
.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
  
 
#>
 

[CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][Alias("Host","DNSHostName","IP","IPAddress")][string[]]$ComputerName = $env:COMPUTERNAME,
        [PSCredential]$Credential
    )
    
    $ComputerCount = $ComputerName.count
    [int]$i = 0
    $ComputerName | % {
    if($ComputerCount -gt 1){Write-Progress -Activity $_ -PercentComplete ($i / $ComputerCount * 100)}
    $i += 1
        if($_ -eq $env:COMPUTERNAME){
                try{
                    $PerfOS_Memory = Get-WmiObject -Class Win32_PerfRawData_PerfOS_Memory -ComputerName $_ -ErrorVariable WmiRequestError
                    $PhysicalMemory = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $_ -ErrorVariable WmiRequestError
                    $TotalPhysicalMemory = ($PhysicalMemory | Measure-Object -Sum -Property Capacity).Sum
                    } Catch {$WmiRequestError; break}
            } else {
                try{
                    $PerfOS_Memory = Get-WmiObject -Class Win32_PerfRawData_PerfOS_Memory -ComputerName $_ -Credential $Credential -ErrorVariable WmiRequestError
                    $PhysicalMemory = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $_ -Credential $Credential -ErrorVariable WmiRequestError
                    $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)
            }
        }
        $PerfOS_Memory = $Null
        $PhysicalMemory = $Null
        $TotalPhysicalMemory = $Null
        $WmiRequestError = $Null
        
    }