뒤로

본문



위 사진은 파워셸을 시작했을 때의 모습이다.
기존 명령 프로그램인 cmd 에서 엄청난 변화를 거친 프로그램이다.

여러 스크립팅이 가능하다는게 장점.
단점이라면 국내인들 중 윈7을 사용하면서 이런 부분에 대한 신경을 안 쓴다. 활용을 할 수록 많은 도움을 주는데 말이다.

Windows PowerShell 시작 설명서

Windows PowerShell은 시스템 관리자를 위해 특별히 디자인된 새로운 Windows 명령줄 셸입니다. Windows PowerShell에는 조합하거나 독립적으로 사용할 수 있는 대화형 프롬프트 및 스크립팅 환경이 포함되어 있습니다.

텍스트를 적용하고 반환하는 대부분의 셸과 달리 Windows PowerShell은 .NET Framework CLR(공용 언어 런타임) 및 .NET Framework를 기반으로 하며 .NET Framework 개체를 적용하고 반환합니다. 이러한 기본적인 환경의 변화는 Windows를 관리 및 구성하는 데 완전히 새로운 도구와 메서드를 필요로 합니다.

Windows PowerShell에는 셸에 기본으로 제공되는 간단한 단일 기능 명령줄 도구인 cmdlet("command-let"으로 발음)의 개념이 도입되었습니다. 이 간단한 도구는 개별적으로 사용할 수도 있지만 여러 cmdlet을 조합하여 복잡한 작업을 수행할 때 강력한 기능을 확인할 수 있습니다. Windows PowerShell에는 백 개가 넘는 기본적인 핵심 cmdlet이 포함되어 있으며, 사용자는 고유의 cmdlet을 작성하여 다른 사용자와 공유할 수 있습니다.

많은 셸과 마찬가지로 Windows PowerShell을 사용하여 컴퓨터의 파일 시스템에 액세스할 수 있습니다. 또한 Windows PowerShell 공급자는 레지스트리 및 디지털 서명 인증서 저장소와 같은 다른 데이터 저장소에도 파일 시스템에 액세스하는 것처럼 쉽게 액세스할 수 있도록 해줍니다.

이 시작 설명서에서는 Windows PowerShell의 언어, cmdlet, 공급자, 개체 사용에 대해 소개합니다.



소개

Cmd.exe를 비롯하여 SH, KSH, CSH 및 BASH UNIX 셸과 같은 대부분의 셸은 새 프로세스에서 명령이나 유틸리티를 실행하여 결과를 텍스트로 표시하는 방식으로 작동합니다. 지난 몇 년 간 sed, AWK, PERL 등의 많은 텍스트 처리 유틸리티는 이러한 상호 작용을 지원하도록 진화되었습니다.

또한 이러한 셸에는 KSH의 typeset 명령 및 Cmd.exe의 dir 명령과 같이 셸에 기본 제공되고 셸 프로세스에서 실행되는 명령이 포함되어 있습니다. 그러나 대부분의 셸에는 기본 제공 명령이 거의 없기 때문에 많은 유틸리티를 만들어야 합니다.

Windows PowerShell은 다릅니다. (기존 명령프로그램과 차이점을 비교)

  • Windows PowerShell은 텍스트를 처리하지 않습니다. 대신 .NET Framework 플랫폼을 기반으로 하는 개체를 처리합니다.

  • Windows PowerShell은 일관성 있는 인터페이스를 사용하는 많은 기본 제공 명령 집합과 함께 제공됩니다.

  • 도구마다 다른 파서를 사용하지 않고 모든 셸 명령에서 동일한 명령 파서를 사용합니다. 따라서 각 명령의 사용 방법을 훨씬 쉽게 배울 수 있습니다. 쉽게 말해, 여러 스크립트 언어 들의 사용 명령어를 통합했다는 의미다.

또한 무엇보다 가장 큰 이점은 이미 익숙한 도구를 계속 사용할 수 있다는 점입니다. 즉, Net, SC 및 Reg.exe와 같은 기존 Windows 도구를 Windows PowerShell에서 그대로 사용할 수 있습니다.



