PowerShell에는 로컬 또는 원격 컴퓨터에서 프로세스를 관리하는 많은 기능이 있습니다. PowerShell을 사용하여 실행 중인 프로세스 목록을 가져오고, 중단된 프로세스를 일시 중단하고, Windows 제목으로 프로세스를 찾고, 숨김 또는 대화형 모드에서 새 프로세스를 실행하는 등의 작업을 수행할 수 있습니다.
다음과 같이 Windows 10에서 사용 가능한 프로세스 관리 cmdlet 목록을 표시할 수 있습니다.
Get-Command –Noun Process
- 가져오기 프로세스 – 실행 중인 Windows 프로세스 목록을 가져옵니다.
- 시작-프로세스 – 프로세스/프로그램 시작,
- 프로세스 중지 – 프로세스를 강제로 중지(종료)합니다.
- 디버그 프로세스 – 프로세스 디버그
- 대기 프로세스 – 프로세스가 끝날 때까지 기다리세요.
Get-Process:실행 중인 프로세스 목록 가져오기
Get-Process cmdlet은 로컬 컴퓨터에서 실행 중인 프로세스 목록을 표시합니다.
기본적으로 실행 중인 프로세스의 다음 속성이 표시됩니다.
- 핸들 – 이 프로세스에 의해 열린 입출력 파일 설명자(핸들)의 수
- NPM(K) – 비페이징 메모리(비페이징 풀)입니다. 이것은 디스크에서 페이징되지 않는 프로세스 데이터의 크기(KB)입니다.
- PM(K) – 페이징될 수 있는 프로세스 메모리의 크기,
- WS(K) – 프로세스(작업 집합)에서 사용하는 물리적 메모리의 크기(KB),
- CPU – 프로세스가 사용하는 CPU 시간(모든 CPU의 시간이 계산됨),
- 신분증 – 고유한 프로세스 식별자
- SI (세션 ID) – 프로세스 세션 ID입니다(0은 모든 세션에 대해 실행됨, 1-첫 번째 로그온한 사용자에 대해 실행, 2 — 두 번째 로그온한 사용자에 대해 실행 등).
- 프로세스 이름
여러 프로세스의 모든 속성을 나열하려면:
Get-Process cmd,excel,notep* | Format-List *
특정 프로세스 속성만 표시할 수 있습니다(예:이름(ProcessName
), 시작 시간(StartTime
), 프로세스 창 제목(MainWindowTitle
), 실행 파일 이름(Path
) 및 개발자 이름(Company
):
Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft
GUI를 사용하여 실행 중인 사용자 프로세스 목록을 표시하려면(백그라운드 및 시스템 프로세스는 표시되지 않음):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle
IncludeUserName 사용 옵션에서 프로세스를 시작한 사용자 이름(소유자)을 표시할 수 있습니다.
Get-Process -Name winword -IncludeUserName
Where-Object
사용 , 몇 가지 기준에 따라 프로세스를 선택할 수 있습니다. 예를 들어 300MB 이상의 RAM을 사용하는 모든 프로세스를 표시하고 메모리 사용량을 기준으로 내림차순으로 정렬하고 메모리 크기를 KB 대신 MB로 표시해 보겠습니다.
Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
앞에서 말했듯이 CPU 매개 변수의 Get-Process cmdlet에는 특정 프로세스에서 사용하는 프로세서 시간(초)이 포함됩니다. 프로세스에서 사용하는 CPU의 백분율을 표시하려면(작업 관리자와 유사) 다음 기능을 사용하십시오.
function Get-CPUUsagePercent
{
$CPUPercent = @{
Name = 'CPUPercent'
Expression = {
$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
}
}
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
}
Get-CPUUsagePercent
응답하지 않는 중단된 프로세스를 찾으려면 다음 명령을 실행하십시오.
Get-Process | where-object {$_.Responding -eq $false}
Start-Process, Stop-Process:PowerShell로 프로세스를 시작하거나 중지하는 방법
PowerShell을 사용하여 새 프로세스를 시작하려면 다음 명령이 사용됩니다.
Start-Process -FilePath notepad
$env:path
에 실행 파일이 없는 경우 환경 변수, 파일의 전체 경로 지정:
Start-Process -FilePath 'C:\distr\app.exe'
프로그램을 실행하고 인수를 전달할 수 있습니다.
Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"
WindowStyle 사용 옵션에서 프로세스 창 시작 모드(일반, 최소화, 최대화, 숨김)를 설정할 수 있습니다. 예를 들어, 최대화된 창에서 프로그램을 실행하고 프로세스가 끝날 때까지 기다리려면 다음 명령을 실행하십시오.
Start-Process -FilePath tracert -ArgumentList "10.1.56.21" –wait -windowstyle Maximized
Stop-Process cmdlet을 사용하면 모든 프로세스를 중지할 수 있습니다. 예를 들어, 실행 중인 모든 메모장 프로세스를 닫으려면:
Stop-Process -Name notepad
기본적으로 프로세스 종료를 확인하는 메시지는 표시되지 않습니다. 지정된 기준을 충족하는 모든 프로세스가 중지됩니다. 중지 프로세스를 확인할 수 있으려면 –Confirm을 추가하세요. 옵션:
Stop-Process -Name notepad.exe -Confirm
또한 다음과 같이 프로세스를 종료할 수 있습니다.
(Get-Process -Name cmd).Kill()
PowerShell에서 Windows 프로세스 관리자에 응답하지 않는 모든 앱을 강제로 중지할 수 있습니다.
Get-Process | where-object {$_.Responding -eq $false}| Stop-Process
PowerShell을 사용하여 원격 컴퓨터에서 프로세스 관리
ComputerName
을(를) 사용할 수 있습니다. 원격 컴퓨터의 프로세스를 관리하기 위한 Get-Process cmdlet 옵션(WinRM이 활성화되고 구성되어야 함).
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName
Invoke-Command
에서 사용할 수 있는 PowerShell 원격 기능 및 Enter-PSSession
cmdlet은 여기에서 다루지 않습니다. 원격 컴퓨터에서 프로세스를 종료하려는 경우 Stop-Process cmdlet에는 –ComputerName 매개 변수가 없습니다. 원격 컴퓨터에서 프로세스를 중지하려면 다음 PowerShell 코드를 사용할 수 있습니다.
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess