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 จะได้รับข้อมูลเกี่ยวกับกระบวนการทั้งหมดในชื่อคอมพิวเตอร์ระยะไกลที่ระบุโดย -
ComputerNameproperty - เรียงลำดับกระบวนการทั้งหมดจากมากไปหาน้อยโดย 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)}}
$processMemoryUsageOutput
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
