Go Pro : PowerShell에 대한 고급 사용자 가이드

Windows 10과 씨름했다면 의심 할 여지없이 PowerShell에 대해 들어 보셨을 것입니다. 최근에 Win7 / 8.1로 멋진 작업을 시도했다면 PowerShell도 나올 것입니다. Windows 명령 줄과 함께 던져진 배치 파일에 수년 동안 의존 한 후, 이제는 더 강력하고 적응력이 뛰어난 무엇인가에 초점을 맞출 때입니다.

PowerShell은 Windows 도구 상자에 엄청나게 추가 된 기능이며 그 엄청난 양을 감안할 때 약간의 두려움을 유발할 수 있습니다. 스크립팅 언어입니까, 명령 쉘입니까, 바닥 왁스입니까? 공급자와 함께 실행하려면 cmdlet을 인스턴스화 된 .Net 클래스와 연결해야합니까? 그리고 모든 지원 문서가 관리자에 대해 이야기하는 이유는 무엇입니까?이 기능을 사용하려면 전문 Windows 관리자 여야합니까?

편하게 하다. PowerShell은 강력하지만 겁을 줄 필요는 없습니다.

다음 가이드는 Windows 명령 또는 두 개를 실행하거나 배치 파일을 jimmied 한 사용자를 대상으로합니다. PowerShell 호기심에서 PowerShell 지원으로의 단계별 변환을 고려하십시오.

1 단계 : 크랭크업

가장 먼저 필요한 것은 PowerShell 자체입니다. Windows 10을 사용하는 경우 최신 버전 인 PowerShell 5가 이미 설치되어 있습니다. (Win10 1 주년 업데이트에는 5.1이 있지만 Fall Update의 5.0과의 차이점은 알 수 없습니다.) Windows 8 및 8.1에는 PowerShell 4가 함께 제공되며, 이는 발을 젖히기에 충분합니다. Windows 7에 PowerShell을 설치하는 것은 어렵지 않지만 특별히주의해야하며 .Net Framework를 별도로 설치해야합니다. JuanPablo Jofre는 MSDN에서 시작할 때 사용하지 않을 도구 외에도 PowerShell을 포함하는 WMF 5.0 (Windows Management Framework)을 설치하는 방법을 자세히 설명합니다.

PowerShell은 두 가지 인터페이스를 제공합니다. 고급 사용자는 ISE (Integrated Scripting Environment)로 알려진 완전한 GUI를 사용합니다. 하지만 초보자는 PowerShell 콘솔, Windows 명령 줄을 연상시키는 간단한 텍스트 인터페이스 또는 DOS 3.2를 사용하는 것이 가장 좋습니다.

Windows 10에서 관리자로 PowerShell을 시작하려면 시작을 클릭하고 앱 목록에서 Windows PowerShell로 스크롤합니다. 해당 줄을 클릭하고 Windows PowerShell을 마우스 오른쪽 단추로 클릭 한 다음 관리자 권한으로 실행을 선택합니다. Windows 8.1에서는 Windows 시스템 폴더에서 Windows PowerShell을 찾습니다. Win7에서는 액세서리 폴더에 있습니다. 동일한 순서를 따르되 왼쪽 클릭으로 PowerShell을 "일반"사용자로 실행할 수 있습니다.

모든 버전의 Windows에서 Windows 검색을 사용하여 PowerShell을 찾을 수 있습니다. Windows 8.1 및 Windows 10에서는 Ctrl-X "전원 메뉴"에 배치 할 수 있습니다 (작업 표시 줄의 빈 곳을 마우스 오른쪽 단추로 클릭하고 속성을 선택하고 탐색 탭에서 명령 프롬프트 바꾸기 확인란을 선택). 일단 열리면 PowerShell을 작업 표시 줄에 고정하는 것이 좋습니다. 예, 당신은 그것을 많이 좋아할 것입니다.

2 단계 : 구식 Windows 명령 입력

PowerShell에서 예상 한대로 Windows 명령 줄 구문이 얼마나 많이 작동하는지 놀라실 것입니다.

예를 들어, cd디렉토리 (폴더라고도 함)를 변경 dir하고 현재 폴더에 포함 된 모든 파일과 폴더를 계속 나열합니다.

