ค้นหาเว็บไซต์

PowerShell - รับการใช้หน่วยความจำ


บ่อยครั้งที่ผู้ดูแลระบบ PowerShell ต้องสแกนเซิร์ฟเวอร์ด้วยตนเองเพื่อดูปัญหาด้านประสิทธิภาพการทำงานของเซิร์ฟเวอร์ในเครือข่าย อาจเป็นไปได้เมื่อเซิร์ฟเวอร์ตัวใดตัวหนึ่งไม่ตอบสนองหรือไม่ตอบสนอง และทำให้เกิดปัญหาด้านประสิทธิภาพการทำงานบนเซิร์ฟเวอร์ที่ขึ้นต่อกัน ในสถานการณ์เช่นนี้ การใช้หน่วยความจำข้อมูลสำหรับเซิร์ฟเวอร์จะช่วยระบุเซิร์ฟเวอร์เฉพาะที่มีการใช้งานหน่วยความจำสูงกว่า

การใช้ PowerShell Get-WMIObject เพื่อรับการใช้งานหน่วยความจำบนคอมพิวเตอร์ มีหลายวิธีในการรับการใช้งานหน่วยความจำบนคอมพิวเตอร์เฉพาะที่หรือคอมพิวเตอร์ระยะไกลใน PowerShell

ในบทความนี้ ผมจะอธิบายวิธีรับการใช้หน่วยความจำสำหรับเซิร์ฟเวอร์ที่ใช้ PowerShell

PowerShell รับการใช้หน่วยความจำ

หากต้องการรับการใช้หน่วยความจำ สำหรับกระบวนการ 10 อันดับแรกบนเครื่องคอมพิวเตอร์ที่ใช้ PowerShell ให้ใช้คำสั่งด้านล่าง

PS D:\PowerShell> Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 10 ProcessID,Name,WS

ProcessID Name                      WS
--------- ----                      --
     2628 Memory Compression 909996032
    11984 chrome.exe         470863872
    15728 firefox.exe        356192256
    14444 chrome.exe         332091392
    16680 firefox.exe        315645952
    11812 chrome.exe         311554048
    22072 Teams.exe          242507776
    11256 firefox.exe        221163520
    27052 powershell_ise.exe 213434368
    25612 chrome.exe         211025920

ในสคริปต์ PowerShell ข้างต้น

  • การใช้ Get-WMIObject cmdlet และคลาส WIN32_Process จะได้รับข้อมูลเกี่ยวกับกระบวนการทั้งหมดบนเครื่องคอมพิวเตอร์
  • เรียงลำดับกระบวนการทั้งหมดจากมากไปหาน้อยโดย WS
  • ใช้ Select-Object เพื่อรับ id กระบวนการ 10 รายการแรก ชื่อกระบวนการ และ WS
  • ได้รับการใช้หน่วยความจำของกระบวนการ 10 อันดับแรก

ดังที่คุณเห็นจากข้อมูลข้างต้น เราทราบแล้วว่ากระบวนการใดที่มีการใช้งานหน่วยความจำสูงกว่า แต่เป็นเรื่องยากมากที่จะทราบว่าการใช้หน่วยความจำเป็นเปอร์เซ็นต์ที่กระบวนการเหล่านี้จะใช้งานเป็นเท่าใด

เคล็ดลับเด็ด: วิธีสร้างแหล่งทรัพยากรสำหรับการวัดการใช้หน่วยความจำของ VM!

หากต้องการรับการใช้งานหน่วยความจำทั้งหมดเป็นเปอร์เซ็นต์บนคอมพิวเตอร์ เราจำเป็นต้องทราบว่า TotalVisibleMemorySize และ FreePhysicalMemory พร้อมใช้งานบนระบบเป็นจำนวนเท่าใด

เรียกใช้คำสั่งด้านล่างเพื่อรับการใช้หน่วยความจำกระบวนการเป็น MB บนเครื่องคอมพิวเตอร์

 # Get Computer Object
 $CompObject =  Get-WmiObject -Class WIN32_OperatingSystem
 $Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
 
 Write-Host "Memory usage in Percentage:" $Memory
        
 # Top 5 process Memory Usage (MB)
 $processMemoryUsage = Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
 $processMemoryUsage
 
Output:

Memory usage in Percentage: 78.134547088066

ProcessName        Mem Usage(MB)
-----------        -------------
Memory Compression          1032
chrome.exe                   373
Teams.exe                    370
firefox.exe                  315
chrome.exe                   307

