Geek School PowerShell의 컬렉션 작업
PowerShell은 .Net Framework를 기반으로하고 WMI 및 CIM과 같은 다양한 기술을 통합하므로 항상 동일한 작업을 수행하는 방법이 하나 이상 있습니다. 우리가 작업을 수행하는 가장 좋은 방법을 선택하는 방법을 배울 수있는이 짧은 게시물을 위해 우리와 함께하십시오..
시리즈의 이전 기사를 읽으십시오.
- PowerShell을 사용하여 Windows를 자동화하는 방법 배우기
- PowerShell에서 Cmdlet을 사용하는 방법 학습
- PowerShell에서 개체를 사용하는 방법 학습
- PowerShell에서 형식 지정, 필터링 및 비교 학습
- PowerShell에서 Remoting 사용 방법 배우기
- PowerShell을 사용하여 컴퓨터 정보 가져 오기
그리고 일주일 내내 나머지 시리즈에 계속해서 관심을 가져주세요..
일괄 처리 Cmdlet 사용
이 시리즈의 앞부분에서 파이프 라인을 소개 할 때 한 cmdlet이 출력하는 개체를 가져 와서 다음과 같은 방법을 사용하여 다른 cmdlet의 입력으로 전달할 수있는 방법을 보여줍니다.
Get-Process -Name notepad | 중지 프로세스
이렇게하면 "메모장"이라는 이름의 모든 프로세스가 종료됩니다. 하지만 PowerShell이 어떻게 하나의 명령으로 메모장의 모든 인스턴스를 죽일 수 있는지 궁금 할 것입니다. 대답은 Stop-Process cmdlet의 도움으로 해결됩니다..
Stop-Process 도움말
구문 섹션에서 마지막 코드 행을 보면 InputObject 매개 변수가 Process [] 유형의 객체를 허용한다는 것을 알 수 있습니다. 유형을 볼 때마다 매개 변수가 허용한다는 것을 의미하는 두 개의 대괄호 하나 이상 이전 유형의 이 경우, 하나 이상의 프로세스 오브젝트를 승인합니다. 기술적으로 InputObject cmdlet은 프로세스를 허용한다고합니다. 정렬. 이 방식으로 일괄 작업을 지원하는 cmdlet을 사용할 때마다이 작업을 사용하십시오. 이것은 1 번 선택입니다..
WMI 사용
WMI는 Microsoft HQ에서 제공 할 수있는 최고의 기술이 아니지만 개체 컬렉션을 사용하는 방법 목록에서 2 위를 차지합니다. 다음과 같이 Win32_Process 클래스에서 실행중인 프로세스 목록을 쉽게 얻을 수 있습니다.
Get-WmiObject -Class Win32_Process
WMI 쿼리가 고유 한 종류의 개체를 반환하기 때문에 프로세스를 중지 할 수있는 메서드를 찾아야하므로 파이프를 Get-Member로 가져올 수 있습니다.
Get-WmiObject -Class Win32_Process | Get-Member
멈추는 가장 가까운 것은 종료 메소드입니다. 따라서 반드시 종료 메소드가 있어야합니다. WMI 개체에서 메서드를 호출하려면 Invoke-WmiMethod에 파이프하고 메서드 이름을 지정하기 만하면됩니다.
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'"| Invoke-WmiMethod -Name 종료
좋아, 그건 속임수 였어. WMI에서 ReturnValue가 0이 될 때마다 명령이 성공적으로 실행되었음을 기억하십시오..
열거
다른 두 가지 방법을 사용하지 못하면 여러 개체에 무언가를해야만하는 경우 전체 개체를 열거하고 각 개체에 대해 작업을 수행 할 수 있습니다. 먼저 단일 프로세스를 중지하는 데 사용할 방법을 찾아야합니다..
Get-Process | 구성원 가져 오기 - 구성원 형식 메서드
우리는 Kill 메서드를 사용하여 ForEach-Object에 파이프를 뚫어서 모두 죽일 수있는 것처럼 보입니다..
Get-Process -Name notepad | ForEach-Object -Process $ _. Kill ()
여기서 Get-Process가 반환 한 모든 프로세스 개체를 가져 와서 ForEach-Object cmdlet에 전달했습니다. Where-Object cmdlet과 매우 유사하게 우리는 Kill () 메서드를 호출 할 수있는 $ _를 사용하여 파이프 라인의 각 개체를 나타 냈습니다. 위에서 말한 것과 다했듯이 컬렉션을 열거하는 것은 위의 방법보다 훨씬 느리며 마지막 결과로만 사용해야합니다..
개요
선택 1
Get-Process -Name notepad | 중지 프로세스
선택 2
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'"| Invoke-WmiMethod -Name 종료
선택 3
Get-Process -Name notepad | ForEach-Object -Process $ _. Kill ()
이번에는 PowerShell 재미를 위해 다음 주에 다시 만나십시오..