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

ตรวจสอบว่า PowerShell กำลังทำงานอยู่หรือไม่ [4 วิธี]


ใช้ รับกระบวนการ Cmdlet

ใช้ cmdlet Get-Process เพื่อตรวจสอบว่ากระบวนการทำงานใน PowerShell หรือไม่ ด้วย Get-Process cmdlet ทำให้เราสามารถแสดงรายการกระบวนการที่ทำงานบนระบบได้

ใช้ Get-Process cmdlet:

Get-Process

เอาท์พุต :

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    470      26    19184      32148       0.38   4464   7 ApplicationFrameHost
    618      44    28960       1496       0.97  10964   7 CalculatorApp
    404      21    93572     146764      11.17   1800   7 chrome
    247      18    19176      32068       0.11   1816   7 chrome
    139       7     1576       8944       0.08  14540   7 CompPkgSrv
    166      11     6956      10184       0.19  11416   7 conhost
 ....

เราสามารถสังเกตได้ว่า Get-Process cmdlet ดึงข้อมูลทั้งหมดของกระบวนการที่ทำงานอยู่บนระบบของฉันในปัจจุบัน จากรายการข้างต้น เราต้องการเพียง ProcessName; มันแสดงชื่อของกระบวนการ หากคุณต้องการทราบเกี่ยวกับคอลัมน์อื่นๆ โปรดดูเอกสารนี้

ผลลัพธ์ cmdlet Get-Process จะเหมือนกันสำหรับระบบปฏิบัติการ Linux และ Windows

ตอนนี้เรามาดูรายละเอียดเพิ่มเติมกันดีกว่า นี่เป็นวิธีหนึ่งในการดูรายการกระบวนการที่กำลังทำงานอยู่ทั้งหมด มีหลายวิธีในการตรวจสอบว่ากระบวนการใดกำลังทำงานอยู่ใน PowerShell หรือไม่ เมื่อระบุกระบวนการแล้ว ก็สามารถดำเนินการต่างๆ ได้

พิจารณาสถานการณ์ที่คุณต้องการตรวจสอบว่า chrome กำลังทำงานอยู่ในระบบของคุณหรือไม่ ถ้าใช่ ให้แสดงข้อความ "Chrome is running" บนระบบ มิฉะนั้น ให้แสดง "Chrome ไม่ทำงาน"

ใช้ Get-Process cmdlet:

#Check if a process named "chrome" is running
if (Get-Process -Name chrome -ErrorAction SilentlyContinue) {
    Write-Host "Chrome is running."
} else {
    Write-Host "Chrome is not running."
}

เอาท์พุต :

Chrome is running.

ในตัวอย่างนี้ Get-Process cmdlet ใช้กับพารามิเตอร์ -Name เพื่อระบุชื่องานซึ่งตั้งค่าเป็น chrome เพื่อตรวจสอบ สถานะว่ากำลังทำงานอยู่หรือไม่ แน่นอน คุณสามารถแทนที่ chrome ด้วยชื่อกระบวนการที่คุณต้องการตรวจสอบได้ ในที่นี้ พารามิเตอร์ -ErrorAction SilentlyContinue เป็นทางเลือก มันถูกใช้เพื่อหลีกเลี่ยงข้อผิดพลาดจากการแสดงหากกระบวนการที่กำหนดไม่ได้ทำงานอยู่

ตามค่าเริ่มต้น นามแฝง gps หรือ ps จะพร้อมใช้งานเพื่อดำเนินการ cmdlet Get-Process อย่างไรก็ตาม ใน PowerShell 7 ซึ่งเป็นข้ามแพลตฟอร์มและทำงานบน Linux คำสั่ง ps จะขัดแย้งกับคำสั่ง Linux ในตัว ดังนั้นคำสั่ง ps จะไม่ทำงานบน Linux แต่เป็นนามแฝง gps

การใช้คำสั่ง Tasklist กับ Where-Object Cmdlet