ในสคริปต์ PowerShell ข้างต้น

  • การใช้ Get-WmiObject -Class Win32_OperatingSystem รับวัตถุในเครื่องคอมพิวเตอร์
  • รับข้อมูลเกี่ยวกับ TotalVisibleMemorySize และ FreePhysicalMemory
  • คำนวณและรับการใช้หน่วยความจำเป็นเปอร์เซ็นต์
  • การใช้ Win_32_Process จะทำให้ได้กระบวนการทั้งหมด จัดเรียงตามจากมากไปน้อย
  • การใช้ Select-Object เพื่อรับ การใช้หน่วยความจำกระบวนการ 5 อันดับแรก
  • อ่านและตีความได้ง่ายว่ากระบวนการใดที่มีการใช้หน่วยความจำสูงกว่า

เคล็ดลับเด็ด: วิธีใช้คำสั่งหลายบรรทัดใน PowerShell!

PowerShell รับการใช้หน่วยความจำบนคอมพิวเตอร์ระยะไกล

หากต้องการรับการใช้หน่วยความจำสำหรับกระบวนการ 10 อันดับแรกบนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell ให้ใช้คำสั่งด้านล่าง

PS D:\PowerShell> Get-WmiObject WIN32_PROCESS -ComputerName 'corp-in-18' | Sort-Object -Property ws -Descending | Select-Object -first 5 ProcessID,Name,WS
>>

ProcessID Name                      WS
--------- ----                      --
    12628 Memory Compression 913199104
    10522 chrome.exe         438820864
    17292 Outlook.exe          393461760
    26529 firefox.exe        354979840
    23133 chrome.exe         325996544

ในสคริปต์ PowerShell ข้างต้น

  • การใช้ Get-WMIObject cmdlet และคลาส WIN32_Process จะได้รับข้อมูลเกี่ยวกับกระบวนการทั้งหมดในชื่อคอมพิวเตอร์ระยะไกลที่ระบุโดย -ComputerName property
  • เรียงลำดับกระบวนการทั้งหมดจากมากไปหาน้อยโดย WS
  • ใช้ Select-Object เพื่อรับ 5process id ชื่อกระบวนการและ WS
  • รับการใช้หน่วยความจำของกระบวนการ 5 อันดับแรก

หากต้องการรับการใช้งานหน่วยความจำทั้งหมดเป็นเปอร์เซ็นต์บนคอมพิวเตอร์ระยะไกล ให้รับ TotalVisibleMemorySize และ FreePhysicalMemory ที่มีอยู่ในระบบ

เรียกใช้คำสั่งด้านล่างเพื่อรับการใช้หน่วยความจำกระบวนการเป็น mb บนคอมพิวเตอร์ระยะไกล

 $CompName  = 'corp-in-18'
 # Get Computer Object
 $CompObject =  Get-WmiObject -Class WIN32_OperatingSystem -ComputerName $CompName 
 $Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
 
  Write-Host "Memory usage in Percentage:" $Memory
 # Top 5 process Memory Usage (MB)
 $processMemoryUsage = Get-WmiObject WIN32_PROCESS -ComputerName $CompName  | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
 $processMemoryUsage
Output

Memory usage in Percentage: 77.2521027641826

ProcessName        Mem Usage(MB)
-----------        -------------
Memory Compression          1105
chrome.exe                   358
firefox.exe                  318
chrome.exe                   302
firefox.exe                  290

ในสคริปต์ PowerShell ข้างต้น

  • การใช้ Get-WmiObject cmdlet รับวัตถุคอมพิวเตอร์ระยะไกลที่ระบุโดย ComputerName
  • รับข้อมูลเกี่ยวกับ TotalVisibleMemorySize และ FreePhysicalMemory
  • คำนวณและรับการใช้หน่วยความจำเป็นเปอร์เซ็นต์
  • การใช้ Win_32_Process จะทำให้กระบวนการทั้งหมดบนคอมพิวเตอร์ระยะไกล เรียงลำดับจากมากไปน้อย
  • การใช้ Select-Object เพื่อรับ การใช้หน่วยความจำกระบวนการ 5 อันดับแรก

เคล็ดลับเด็ด: วิธีเพิ่มบรรทัดใหม่ให้กับสตริงหรือตัวแปรใน PowerShell!

บทสรุป

ฉันหวังว่าบทความข้างต้นเพื่อรับการใช้งานหน่วยความจำบนคอมพิวเตอร์เฉพาะที่หรือคอมพิวเตอร์ระยะไกลโดยใช้สคริปต์ PowerShell จะช่วยให้คุณได้รับข้อมูลการใช้หน่วยความจำและดำเนินการกับมัน

การใช้คลาส Win32_Process จะส่งคืนกระบวนการทั้งหมดที่มีอยู่บนคอมพิวเตอร์ที่ระบุโดย ComputerName

คุณสามารถค้นหาหัวข้อเพิ่มเติมเกี่ยวกับคำสั่ง PowerShell Active Directory และพื้นฐาน PowerShell ได้ในหน้าแรกของ ShellGeek

บทความที่เกี่ยวข้อง