2017-10-27 32 views
-4

私たちは240のVMの環境を持っています。クライアントはICA/RDP接続を使用してこれらのサーバーに接続しています。時には、ユーザーがメモリを使いこなして、その特定のサーバーの速度低下とクラッシュを引き起こしていることがあります。ユーザーあたりのメモリ使用量を計算するPowerShellスクリプト

サーバーに接続されている各ユーザーのメモリ使用量を計算するPowerShellスクリプトが必要です。私は時間と時間をかけて別のスクリプトを探して試してみましたが、成功しませんでした。

Get-WmiObject Win32_ProcessGetOwner()を使用して、私に働く設定値を与えるスクリプトがあります。計算は正しくありません。

私が必要とするのは、タスクマネージャの[ユーザー]タブに表示される形式です。私が必要とする主な情報はメモリの使用量ですが、ユーザーごとにディスクとCPUの使用量を持たせるのも良いでしょう。

ここに私が使用しているコードがあります。このスクリプトを1〜2分後に実行すると、$ .GetOwner()が見つからないというエラーが返され、別の行には他のものよりもメモリを利用するユーザ名が与えられますが、私はそれをTaskManagerユーザーのタブと比較します。

$h = @{} 
get-wmiobject win32_process | foreach { 
    $u = $_.getowner().user; 
    if ($u -ne $null) 
    { 
     if (!$h.ContainsKey($u) ) 
     { 
      $h.add($u, $_.WS); 
     } 
     else 
     { 
      $h.item($u) = $h.item($u) + $_.WS; 
     } 
    } 
} 
$h.GetEnumerator() | sort value -desc 
+3

は私たちに、コードを表示し、計算が間違っている方法について説明します。 – notjustme

+0

あなたの返信ありがとう、私のポストのコードを確認してください。 – Boba

答えて

0

これを試してみてください。

get-wmiobject win32_process | 
    select @{N='User';E={$_.getowner().user}}, WorkingSetSize | 
     group user | 
      select Name, @{N='CPU';E={($_.Group.WorkingSetSize | Measure-Object -Sum).Sum/1Mb }} 
+0

ありがとうEsperanto57。これはうまくいきますし、1人のユーザーにとって最高のメモリ使用量を示すために少し変更しました。 – Boba

0
gwmi win32_process | 
    select @{N='User';E={$_.getowner().user}},WorkingSetSize | 
     group User | select Name,@{N='RAM';E={[math]::Round(($_.Group.WorkingSetSize | Measure-Object -Sum).Sum/1MB) }} | 
      sort RAM -Descending | select -first 1 ; 
関連する問題