ใช้คำสั่ง รายการงาน พร้อมด้วย Where-Object cmdlet เพื่อตรวจสอบว่ากระบวนการทำงานใน PowerShell หรือไม่

ใช้คำสั่ง Tasklist กับ Where-Object cmdlet:

#Check if a process named "notepad" is running
if (Tasklist | Where-Object { $_.ProcessName -eq "notepad" }) {
    Write-Host "Notepad is running."
} else {
    Write-Host "Notepad is not running."
}

เอาท์พุต :

Notepad is running.

ในตัวอย่างนี้ คำสั่ง Tasklist จะดึงรายการกระบวนการที่ทำงานบนระบบ ซึ่งจะไปป์เอาต์พุตด้วย Where-Object cmdlet

ใน PowerShell นั้น Where-Object cmdlet จะกรองวัตถุตามเงื่อนไขที่ระบุ ในกรณีนี้ จะกรองเอาต์พุต รายการงาน และค้นหากระบวนการที่มีคุณสมบัติ ProcessName เท่ากับ notepad

สังเกตในตัวอย่างข้างต้นที่พบกระบวนการและข้อความ "Notepad is running." ปรากฏขึ้นบนหน้าจอ

การใช้ Get-WmiObject Cmdlet กับคลาส Win32_Process

ใช้ Get-WmiObject cmdlet กับคลาส Win32_Process เพื่อตรวจสอบว่ากระบวนการทำงานใน PowerShell หรือไม่

ใช้ Get-WmiObject กับ Win32_Process:

#Check if a process named "firefox" is running
if (Get-WmiObject Win32_Process | Where-Object {$_.Name -eq "firefox.exe"}) {
    Write-Host "Firefox is running."
} else {
    Write-Host "Firefox is not running."
}

เอาท์พุต :

Firefox is not running.

รหัส PowerShell ด้านบนใช้ Get-WmiObject cmdlet เพื่อดึงข้อมูลเกี่ยวกับกระบวนการที่ทำงานอยู่โดยใช้คลาส Win32_Process WMI (Windows Management Instrumentation) คลาส Win32_Process แสดงถึงกระบวนการบนระบบปฏิบัติการ Windows จากนั้น Where-Object cmdlet จะกรองคอลเลกชันตามคุณสมบัติ Name เพื่อดึงเฉพาะกระบวนการที่มี firefox.exe อยู่ในชื่อเท่านั้น

การใช้ Get-CimInstance Cmdlet กับคลาส Win32_Process

ใช้ Get-CimInstance cmdlet กับคลาส Win32_Process เพื่อตรวจสอบว่ากระบวนการทำงานใน PowerShell หรือไม่

ใช้ Get-CimInstance กับ Win32_Process:

#Check if a process named "GoogleDriveFS" is running
if (Get-CimInstance Win32_Process | Where-Object {$_ -like "*GoogleDriveFS*"}){
    Write-Host "GoogleDriveFS is running."
} else {
    Write-Host "GoogleDriveFS is not running."
}

เอาท์พุต :

GoogleDriveFS is running.

ตัวอย่างนี้คล้ายกับตัวอย่างข้างต้น ในที่นี้ Get-CimInstance cmdlet ใช้กับคลาส Win32_Process เพื่อรับข้อมูลเกี่ยวกับกระบวนการที่กำลังทำงานอยู่ คล้ายกับตัวอย่างข้างต้น cmdlet Where-Object จะกรองรายการกระบวนการที่ทำงานอยู่ตามเงื่อนไขที่กำหนด ในกรณีข้างต้น ระบบจะกรองกระบวนการซึ่งรวมถึง GoogleDriveFS อยู่ในชื่อ

Get-CimInstance cmdlet คล้ายกับ Get-WmiObject cmdlet แต่ใช้โปรโตคอล WS-Man (Web Services for Management) ที่ทันสมัยกว่าในการสื่อสาร ทำให้มีประสิทธิภาพมากขึ้นและช่วยให้สามารถจัดการทรัพยากรข้ามแพลตฟอร์มได้

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