Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell로 Windows 프로세스 관리

PowerShell에는 로컬 또는 원격 컴퓨터에서 프로세스를 관리하는 많은 기능이 있습니다. PowerShell을 사용하여 실행 중인 프로세스 목록을 가져오고, 중단된 프로세스를 일시 중단하고, Windows 제목으로 프로세스를 찾고, 숨김 또는 대화형 모드에서 새 프로세스를 실행하는 등의 작업을 수행할 수 있습니다.

다음과 같이 Windows 10에서 사용 가능한 프로세스 관리 cmdlet 목록을 표시할 수 있습니다.

Get-Command –Noun Process

PowerShell로 Windows 프로세스 관리

  • 가져오기 프로세스 – 실행 중인 Windows 프로세스 목록을 가져옵니다.
  • 시작-프로세스 – 프로세스/프로그램 시작,
  • 프로세스 중지 – 프로세스를 강제로 중지(종료)합니다.
  • 디버그 프로세스 – 프로세스 디버그
  • 대기 프로세스 – 프로세스가 끝날 때까지 기다리세요.

Get-Process:실행 중인 프로세스 목록 가져오기

Get-Process cmdlet은 로컬 컴퓨터에서 실행 중인 프로세스 목록을 표시합니다.

PowerShell로 Windows 프로세스 관리

기본적으로 실행 중인 프로세스의 다음 속성이 표시됩니다.

  • 핸들 – 이 프로세스에 의해 열린 입출력 파일 설명자(핸들)의 수
  • 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

PowerShell로 Windows 프로세스 관리

GUI를 사용하여 실행 중인 사용자 프로세스 목록을 표시하려면(백그라운드 및 시스템 프로세스는 표시되지 않음):

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle

PowerShell로 Windows 프로세스 관리

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

PowerShell로 Windows 프로세스 관리

앞에서 말했듯이 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

PowerShell로 Windows 프로세스 관리

응답하지 않는 중단된 프로세스를 찾으려면 다음 명령을 실행하십시오.

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

PowerShell로 Windows 프로세스 관리

또한 다음과 같이 프로세스를 종료할 수 있습니다.

(Get-Process -Name cmd).Kill()

PowerShell에서 Windows 프로세스 관리자에 응답하지 않는 모든 앱을 강제로 중지할 수 있습니다.

Get-Process | where-object {$_.Responding -eq $false}| Stop-Process

PowerShell을 사용하면 정지되거나 닫힌 프로세스를 자동으로 다시 시작할 수 있습니다.

PowerShell을 사용하여 원격 컴퓨터에서 프로세스 관리

ComputerName을(를) 사용할 수 있습니다. 원격 컴퓨터의 프로세스를 관리하기 위한 Get-Process cmdlet 옵션(WinRM이 활성화되고 구성되어야 함).

Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName

우리는 원격 컴퓨터에서 프로세스를 관리하기 위해 내장된 Get-Process 기능을 다룹니다. Invoke-Command에서 사용할 수 있는 PowerShell 원격 기능 및 Enter-PSSession cmdlet은 여기에서 다루지 않습니다.

원격 컴퓨터에서 프로세스를 종료하려는 경우 Stop-Process cmdlet에는 –ComputerName 매개 변수가 없습니다. 원격 컴퓨터에서 프로세스를 중지하려면 다음 PowerShell 코드를 사용할 수 있습니다.

$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess