Skip to main content

Powershell not returning same memory use as Task Manager

Task Manager gets that information from a performance counter, which is not directly available from the information returned by Get-Process.  You can get to the information with PowerShell, though.  This example uses the Get-Counter cmdlet, which is new to PowerShell 4.0 (though you can use the underlying .NET classes to accomplish something similar in older versions of PowerShell, if needed.)

Get-Process | 
ForEach-Object { 
$proc = $_ 
$counter = Get-Counter -Counter "\Process($($proc.Name))\Working Set - Private" 

$pws = 'Unknown' 
if ($null -ne $counter) 

  $pws = $counter.CounterSamples[0].CookedValue 


$proc | Add-Member -NotePropertyName 'PrivateWorkingSetSize' -NotePropertyValue $pws -PassThru 
} | Format-Table ProcessName,Id,PrivateWorkingSetSize


This method is not fast.

From: https://social.technet.microsoft.com/Forums/windowsserver/en-US/46665ab7-0a22-41b5-968c-b3942e9b4a4c/getprocess-differs-from-task-manager-in-memory-usage?forum=winserverpowershell

In the end, I preferred this version that worked on Server 2008 to highlight the top 5 processes by memory usage and also account for total memory usage.


$totalmem = 0 

$topslots = 5 
$x = 0 

$topMemProcesses = ""

Get-Process | Sort-Object WS -Descending | 
ForEach-Object {
    $proc = $_

    $counter = Get-Counter -Counter "\Process($($proc.Name))\Working Set - Private" -ErrorAction SilentlyContinue

    $pws = 0
    $alert = ''
    if ($null -ne $counter)
    {
        $pws = $counter.CounterSamples[0].CookedValue
    } else { 
        $alert = 'Unknown or Already Terminated'    
    }

    # Add-Member -InputObject $proc -Name 'PrivateWorkingSetSize' -Value $pws -PassThru
    
    $ProcessName = $proc.Name
    $ProcessId = $proc.Id
    
    
    $totalmem = $totalmem + $pws

    if ( $x -lt $topslots ) { 
        $pwsMB = [int]($pws/1024/102.4)
        $pwsMB = $pwsMB / 10
        $topMemProcesses = $topMemProcesses + "$ProcessName,$ProcessId,$pwsMB,$alert`r`n"
        $x++ 
    }
} 

write-host  $topMemProcesses 
write-host  ( $totalmem / 1024 / 1024 / 1024 ) 
#|
# Format-Table ProcessName,Id,PrivateWorkingSetSize

Comments

Popular posts from this blog

Fixing a https Cert in Windows

 I renewed a https cert today in Windows and had problems with the new Cert sticking in Windows It would add fine, without error, but would disappear when the IIS Server Certificates screen would refresh.  Open the Certificates in MMC (Local Machine) and inspecting the Web Hosting gave a clue, the new certificate was there, but with a key - the private key was missing.  Could be because the original certificate was created on a completely different machine and imported to this new server.  At any rate, a simple certutil command fixed it .  A tip I received from  SSL disappears from the certificate list on Windows server - SSL Certificates - Namecheap.com Key steps are:  Double-click the certificate and go to  Details  tab. In certificate details locate the  Serial Number  field, click on it and copy its value. Open Command Prompt, pressing  Win+R  and typing  cmd , then click  OK In the command prompt type: ...

Ever need to reset a password in Bonobo Git Server ?

So, you've forgotten your password to bonobo git. Step 1: Get access to the sqlite file, probably called something like  Bonobo.Git.Server.db, sitting in the "wwwroot\Bonobo.Git.Server\App_Data" directory. Step 2: Using another tool, generate an md5 hash of your new desired password (as far as I know, sqlite does not have md5 capability) Step 3: Back in sqlite, using SQL, update the relevant user record, something like update User set Password = UPPER( 'thenewMD5hash') where Username = 'admin' ; Step 4: That's it, you are done, log in with your newly found password.

How to Sign a C# .Net WPF Application

  To sign a C# WPF .NET 6 application, you can follow these steps: Generate a strong name key pair: Open the Developer Command Prompt for Visual Studio (search for it in the Start menu). Navigate to the project directory using the cd command. Run the following command to generate a strong name key pair: Copy code sn -k keypair.snk Configure your project to use the strong name key pair: In Visual Studio (prior to 2022), open your WPF project. Right-click on the project in the Solution Explorer and select "Properties." In the project properties, go to the "Signing" tab. Check the "Sign the assembly" checkbox. Click the "..." button next to the "Choose a strong name key file" field and browse to select the keypair.snk file you generated in the previous step. Click "OK" to save the changes. Configure the project for ClickOnce deployment (optional but recommended for distributing your application): In the project properties, go t...