이 샘플은 Windows PowerShell 5.1에만 적용됩니다.
PowerShell의 프로세스 cmdlet을 사용하여 PowerShell에서 로컬 및 원격 프로세스를 관리할 수 있습니다.
프로세스 가져오기
로컬 컴퓨터에서 실행되는 프로세스를 얻으려면 매개 변수 없이 Get-Process
실행합니다.
프로세스 이름 또는 프로세스 ID를 지정하여 특정 프로세스를 가져올 수 있습니다. 다음 명령은 유휴 프로세스를 가져옵니다.
Get-Process -Id 0
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle
cmdlet이 어떤 상황에서는 데이터를 반환하지 않는 것이 정상이지만 ProcessIdGet-Process
의해 프로세스를 지정하면 일반적인 의도는 알려진 실행 중인 프로세스를 검색하기 때문에 일치하는 항목을 찾지 못하면 오류가 발생합니다. 해당 ID를 사용하는 프로세스가 없는 경우 ID가 잘못되었거나 관심 프로세스가 이미 종료되었을 수 있습니다.
Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process <<<< -Id 99
Get-Process
cmdlet의 Name 매개 변수를 사용하여 프로세스 이름에 따라 프로세스의 하위 집합을 지정할 수 있습니다. Name 매개 변수는 쉼표로 구분된 목록에서 여러 이름을 사용할 수 있으며 와일드카드 사용을 지원하므로 이름 패턴을 입력할 수 있습니다.
예를 들어 다음 명령은 이름이 "ex"로 시작하는 프로세스를 가져옵니다.
Get-Process -Name ex*
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
234 7 5572 12484 134 2.98 1684 EXCEL
555 15 34500 12384 134 105.25 728 explorer
.NET System.Diagnostics.Process 클래스는 PowerShell 프로세스의 기초이므로 System.Diagnostics.Process사용하는 몇 가지 규칙을 따릅니다. 이러한 규칙 중 하나는 실행 파일의 프로세스 이름에 실행 파일 이름의 끝에 .exe
포함하지 않는다는 것입니다.
Get-Process
Name 매개 변수에 대한 여러 값도 허용합니다.
Get-Process -Name exp*,power*
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
540 15 35172 48148 141 88.44 408 explorer
605 9 30668 29800 155 7.11 3052 powershell
Get-Process
ComputerName 매개 변수를 사용하여 원격 컴퓨터에서 프로세스를 가져올 수 있습니다. 예를 들어 다음 명령은 로컬 컴퓨터("localhost"로 표시됨)와 두 개의 원격 컴퓨터에서 PowerShell 프로세스를 가져옵니다.
Get-Process -Name powershell -ComputerName localhost, Server01, Server02
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
258 8 29772 38636 130 3700 powershell
398 24 75988 76800 572 5816 powershell
605 9 30668 29800 155 7.11 3052 powershell
컴퓨터 이름은 이 디스플레이에서 명확하게 표시되지 않지만 Get-Process
반환하는 프로세스 개체의 MachineName 속성에 저장됩니다. 다음 명령은 Format-Table
cmdlet을 사용하여 프로세스 개체의 프로세스 Id, ProcessName 및 MachineName(ComputerName) 속성을 표시합니다.
Get-Process -Name powershell -ComputerName localhost, Server01, Server01 |
Format-Table -Property Id, ProcessName, MachineName
Id ProcessName MachineName
-- ----------- -----------
3700 powershell Server01
3052 powershell Server02
5816 powershell localhost
이 더 복잡한 명령은 표준 Get-Process
표시에 MachineName 속성을 추가합니다.
Get-Process powershell -ComputerName localhost, Server01, Server02 |
Format-Table -Property Handles,
@{Label="NPM(K)";Expression={[int]($_.NPM/1024)}},
@{Label="PM(K)";Expression={[int]($_.PM/1024)}},
@{Label="WS(K)";Expression={[int]($_.WS/1024)}},
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}},
@{Label="CPU(s)";Expression={if ($_.CPU -ne $()){$_.CPU.ToString("N")}}},
Id, ProcessName, MachineName -Auto
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName
------- ------ ----- ----- ----- ------ -- ----------- -----------
258 8 29772 38636 130 3700 powershell Server01
398 24 75988 76800 572 5816 powershell localhost
605 9 30668 29800 155 7.11 3052 powershell Server02
프로세스 중지
PowerShell은 프로세스를 나열할 수 있는 유연성을 제공하지만 프로세스를 중지하는 것은 어떨까요?
Stop-Process
cmdlet은 이름 또는 ID 사용하여 중지할 프로세스를 지정합니다. 프로세스를 중지하는 기능은 사용 권한에 따라 달라집니다. 일부 프로세스는 중지할 수 없습니다. 예를 들어 유휴 프로세스를 중지하려고 하면 오류가 발생합니다.
Stop-Process -Name Idle
Stop-Process : Process 'Idle (0)' cannot be stopped due to the following error:
Access is denied
At line:1 char:13
+ Stop-Process <<<< -Name Idle
Confirm 매개 변수를 사용하여 강제로 메시지를 표시할 수도 있습니다. 이 매개 변수는 프로세스 이름을 지정할 때 와일드카드를 사용하는 경우 중지하지 않으려는 일부 프로세스를 실수로 일치시킬 수 있으므로 특히 유용합니다.
Stop-Process -Name t*,e* -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "explorer (408)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):n
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "taskmgr (4072)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):n
일부 개체 필터링 cmdlet을 사용하면 복잡한 프로세스 조작이 가능합니다. Process 개체에는 더 이상 응답하지 않을 때 true인 Responding 속성이 있으므로 다음 명령을 사용하여 모든 비응답 애플리케이션을 중지할 수 있습니다.
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
다른 상황에서도 동일한 방법을 사용할 수 있습니다. 예를 들어 사용자가 다른 애플리케이션을 시작할 때 보조 알림 영역 애플리케이션이 자동으로 실행한다고 가정합니다. 터미널 서비스 세션에서는 제대로 작동하지 않지만 실제 컴퓨터 콘솔에서 실행되는 세션에서 계속 유지하려고 할 수 있습니다. 물리적 컴퓨터 데스크톱에 연결된 세션에는 항상 세션 ID가 0이므로 sessionId Where-Object
및 프로세스를 사용하여 다른 세션에 있는 프로세스의 모든 인스턴스를 중지할 수 있습니다.
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process
Stop-Process
cmdlet에는 ComputerName 매개 변수가 없습니다. 따라서 원격 컴퓨터에서 프로세스 중지 명령을 실행하려면 Invoke-Command
cmdlet을 사용해야 합니다. 예를 들어 Server01 원격 컴퓨터에서 PowerShell 프로세스를 중지하려면 다음을 입력합니다.
Invoke-Command -ComputerName Server01 {Stop-Process PowerShell}
다른 모든 PowerShell 세션 중지
현재 세션이 아닌 실행 중인 모든 PowerShell 세션을 중지하는 것이 유용할 수 있습니다. 세션이 너무 많은 리소스를 사용 중이거나 액세스할 수 없는 경우(원격으로 또는 다른 데스크톱 세션에서 실행 중일 수 있음) 직접 중지하지 못할 수 있습니다. 그러나 실행 중인 모든 세션을 중지하려고 하면 현재 세션이 대신 종료될 수 있습니다.
각 PowerShell 세션에는 Windows PowerShell 프로세스의 ID 포함하는 환경 변수 PID가 있습니다. 각 세션의 ID에 대해 $PID 확인하고 다른 ID가 있는 Windows PowerShell 세션만 종료할 수 있습니다. 다음 파이프라인 명령은 이 작업을 수행하고 종료된 세션 목록을 반환합니다(PassThru 매개 변수 사용으로 인해).
Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} |
Stop-Process -PassThru
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
334 9 23348 29136 143 1.03 388 powershell
304 9 23152 29040 143 1.03 632 powershell
302 9 20916 26804 143 1.03 1116 powershell
335 9 25656 31412 143 1.09 3452 powershell
303 9 23156 29044 143 1.05 3608 powershell
287 9 21044 26928 143 1.02 3672 powershell
프로세스 시작, 디버깅 및 대기
PowerShell에는 명령을 실행하기 전에 시작(또는 다시 시작), 프로세스 디버그 및 프로세스가 완료될 때까지 기다리는 cmdlet도 함께 제공됩니다. 이러한 cmdlet에 대한 자세한 내용은 각 cmdlet에 대한 cmdlet 도움말 항목을 참조하세요.
참고하십시오
PowerShell