Windows PowerShell Cmdlet

cmdlet("command-let"으로 발음)은 Windows PowerShell에서 개체를 조작하는 단일 기능 명령입니다. cmdlet은 동사와 명사를 대시(-)로 구분한 이름 형식(예: Get-Help, Get-Process, Start-Service)으로 식별할 수 있습니다.

기존 셸의 명령은 간단한 실행 프로그램(예: attrib.exe)에서부터 매우 복잡한 실행 프로그램(예: netsh.exe)까지 그 범위가 다양합니다.

Windows PowerShell에서는 대부분의 cmdlet이 매우 단순하며 다른 cmdlet과 조합하여 사용할 수 있도록 디자인되었습니다. 예를 들어 "get" cmdlet은 데이터 검색, "set" cmdlet은 데이터 설정 또는 변경, "format" cmdlet은 데이터 형식 지정 그리고 "out" cmdlet은 지정된 대상으로 출력을 전달하는 역할만 합니다.

각 cmdlet에는 다음을 입력하여 액세스할 수 있는 도움말 파일이 있습니다.

get-help <cmdlet-name> -detailed

cmdlet 도움말 파일의 자세히 보기에서는 cmdlet에 대한 설명, 명령 구문, 매개 변수 설명 및 cmdlet 사용 예제를 제공합니다.


명령 유틸리티 !

Windows PowerShell에서는 Windows 명령줄 프로그램을 실행하고 Windows Powershell 프롬프트에서 메모장 및 계산기와 같은 그래픽 사용자 인터페이스가 있는 Windows 프로그램을 시작할 수 있습니다. Windows 프로그램에서 생성하는 텍스트를 캡처하여 Windows PowerShell에서 사용할 수도 있습니다.

예를 들어 다음 명령은 Windows, IPConfig, Net 및 Shutdown 명령을 사용합니다.

C:\PS> net localgroup administrators /add domain01\user01
The command completed successfully.

C:\PS> ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
       Connection-specific DNS Suffix  . : domain.corp.fabricam.com
       IP Address. . . . . . . . . . . . : 142.20.152.115
       Subnet Mask . . . . . . . . . . . : 255.255.252.0
       Default Gateway . . . . . . . . . : 172.30.180.1

C:\PS> shutdown -r

Select-String과 같은 Windows PowerShell cmdlet을 사용하여 Windows 프로그램에서 반환하는 텍스트를 조작할 수도 있습니다.

예를 들어 다음 명령은 파이프라인 연산자를 사용하여 IPConfig 명령의 결과를 Windows PowerShell Select-String cmdlet으로 보냅니다. 이 cmdlet은 문자열에서 텍스트를 검색합니다. 이 예에서는 Select-String을 사용하여 IpConfig 출력에서 "255" 패턴을 찾습니다.

C:\PS> ipconfig | select-string -pattern 255
Subnet Mask . . . . . . . . . . . : 255.255.252.0

Windows 명령 또는 도구에 매개 변수가 있는 경우(예: Shutdown의 "-r"(다시 시작) 매개 변수) Windows PowerShell은 매개 변수를 해석하지 않고 도구에 전달합니다.

그러나 도구에서 Windows PowerShell 예약어를 사용하거나 Nant의 "-D:debug=false" 매개 변수(Windows PowerShell에서는 이를 "-D"와 "debug=false"의 두 매개 변수로 해석함)와 같이 Windows PowerShell에 생소한 명령 형식을 사용하는 경우에는 매개 변수를 따옴표로 묶어 Windows PowerShell이 매개 변수를 해석하지 않고 도구에 전달하도록 해야 합니다.

개체 처리 방식

처음에는 인식하지 못할 수도 있겠지만 Windows PowerShell에서 작업하는 동안에는 .NET Framework 개체를 사용하고 있는 것입니다. 경험이 점점 쌓이면서 이러한 개체 처리 능력이 드러나며 개체를 사용하고 개체를 중심으로 사고하는 자신을 발견하게 될 것입니다.

일반적으로 .NET Framework 개체는 데이터 및 해당 데이터와 연결된 연산으로 구성되어 있는 .NET Framework 클래스의 인스턴스입니다. 그러나 속성(특성) 및 메서드(개체에서 수행할 수 있는 작업)를 가진 데이터 엔터티로 생각할 수 있습니다.

예를 들어 Windows PowerShell에서 서비스를 가져올 때 실제로는 서비스를 나타내는 개체를 가져오는 것입니다. 서비스에 대한 정보를 볼 때는 해당 서비스 개체의 속성을 보는 것입니다. 또한 서비스를 시작하는 경우, 즉 서비스의 Status 속성을 "started"로 변경하는 경우에는 서비스 개체의 메서드를 사용하는 중입니다.

같은 유형의 모든 개체는 속성 및 메서드가 같지만 각 개체의 인스턴스는 다른 속성 값을 가질 수 있습니다. 예를 들어 모든 서비스 개체에는 Name 및 Status 속성이 있습니다. 그러나 이름과 상태는 서비스마다 다를 수 있습니다.

준비를 마쳤다면 이제 개체에 대해 알아 보겠습니다. cmdlet이 가져오는 개체 유형을 확인하려면 파이프라인 연산자(|)를 사용하여 "get" 명령의 결과를 Get-Member 명령으로 보내면 됩니다. 예를 들어 다음 명령은 Get-Service 명령에 의해 검색된 개체를 Get-Member로 보냅니다.

get-service | get-member 

Get-Member는 개체의 유형 이름과 해당 속성 및 메서드 목록을 포함하여 서비스 개체에 대한 정보를 표시합니다.

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
add_Disposed              Method        System.Void add_Disposed(EventHandler value)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
...

개체 클래스에 대한 정보를 보려면 System.ServiceProcess.ServiceController와 같은 유형 이름을 MSDN에 복사하여 붙여 넣습니다. 클래스를 찾으면 MSDN 하위 항목을 읽고 Windows PowerShell의 개체 속성 및 메서드와 같이 해당 클래스를 기반으로 하는 개체의 속성 및 메서드에 대해 확인할 수 있습니다.

특정 개체의 모든 속성 값을 알아보려면 파이프라인 연산자(|)를 사용하여 "get" 명령의 결과를 Format-List 또는 Format-Table 명령으로 보냅니다. 이 경우 format cmdlet의 Property 매개 변수에 모두를 나타내는 값인 별표(*)를 사용합니다. 예를 들어 시스템의 Schedule 서비스에 대한 모든 속성을 찾으려면 다음과 같이 입력합니다.

get-service schedule | format-list -property *

다음은 결과를 보여 주는 예입니다.

Name                : Schedule
CanPauseAndContinue : True
CanShutdown         : True
CanStop             : True
DisplayName         : Task Scheduler
DependentServices   : {}
MachineName         : .
ServiceName         : Schedule
ServicesDependedOn  : {RpcSs}
ServiceHandle       : SafeServiceHandle
Status              : Running
ServiceType         : Win32ShareProcess
Site                :
Container           :

Windows PowerShell을 처음 배우는 경우 개체를 이해하지 못하더라도 개념은 잘 기억해야 합니다. 개체 사용 방법은 금방 배울 수 있습니다.

개체 파이프 라인

개체를 사용할 때의 주요 이점 중 하나는 명령을 훨씬 쉽게 파이프할 수 있다는 점입니다. 즉, 하나의 명령 출력을 다른 명령에 입력으로 전달할 수 있습니다. 일반적인 명령줄 환경에서는 출력을 한 형식에서 다른 형식으로 전환하고 제목 및 열 머리글을 제거하려면 텍스트를 조작해야 합니다.