PowerShell 콘솔을 시작하는 방법에 따라 c:\Windows\system32또는에서 시작할 수 있습니다 c:\Users\. 스크린 샷 예에서는 cd ..(공백에 유의)를 사용하여 한 번에 한 수준 위로 이동 한 다음 실행 dir하여 C:\디렉터리의 모든 파일과 하위 폴더를 나열합니다 .

3 단계 : 도움말 파일 설치

명령 은 기본 PowerShell 명령 cd과 같고 dir그렇지 않습니다. 실제 PowerShell 명령을 대체하는 별칭입니다. 별칭은 극복하기 어려운 손가락 메모리를 가진 사람들에게 유용 할 수 있습니다. 그러나 그들은 PowerShell의 가장 중요한 부분을 다루기 시작하지도 않습니다.

PowerShell 자체에 대해 알아 보려면 help알고있는 명령을 입력하십시오 . 예를 들어, 스크린 샷에서 help dir.

PowerShell 도움말은 dir이것이 PowerShell 명령의 별칭 임을 알려줍니다 Get-ChildItem. 당신이 입력하면 과연는, get-childitem상기 PS C:\>프롬프트, 당신은 당신이 함께보고 정확하게 볼 dir명령.

스크린 샷 하단에 설명 된대로 PowerShell 용 도움말 파일은 자동으로 설치되지 않습니다. 를 검색하려면 (당신은 않습니다 , 관리자 모드에서 PowerShell을에 로그온 한 다음 입력을 싶어) update-help. 도움말 파일을 설치하는 데 몇 분이 걸리며 몇 개의 모듈이 누락 될 수 있습니다. 테스트 시스템에 NetWNV 및 SecureBoot에 대한 도움말을 설치하지 못했습니다. 그러나 완료되면 전체 도움말 시스템이 손짓하고 전화를 겁니다.

이 시점부터 사용자와 get-help관련된 명령 (PowerShell에서 "cmdlet", "command-let"으로 발음)을 입력하면 해당 항목에 대한 모든 도움말이 표시됩니다. 예를 들어, 옵션 get-help get-childitem요약을 생성합니다 get-childitem. 또한 테마에 대한 변형을 입력하라는 메시지도 표시됩니다. 따라서 다음과 같습니다.

get-help get-childitem -examples

사용 방법에 대한 7 개의 자세한 예제를 생성합니다 get-childitem. PowerShell 명령

get-help get-childitem -detailed

이러한 7 가지 예와 get-childitemcmdlet에 사용할 수있는 모든 매개 변수에 대한 자세한 설명이 포함되어 있습니다 .

4 단계 : 매개 변수에 대한 도움말보기

에서 help dir스크린 샷, 당신은 아래의 두 가지 옵션이있다 눈치 챘을 수도 SYNTAX에 대한이 get-childitem. cmdlet에 대해 두 개의 개별 구문이 있다는 사실은 cmdlet을 실행하는 두 가지 방법이 있음을 의미합니다. 구문을 분리하는 방법은 무엇이며 매개 변수는 무엇을 의미합니까? 트릭을 안다면 대답은 간단합니다.

get-childitemcmdlet 또는 다른 cmdlet의 매개 변수에 대한 모든 세부 정보를 얻으려면 -full다음과 같이 매개 변수를 사용합니다 .

get-help get-childitem -full

그러면 cmdlet으로 수행 할 수있는 작업과 발생할 수있는 작업 (또는 발생하지 않을 수있는 작업)이 한 줄씩 나열됩니다. 스크린 샷을 참조하십시오.

매개 변수 세부 정보를 살펴보면 get-childitem특정 문자 일치 여부에 관계없이 지정한 위치에서 "하위"항목 (예 : 하위 폴더 이름 또는 파일 이름)을 검색하는 데 사용할 수있는 항목을 쉽게 알 수 있습니다. 예를 들면 :

get-childItem “*.txt” -recurse

*.txt현재 폴더 및 모든 하위 폴더에있는 모든 " "파일 목록을 검색합니다 ( -recurse매개 변수 로 인해 ). 다음은 다음과 같습니다.

get-childitem “HKLM:\Software”

의 모든 상위 수준 레지스트리 키 목록을 반환합니다 HKEY_LOCAL_MACHINE\Software.

Windows 명령 줄이나 배치 파일을 사용하여 레지스트리 내부로 들어 가려고 시도한 적이 있다면 이러한 종류의 액세스가 얼마나 강력해야하는지 알 수있을 것입니다.

