Hostwinds 블로그


PowerShell의 힘 나타난 그림

PowerShell의 힘

으로: Karlito Bonnevie  /  4 월 29, 2022


기존 Windows 명령 줄 인터페이스 (CLI)의 명령을 Linux CLI의 명령과 비교할 때는 실제로 비교할 수 없습니다.전통적인 Windows Cli (CD, Dir, Copy, Del 등)에는 awk, sed, head, tail, tsort, uniq, split 등만큼 강력한 것이 없습니다.CLI는 텍스트 스트림 처리가 종종 원하는 결과를 얻기 위해 필요하다는 것입니다.예를 들어 Linux 시스템의 IPv6 주소를 원합니다.한 가지 방법은 다음과 같습니다.

ifconfig | grep inet6 | head -1 | awk '{print $2}'

GREP 명령은 "inet6"을 포함하는 여러 줄을 잡고, 헤드 명령은이 중 첫 번째를 잡고, AWK는 라인에서 두 번째 필드 (즉, 두 번째 문자열)를 인쇄하여 원하는 IPv6 값을 생성합니다.정말 매끄럽지 만 우리는 텍스트 스트림을 처리하고 있습니다. 이는 신속하게 복잡해질 수 있습니다.예를 들어 다음을 수행하고 싶다고 가정 해보십시오.

  • 그러면 모든 시스템 프로세스를 나열하십시오
  • 핸들 카운트별로 내림차순으로 목록을 정렬 한 다음 CPU 사용 시간을 정렬 한 다음
  • 프로세스 이름, 핸들 카운트, CPU 시간 및 전체 프로세스 파일 경로를 표시하는 테이블로 목록을 보시겠습니까?

이 작업을 수행하는 PowerShell은 매우 간단합니다.

Get-Process | Sort-Object -Property HandleCount, CPU | Format-Table -Property Name, HandleCount, CPU, Path

그리고 여기 출력의 스 니펫이 있습니다.알 수 있듯이 테이블은 핸들 카운트로 정렬 된 다음 CPU 시간으로 정렬됩니다 (18 개의 핸들을 사용하여 세 가지 프로세스의 하강 CPU 시간에 주목하십시오).

Name                    HandleCount        CPU Path
----                    -----------        --- ----
chrome                          165     375.13 /opt/google/chrome/chrome
pwsh                            128       81.1 /opt/microsoft/powershell/7/pwsh
chrome                           52     216.36 /opt/google/chrome/chrome
chrome                           44     151.13 /opt/google/chrome/chrome
Xvnc                             33     254.66 /usr/bin/Xvnc
dbus-daemon                      31       0.23 /usr/bin/dbus-daemon
chrome                           23       0.45 /opt/google/chrome/chrome
xfce4-terminal                   18      16.39 /usr/bin/xfce4-terminal
xfce4-session                    18       0.12 /usr/bin/xfce4-session
xrdp-chansrv                     18       0.05 /usr/sbin/xrdp-chansrv
xfdesktop                        15       4.39 /usr/bin/xfdesktop
xfce4-power-manager              15       0.39 /usr/bin/xfce4-power-manager
chrome                           15       0.03 /opt/google/chrome/chrome

이제 위 외에도 핸들 카운트별로 그룹화하고 싶습니까?훨씬 쉬워 질 수는 없습니다. -groupby handlecount 인수를 형식 테이블 CMDLET에 추가하십시오 (예, 이것이 그들이 불리는 것입니다).

Get-Process | Sort-Object -Property HandleCount, CPU | Format-Table -Property Name, HandleCount, CPU, Path -GroupBy HandleCount

다음은 해당 출력의 스 니펫입니다.

   HandleCount: 18

Name           HandleCount   CPU Path
----           -----------   --- ----
xfce4-terminal          18 16.68 /usr/bin/xfce4-terminal
xfce4-session           18  0.12 /usr/bin/xfce4-session
xrdp-chansrv            18  0.05 /usr/sbin/xrdp-chansrv

   HandleCount: 15

Name                HandleCount  CPU Path
----                -----------  --- ----
xfdesktop                    15 4.43 /usr/bin/xfdesktop
xfce4-power-manager          15  0.4 /usr/bin/xfce4-power-manager
chrome                       15 0.03 /opt/google/chrome/chrome

이러한 PowerShell 예제에는 텍스트 스트림 처리의 힌트가 없습니다.PowerShell은 데이터 스트림이 아닌 CMDLET 사이에 객체 (다양한 속성이있는)를 통과하기 때문입니다.정말로 원한다면 Select-String CMDLET를 사용하여 텍스트 스트림을 여전히 조작 할 수 있지만 그렇게 할 필요는 없습니다.그건 그렇고, 마지막 예에서, 당신은 모든 get-process 객체 속성으로 그룹화 할 수 있으며 get-process를 사용할 수 있습니다 |어떤 속성을 사용할 수 있는지 빠르게 확인하십시오.

흥미로운 소리?시작하는 방법이 궁금하십니까?그럼 참조하십시오 Linux와 함께 PowerShell 사용.

작성자 Karlito Bonnevie  /  4 월 29, 2022