Windows PowerShell은 텍스트 대신 개체를 기반으로 하는 새로운 아키텍처를 제공합니다. 개체를 받는 cmdlet은 변환이나 조작 없이 해당 개체의 속성 및 메서드에서 직접 작업할 수 있습니다. 사용자는 출력에서 데이터의 위치를 계산할 필요 없이 이름으로 개체의 속성 및 메서드를 참조할 수 있습니다.

다음 예제에서 IpConfig 명령의 결과는 Findstr 명령으로 전달됩니다. 파이프라인 연산자(|)는 왼쪽에 있는 명령의 결과를 오른쪽에 있는 명령으로 보냅니다. Windows PowerShell™에서는 문자열을 조작하거나 데이터 오프셋을 계산할 필요가 없습니다.

PS> ipconfig | findstr "Address"
        IP Address. . . . . . . . . . . . : 172.28.21.5
        IP Address. . . . . . . . . . . . : 172.30.160.225
스크립팅 지원!

특정 명령 또는 명령 시퀀스를 반복적으로 실행하거나 복잡한 작업을 수행할 일련의 명령을 개발하는 경우 프롬프트에 명령을 입력하는 대신 파일에 명령을 저장하고 명령 파일을 실행할 수 있습니다. 이러한 명령 파일을 스크립트라고 합니다.

Windows PowerShell은 대화형 인터페이스 외에 스크립팅도 완벽하게 지원합니다. Windows PowerShell에서 스크립트 파일의 파일 이름 확장명은 .ps1입니다. 스크립트를 실행하려면 명령 프롬프트에 스크립트 이름을 입력합니다. 파일 이름 확장명은 선택 사항입니다.

예를 들면 다음과 같습니다.

c:\test\testscript.ps1

- 또는 -

c:\test\testscript

스크립트가 현재 디렉터리에 있더라도 정규화된 경로를 스크립트 파일에 지정해야 합니다. 현재 디렉터리를 나타내려면 디렉터리 이름을 입력하거나 점(.)을 사용하여 현재 디렉터리를 표시합니다. 예를 들면 다음과 같습니다.

.\testscript.ps1 

스크립트는 일부 기업에서 활용도가 매우 높고 심지어 필수적인 요소이기도 하지만 악성 코드를 확산시키는 데 사용될 수 있습니다. 따라서 Windows PowerShell에서는 실행 정책이라고 하는 보안 정책을 사용하여 스크립트의 실행 가능 여부 및 스크립트에 디지털 서명을 포함해야 하는지 여부를 결정할 수 있도록 해줍니다. 명백한 위험을 제거하기 위해 Windows PowerShell의 실행 정책에서는 아이콘을 두 번 클릭하여 스크립트를 실행하는 것을 허용하지 않습니다. 자세한 내용을 보려면 다음을 입력하십시오.

get-help about_execution_policies

또한 Windows PowerShell에는 가장 간단한 것에서부터 매우 복잡한 것에 이르기까지 폭넓은 범위의 스크립트를 만들 수 있는 풍부한 스크립트 언어가 포함되어 있으며, 언어 구문에 대한 루핑, 조건, 흐름 제어 및 변수 할당이 지원됩니다.



명령어 방식은 리눅스 우분투와 조금 유사하다. 그렇기 때문에 리눅스 텍스트 인터페이스를 자주 사용하는 분들이 윈7을 사용할 경우 익숙하게 작업을 할 수 있다.

기존 유틸리티들을 찾아서 설치하고 실행하는 귀찮은 방법보다...오히려 이렇게 복잡하지만 명령어 를 만들어 저장해두고 필요할때 마다 실행해 주면 그 작업을 실행하기 때문에 매우 편리하다. 또한, 저장한 파일을 공유하여 같은 윈7 사용자들끼리 편의를 고려해줄 수 있기 때문에 파워셸은 마소에서 나온 것 치고는 유용하다 할 수 있다.

물론 그래픽 유져 인터페이스(GUI:구이) 에 익숙하다면 권장하지 않는다. 다만 그 사람은 좀 시간이 오래 걸리는 쪽으로 수명을 죽이며 사용할 것이다.

댓글

공지사항

최근 글

방문자

어제 명, 오늘 명