5 단계 : 이름 정하기

: 거기 우리가 본 cmdlet에 지금까지 같은 모습 이유입니다 get-childitem, update-help그리고 get-help모두 같은 동사 - 명사 규칙을 따릅니다. 다행히도 모든 PowerShell의 cmdlet은이 규칙을 사용하며 동사는 (단수) 명사 앞에옵니다. 일관성없는 이름의 VB 및 VBA 명령에 대해 몇 주를 보냈던 분들은 안도의 한숨을 쉬실 수 있습니다.

우리가 어디로 가는지 알아 보려면 가장 일반적인 cmdlet 중 일부를 살펴보십시오 (Ed Wilson의 Hey, Scripting Guy! 블로그 덕분에). 시스템에 도달하는 cmdlet으로 시작하여 다음과 같은 유용한 정보를 가져옵니다.

  • set-location: 현재 작업 위치를 지정된 위치로 설정합니다.
  • get-content: 파일의 내용을 가져옵니다.
  • get-item: 파일 및 폴더 가져 오기
  • copy-item: 한 위치에서 다른 위치로 항목을 복사합니다.
  • remove-item: 파일 및 폴더 삭제
  • get-process: 로컬 또는 원격 컴퓨터에서 실행중인 프로세스를 가져옵니다.
  • get-service: 로컬 또는 원격 컴퓨터에서 실행되는 서비스를 가져옵니다.
  • invoke-webrequest: 인터넷의 웹 페이지에서 콘텐츠를 가져옵니다.

특정 cmdlet의 작동 방식을 보려면 다음과 같이을 사용하십시오 get-help.

get-help copy-item -full

도움말 설명에 따라 cmdlet이 원하는 것을 쉽게 파악할 수 있습니다. 예를 들어 모든 파일과 폴더를에서 Documents로 복사 c:\temp하려면 다음을 사용합니다.

copy-item c:\users\[username] \documents\* c:\temp

이 명령을 입력하면 PowerShell 환경에 내장 된 몇 가지 멋진 터치를 볼 수 있습니다. 예를 들어 입력 copy-i하고 Tab 키를 누르면 PowerShell Copy-Item이 공백을 채 웁니다 . cmdlet을 잘못 입력했는데 PowerShell이 ​​알아낼 수없는 경우 무엇이 잘못되었는지에 대한 자세한 설명을 얻을 수 있습니다.

이 cmdlet을 사용해보십시오. ( "정보"상자를 읽을 수있는 프로그램을 설치하도록 시도 할 수 있습니다. 그렇다면 무시하십시오.)

invoke-webrequest askwoody.com

웹 페이지의 콘텐츠 선언, 헤더, 이미지, 링크 등의 간결한 목록을 얻을 수 있습니다. 어떻게 작동하는지 보셨나요? 의주의 사항 get-help에 대한 목록 invoke-webrequest것을 invoke-webrequestcmdlet에 "형태, 링크, 이미지 및 기타 중요한 HTML 요소를 반환 컬렉션"-exactly 당신은 당신의 화면에 표시해야하는지.

일부 cmdlet은 PowerShell 자체를 제어하거나 검색하는 데 도움이됩니다.

  • get-command: 사용 가능한 모든 cmdlet을 나열합니다 (긴 목록입니다!).
  • get-verb: 사용 가능한 모든 동사 (Cmdlet의 왼쪽 절반)를 나열합니다.
  • clear-host: 호스트 프로그램의 표시를 지 웁니다.

다양한 매개 변수 (, get-help)를 사용하여 명령을 줄이고 사용 가능한 옵션을 좁힐 수 있습니다. 예를 들어 Windows 서비스와 함께 작동하는 모든 cmdlet 목록을 보려면 다음을 시도하십시오.

get-command *-service

service명사로 사용할 수있는 모든 동사를 나열합니다 . 결과는 다음과 같습니다.

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

이러한 cmdlet을 다른 cmdlet과 결합하여 PowerShell의 거의 모든 부분을 조사 할 수 있습니다. 그것이 파이프가 등장하는 곳입니다.

6 단계 : 파이프 가져 오기

Windows 명령 줄을 사용했거나 배치 파일을 통해 slogged 한 적이 있다면 리디렉션 및 파이프에 대해 알고 있습니다. 간단히 말해서 리디렉션 (  >문자)과 파이프 ( |문자)는 모두 작업에서 출력을 가져 와서 다른 곳에 붙입니다. 예를 들어 다음과 같이 dir명령 출력을 텍스트 파일로 리디렉션 하거나 ping명령 결과를으로 "파이프"하여 find흥미로운 결과를 필터링 할 수 있습니다.

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

1, 위의 두 번째 명령에서 find문자열에 대한 명령 외모 packetsaskwoody.com의 파이프 출력 ping과 스틱 모든 라인을 파일에 일치라는 것을 temp2.txt.

놀랍게도 첫 번째 명령은 PowerShell에서 잘 작동합니다. 두 번째 명령을 실행하려면 다음과 같은 것이 필요합니다.

ping askwoody.com | select-string packets | out-file temp2.txt

리디렉션 및 파이프를 사용하면 Windows 명령 줄의 기능이 크게 확장됩니다. 예를 들어 텍스트 문자열을 찾기 위해 화면을 끝없이 스크롤하는 대신 검사를 수행하는 파이프 된 Windows 명령을 함께 사용할 수 있습니다.

PowerShell에는 파이핑 기능이 있지만 텍스트로 제한되지 않습니다. 대신 PowerShell을 사용하면 한 cmdlet에서 다음 cmdlet으로 전체 개체를 전달할 수 있습니다. 여기서 "개체"는 데이터 (속성)와 데이터에 사용할 수있는 작업 (메서드)의 조합입니다.

그러나 어려운 부분은 개체를 정렬하는 데 있습니다. 한 cmdlet에서 제공하는 개체의 종류는받는 cmdlet에서 허용하는 개체의 종류와 일치해야합니다. 텍스트는 매우 단순한 개체이므로 텍스트로 작업하는 경우 항목을 정렬하는 것은 쉽습니다. 다른 개체는 그렇게 초보적이지 않습니다.

그것을 알아내는 방법? 에 오신 것을 환영합니다 get-membercmdlet을. cmdlet이 생성하는 개체 유형을 알고 싶다면 get-member. 예를 들어 컴퓨터에서 실행되는 프로세스를 파악하려고하고 옵션을 get-processcmdlet으로 좁힌 경우 다음 은 get-processcmdlet이 생성 하는 내용을 찾는 방법입니다 .

get-process | get-member

이 명령을 실행하면에 대한 속성 및 메서드의 긴 목록이 생성 get-process되지만 목록 맨 처음에 get-process 생성 되는 객체 유형을 볼 수 있습니다 .

TypeName: System.Diagnostics.Process

아래 스크린 샷은 또한 당신을 알려줍니다 get-process이라는 특성을 가지고 Handles, Name, NPM, PM, SI, VM,와 WS.

get-process작업 할 수 있도록 출력을 조작하려면 (모니터에 긴 활성 프로세스 목록을 표시하는 대신) System.Diagnostics.Process입력으로 사용할 다른 cmdlet을 찾아야 합니다. 원하는 cmdlet을 찾으려면 다음을 사용하면됩니다.… 기다림… PowerShell :

get-command -Parametertype System.Diagnostics.Process

그러면 처리 할 수있는 모든 cmdlet 목록이 생성 System.Diagnostics.Process됩니다.

일부 cmdlet은 거의 모든 종류의 입력을받는 것으로 유명합니다. 그들 중 최고 : where-object. 혼란스럽게도 where-object파이프 라인으로 보내진 각 항목을 하나씩 반복하고 요청하는 모든 선택 기준을 적용합니다. 라는 특수 마커가 $_있습니다. 파이프의 각 항목을 한 번에 하나씩 살펴볼 수 있습니다.

당신이 "라고 당신의 시스템에서 실행중인 모든 프로세스의 목록과 함께오고 싶어 말 svchostPowerShell을 말하는 -in, 당신이에 일치시킬" Name의 재산입니다  svchost. 다음 PowerShell 명령을 시도하십시오.

get-process | where-object {$_.Name -eq “svchost”}

where-object각각의 cmdlet은 외모 System.Diagnostics.Process항목은 비교 .Name"에 해당 항목의 svchost"; 항목이 일치하면 파이프 끝에 뱉어내어 모니터에 입력합니다. 스크린 샷을 참조하십시오.