get-help
Windows PowerShell 사용
이 절에서는 Windows PowerShell 사용에 관한 기본 사항을 설명합니다. 먼저 Windows PowerShell의 cmdlet 및 개념 항목에 대한 정보를 표시하는 Get-Help cmdlet부터 시작합니다. 그런 다음 몇 가지 기본 cmdlet과 cmdlet 매개 변수 사용 방법을 설명하고, cmdlet 출력의 형식을 지정하여 필요한 데이터를 유용하게 표시하는 방법을 보여 줍니다. 마지막 항목에서는 별칭을 사용하여 Windows PowerShell에서 보다 손쉽게 작업하는 방법, Windows Windows PowerShell에서 기존 Windows 프로그램을 실행하는 방법 및 오류를 관리하는 방법을 설명합니다.
Get-Help: 도움말 보기
Get-Help cmdlet은 Windows PowerShell을 학습하는 데 유용한 도구입니다. cmdlet의 설명을 읽고 개념을 이해한 다음 언어 항목을 살펴보면 Windows PowerShell 사용 방법을 조금씩 이해할 수 있습니다.
가장 먼저 살펴볼 항목은 도움말 시스템입니다. Windows PowerShell의 도움말 시스템에 대한 정보를 표시하려면 다음과 같이 입력하십시오.
다음으로는 Get-Help, Get-Command, Get-Process, Get-Service 및 Get-Eventlog와 같은 몇 가지 기본 cmdlet에 대해 알아야 합니다.
Cmdlet 도움말의 가장 단순한 보기를 표시하려면 cmdlet 이름 앞에 "get-help"를 입력합니다. 예를 들어 Get-Command cmdlet에 대한 도움말을 보려면 다음과 같이 입력하십시오.
cmdlet 도움말에 형식이 제대로 지정되지 않은 경우, 즉 XMLNS 태그로 시작하는 경우 사용자 시스템의 Windows PowerShell 실행 정책에 따라 시스템이 cmdlet 도움말의 형식을 지정하는 구성 파일을 로드하지 못했을 수 있습니다. 실행 정책에 대한 자세한 내용을 보려면 다음을 입력하십시오.
매개 변수 설명 및 예제를 포함하여 cmdlet에 대한 자세한 도움말을 표시하려면 Get-Help의 Detailed 매개 변수를 사용합니다. 예를 들어 Get-Command cmdlet에 대한 자세한 도움말을 보려면 다음과 같이 입력하십시오.
|
get-help get-command -detailed |
cmdlet 및 cmdlet의 매개 변수에 대한 기술적인 내용을 포함하여 사용 가능한 모든 cmdlet 도움말을 표시하려면 Full 매개 변수를 사용합니다. 예를 들어 Get-Command cmdlet에 대한 전체 도움말을 보려면 다음과 같이 입력하십시오.
|
get-help get-command -full |
또한 도움말 파일의 일부를 선택적으로 표시할 수도 있습니다. 예제만 보려면 Examples 매개 변수를 사용합니다. 예를 들어 Get-Command cmdlet에 대한 예제만 표시하려면 다음과 같이 입력하십시오.
|
get-help get-command -examples |
자세한 매개 변수 설명만 보려면 Get-Help의 Parameter 매개 변수를 사용합니다. 매개 변수 이름을 지정하거나 와일드카드 문자(*)를 사용하여 모든 매개 변수를 지정할 수 있습니다. 예를 들어 Get-Command의 TotalCount 매개 변수에 대한 설명을 보려면 다음과 같이 입력하십시오.
|
get-help get-command -parameter totalcount |
Get-Command cmdlet의 모든 매개 변수를 보려면 다음과 같이 입력하십시오.
|
get-help get-command -parameter * |
또한 Get-Help를 호출하는 Windows PowerShell 함수 중 하나를 사용할 수도 있습니다. Help 함수는 전체 도움말을 한 번에 하나의 화면에 표시합니다. Man 함수는 Unix의 Man 페이지 같은 도움말을 표시합니다. Help 및 Man 함수를 사용하여 Get-Command cmdlet에 대한 도움말을 표시하려면 다음과 같이 입력하십시오.
또는
특정 도움말 항목을 요청하는 경우 Get-Help는 해당 항목의 내용을 표시합니다. 그러나 와일드카드 문자를 사용하여 둘 이상의 항목을 요청하면 Get-Help는 항목의 목록을 표시합니다. 예를 들어 "Get" cmdlet에 대한 도움말 항목의 목록을 보려면 다음과 같이 입력하십시오.
get-help get-*
Windows PowerShell의 개념에 대한 도움말은 "about_"으로 시작합니다. Windows PowerShell 개념에 대한 도움말을 표시하려면 개념 이름 앞에 "get-help"를 입력합니다. 예를 들어 와일드카드에 대한 도움말을 보려면 다음과 같이 입력하십시오.
Windows PowerShell의 모든 개념 도움말 항목의 목록을 표시하려면 다음과 같이 입력하십시오.
도움말 항목을 읽고 예제를 연습해 보면 Windows PowerShell의 작동 방법 및 Windows PowerShell를 사용하여 작업하는 방법을 이해할 수 있습니다.
Cmdlet 사용
cmdlet("command-let"으로 발음)은 셸에 기본 제공되는 간단한 단일 기능 명령줄 도구입니다. cmdlet은 기존의 명령 및 유틸리티와 같은 방법으로 사용합니다. 먼저 Windows PowerShell 명령 프롬프트에 cmdlet의 이름을 입력합니다. Windows PowerShell 명령에서는 대/소문자를 구분하지 않으므로 대/소문자에 관계없이 입력할 수 있습니다.
예를 들어 Get-Date cmdlet을 연습해 볼 수 있습니다.
|
C:\PS> get-date
2005년 11월 10일 목요일 오후 4:43:50 |
사용자 세션의 cmdlet을 나열하려면 명령 매개 변수 없이 Get-Command cmdlet을 사용합니다.
|
PS> get-command
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
Cmdlet Add-Member Add-Member [-MemberType] <PS...
...
… |
Get-Command는 기본적으로 CommandType, Name 및 Definition으로 구성된 세 개의 열을 표시합니다. cmdlet을 나열할 때 Definition 열은 cmdlet의 구문을 표시합니다. 구문의 줄임표(…)는 데이터가 잘렸음을 나타냅니다.
또한 Get-Command cmdlet은 cmdlet 외에도 명령 및 Windows PowerShell에서 사용할 수 있는 별칭(명령 애칭), 함수, 실행 파일 등의 명령 요소를 가져옵니다.
다음 명령은 Get-Command의 Name 매개 변수를 사용하여 Windows PowerShell에서 사용 가능한 실행 파일을 나열합니다.
|
PS> get-command *.exe
CommandType Name Definition
----------- ---- ----------
Application 000StTHK.exe C:\WINDOWS\system32\000StTHK.exe
Application 00THotkey.exe C:\WINDOWS\system32\00THotkey.exe
Application accwiz.exe C:\WINDOWS\system32\accwiz.exe
... |
실행 파일을 나열할 때 Defintion 열에는 실행 파일의 전체 경로가 표시됩니다.
이제 Get-Process, Get-Service, Get-EventLog 및 Get-Alias 같은 몇 가지 다른 cmdlet을 연습해 봅니다.
간단한 "Get-" cmdlet에 익숙해졌으면 Get-WmiObject와 같은 보다 재미있는 cmdlet을 연습합니다. 이 cmdlet을 사용하면 원격 컴퓨터의 구성 요소를 보고 변경할 수 있으므로 활용도가 매우 높습니다. 예를 들어 다음 명령은 Server01 원격 컴퓨터의 BIOS에 대한 정보를 가져옵니다.
|
get-wmiobject win32_bios -computername server01 |
어떤 cmdlet이든 도움이 필요하면 다음과 같이 입력하십시오.
get-help <cmdlet 이름> -detailed
예를 들면 다음과 같습니다.
get-help get-alias -detailed.
개체 정보: Get-Member
명령이 반환하는 .NET 개체에 대한 정보를 표시하는 Get-Member는 가장 유용한 cmdlet 중 하나입니다. Get-Member가 표시하는 정보는 개체의 유형, 속성, 메서드 등입니다.
Get-Member를 사용하려면 파이프라인 연산자(|)를 사용하여 명령의 결과를 Get-Member로 보냅니다. 예를 들면 다음과 같습니다.
get-service | get-member
이 명령은 Get-Service가 실제로 컴퓨터의 각 서비스에 대한 System.ServiceProcess.ServiceController 개체 집합을 반환함을 나타냅니다.
|
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()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
Dispose Method System.Void Dispose()
Equals Method System.Boolean Equals(Object obj)
ExecuteCommand Method System.Void ExecuteCommand(Int32 command)
get_CanPauseAndContinue Method System.Boolean get_CanPauseAndContinue()
get_CanShutdown Method System.Boolean get_CanShutdown()
get_CanStop Method System.Boolean get_CanStop()
get_Container Method System.ComponentModel.IContainer get_Container()
get_DependentServices Method System.ServiceProcess.ServiceController[] get_DependentServices()
get_DisplayName Method System.String get_DisplayName()
get_MachineName Method System.String get_MachineName()
get_ServiceHandle Method System.Runtime.InteropServices.SafeHandle get_ServiceHandle()
get_ServiceName Method System.String get_ServiceName()
get_ServicesDependedOn Method System.ServiceProcess.ServiceController[] get_ServicesDependedOn()
get_ServiceType Method System.ServiceProcess.ServiceType get_ServiceType()
get_Site Method System.ComponentModel.ISite get_Site()
get_Status Method System.ServiceProcess.ServiceControllerStatus get_Status()
GetHashCode Method System.Int32 GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method System.Type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
Pause Method System.Void Pause()
Refresh Method System.Void Refresh()
remove_Disposed Method System.Void remove_Disposed(EventHandler value)
set_DisplayName Method System.Void set_DisplayName(String value)
set_MachineName Method System.Void set_MachineName(String value)
set_ServiceName Method System.Void set_ServiceName(String value)
set_Site Method System.Void set_Site(ISite value)
Start Method System.Void Start(), System.Void Start(String[] args)
Stop Method System.Void Stop()
ToString Method System.String ToString()
WaitForStatus Method System.Void WaitForStatus(ServiceControllerStatus desiredStatus), System.Voi...
CanPauseAndContinue Property System.Boolean CanPauseAndContinue {get;}
CanShutdown Property System.Boolean CanShutdown {get;}
CanStop Property System.Boolean CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName Property System.String DisplayName {get;set;}
MachineName Property System.String MachineName {get;set;}
ServiceHandle Property System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName Property System.String ServiceName {get;set;}
ServicesDependedOn Property System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType Property System.ServiceProcess.ServiceType ServiceType {get;}
Site Property System.ComponentModel.ISite Site {get;set;}
Status Property System.ServiceProcess.ServiceControllerStatus Status {get;} |
이 정보는 매우 기술적으로 보이지만 실제로는 매우 실용적인 내용입니다.
Typename(예: "System.ServiceProcess.ServiceController")은 cmdlet이 반환하는 .NET 개체의 유형을 알려 줍니다. 이 .NET 클래스의 개체에 대한 정보를 보려면 MSDN의 검색 입력란에 유형 이름을 붙여 넣습니다. 연관된 MSDN 항목에서는 Get-Service가 반환하는 개체를 포함하여 이 클래스에 포함된 개체의 속성 및 메서드에 대한 정보를 제공합니다.
Property 유형은 개체의 속성을 나타냅니다. 각 속성 값은 서비스 개체에 대한 정보입니다. 예를 들어 ServiceController 개체에는 CanPauseAndContinue 속성이 있습니다. MSDN의 속성 설명에서는 이 속성이 서비스를 일시 중단하고 다시 시작할 수 있는지 여부를 나타낸다고 설명합니다.
특정 서비스의 속성 값을 나열하려면 다음과 같이 입력하십시오.
|
(get-service <서비스 이름>).<속성 이름> |
예를 들면 다음과 같습니다.
|
(get-service alerter).canpauseandcontinue |
Alerter 서비스의 CanPauseAndContinue 속성 이름 및 값 목록을 표시하려면 다음과 같이 입력하십시오.
|
get-service alerter | format-list -property name, CanPauseAndContinue |
Alerter 서비스의 모든 속성 값 목록을 표시하려면 다음과 같이 입력하십시오.
|
get-service alerter | format-list -property * |
모든 서비스의 CanPauseAndContinue 속성 이름 및 값 테이블을 표시하려면 다음과 같이 입력하십시오.
|
get-service | format-table -property name, CanPauseAndContinue |
Method 유형은 개체의 메서드, 즉 개체에서 수행할 수 있는 작업을 나타냅니다. 예를 들어 ServiceController 개체에는 서비스를 중지할 수 있는 Stop 메서드가 있습니다.
서비스 개체의 메서드를 호출하려면 다음 형식을 사용합니다. (괄호를 포함해야 합니다.)
|
(get-service <서비스 이름>).<메서드 이름>()
For example,
(get-service schedule).stop() |
Get-Member command에 대한 자세한 내용을 보려면 다음 명령을 입력하십시오.
get-help get-member -detailed.
Cmdlet 매개 변수 사용
Cmdlet 매개 변수는 매개 변수 이름 앞의 하이픈(-)으로 식별합니다. Windows PowerShell에서는 매개 변수에 슬래시(/ 및 \)를 사용하지 않습니다.
매개 변수 이름을 입력하는 경우 전체 이름을 입력할 수 있지만 cmdlet의 다른 매개 변수와 이름을 구별할 수 있을 정도의 문자만 입력하면 됩니다.
예를 들어 Get-Help cmdlet에는 "Detailed"라는 매개 변수가 있지만 "-det"만 입력해도 Get-Help의 Debug 매개 변수와 충분히 구별할 수 있습니다.
일부 매개 변수 이름은 선택 사항입니다. 매개 변수 이름 대신 매개 변수 값을 입력하여 매개 변수를 사용할 수 있습니다. 그러나 매개 변수 이름을 생략할 경우 구문 다이어그램에 나타나는 명령 내의 같은 위치에 매개 변수 값을 표시해야 합니다.
예를 들어 Get-Help cmdlet에는 cmdlet 또는 개념의 이름을 지정하는 Name 매개 변수가 있습니다. Name 매개 변수의 이름은 입력하거나 생략할 수 있습니다. Get-Alias 명령에 대한 도움말을 보려면 다음과 같이 입력하십시오.
또는
선택적 매개 변수 이름을 찾으려면 도움말 파일의 구문 블록을 확인합니다. 선택적 매개 변수 이름은 다음과 같이 대괄호 안에 표시됩니다.
|
Get-Help [[-Name] <문자열>]... |
일반 매개 변수
모든 cmdlet은 일반 매개 변수라고 하는 매개 변수 집합을 지원합니다. 이 기능은 Windows PowerShell에 일관된 인터페이스를 제공합니다.
cmdlet이 일반 매개 변수를 지원하면 매개 변수의 사용으로 인해 오류가 발생하지는 않지만 일부 cmdlet에서 매개 변수가 작동하지 않을 수 있습니다. 일반 매개 변수에 대한 설명을 보려면 다음을 입력하십시오.
get-help about_commonparameters
명령 출력 형식 지정
기존 셸에서는 각 도구 또는 명령이 해당 출력의 형식을 결정합니다. 일부 도구는 사용자가 출력을 지정할 수 있으며 출력 형식을 제어하는 특수 매개 변수가 포함되어 있습니다.
Windows PowerShell에서는 다음과 같은 format cmdlet만 출력 형식을 지정할 수 있습니다.
Format-List
Format-Custom
Format-Table
Format-Wide
그 밖에 출력 형식을 지정할 수 있는 다른 cmdlet은 없습니다. 따라서 여러 도구의 형식 지정 루틴 및 매개 변수를 학습할 필요가 없습니다. Format cmdlet 및 해당 매개 변수만 알고 있으면 됩니다.
명령을 실행하면 Windows PowerShell은 표시되는 데이터 형식에 따라 기본 포맷터를 호출합니다. 포맷터는 표시되는 출력의 속성 및 해당 속성을 목록에 표시할지 또는 테이블에 표시할지를 결정합니다.
예를 들어 Get-Service cmdlet을 사용하는 경우 기본적으로 다음과 같이 세 개의 열이 있는 테이블이 표시됩니다.
|
C:\PS> get-service
Status Name DisplayName
------ ---- -----------
Running AdtAgent Event Forwarder
Stopped Alerter Alerter
Running ALG Application Layer Gateway Service |
...
임의의 cmdlet에서 출력 형식을 변경하려면 파이프라인 연산자(|)를 사용하여 명령의 출력을 Format cmdlet으로 보냅니다.
예를 들어 다음 명령은 Get-Service 명령의 출력을 Format-List cmdlet으로 보냅니다. 결과적으로 서비스 데이터의 형식은 각 서비스에 대한 목록으로 지정됩니다.
|
C:\PS> get-service | format-list
Name : AdtAgent
DisplayName : Event Forwarder
Status : Running
DependentServices : {}
ServicesDependedOn : {eventlog, dnscache}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
ServiceType : Win32OwnProcess
Name : Alerter
DisplayName : Alerter
Status : Stopped
DependentServices : {}
ServicesDependedOn : {LanmanWorkstation}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
ServiceType : Win32ShareProcess
Name : ALG
DisplayName : Application Layer Gateway Service
Status : Running
DependentServices : {} |
이 형식에서는 테이블 대신 목록에 데이터가 표시될 뿐만 아니라 각 서비스에 대한 추가 정보도 표시됩니다. 각 서비스에 대한 정보를 세 개의 데이터 열에 나타내는 대신 아홉 개의 데이터 행으로 보여 줍니다. Format-List는 추가 서비스 정보를 검색하지 않았습니다. Get-Service에서 검색한 개체에는 데이터가 모두 있었지만 기본 포맷터인 Format-Table은 화면에 세 개가 넘는 열을 표시할 수 없으므로 데이터가 생략되었습니다.
데이터를 목록에 표시할지 또는 테이블에 표시할지를 결정하는 것 외에 표시할 개체의 속성도 지정할 수 있습니다. 예를 들어 Get-Service의 기본 표시에는 서비스 개체의 Status, Name 및 DisplayName 속성만 표시됩니다.
개체의 모든 속성을 보려면 파이프라인 연산자(|)를 사용하여 명령의 출력을 Get-Member cmdlet으로 보냅니다. 예를 들어 서비스 개체의 모든 속성을 보려면 다음과 같이 입력하십시오.
|
get-service | get-member -membertype *property
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
CanPauseAndContinue Property System.Boolean CanPauseAndContinue {get;}
CanShutdown Property System.Boolean CanShutdown {get;}
CanStop Property System.Boolean CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName Property System.String DisplayName {get;set;}
MachineName Property System.String MachineName {get;set;}
ServiceHandle Property System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName Property System.String ServiceName {get;set;}
ServicesDependedOn Property System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType Property System.ServiceProcess.ServiceType ServiceType {get;}
Site Property System.ComponentModel.ISite Site {get;set;}
Status Property System.ServiceProcess.ServiceControllerStatus Status {get;} |
이러한 속성은 모두 Get-Service가 각 서비스에 대해 검색하는 개체에 포함되어 있으므로 사용자는 속성의 전체 또는 일부를 표시할 수 있습니다. Format cmdlet의 Property 매개 변수를 사용하여 표시할 속성을 선택합니다. 예를 들어 다음 명령은 Format-Table 명령을 사용하여 서비스의 Name, ServiceType 및 CanShutDown 속성만 표시합니다.
|
get-service | format-table name, Servicetype, Canshutdown |
이것은 Windows PowerShell 표시를 사용하여 수행할 수 있는 작업의 시작에 불과합니다. 자세한 내용은 다음 명령을 사용하여 Format cmdlet에 대한 도움말을 참조하십시오.
|
get-help format-list
get-help format-table
get-help format-wide
get-help format-custom |
별칭 사용
Cmdlet 이름은 입력하기 귀찮을 수 있습니다. 입력을 최소화하고 다른 셸에 익숙한 사용자가 Windows PowerShell을 보다 쉽게 사용할 수 있도록 Windows PowerShell은 별칭, 즉 명령의 대체 이름을 지원합니다. cmdlet 이름, 함수 이름 또는 실행 파일 이름에 대한 별칭을 만든 다음 모든 명령에 이름 대신 별칭을 입력할 수 있습니다.
Windows PowerShell에는 많은 기본 제공 별칭이 포함되어 있으며 사용자 고유의 별칭을 만들 수도 있습니다. 사용자가 만든 별칭은 현재 세션에서만 유효합니다. 영구 별칭을 만들려면 별칭을 Windows PowerShell 사용자 프로필에 추가합니다.
사용자 세션의 모든 별칭을 찾으려면 다음과 같이 입력하십시오.
특정 cmdlet의 별칭을 찾으려면 다음과 같이 입력하십시오.
|
get-alias | where-object {$_.definition -eq "<cmdlet 이름>"} |
예를 들면 다음과 같습니다.
|
get-alias | where-object {$_.definition -eq "set-location"} |
Windows PowerShell의 별칭은 Windows의 파일 시스템 드라이브와 거의 비슷한 드라이브에서 별칭을 볼 수 있는 .NET 어셈블리인 Windows PowerShell 별칭 공급자에 의해 지원됩니다. 별칭에 사용되는 드라이브는 Alias:입니다.
Alias 드라이브로 변경하려면 다음과 같이 입력하십시오.
set-location alias:
별칭, 즉 Alias: 드라이브의 하위 항목을 보려면 다음과 같이 입력하십시오.
get-childitem
다른 드라이브에서 Alias: 드라이브의 하위 항목을 보려면 명령에 해당 드라이브 이름을 포함하십시오. 예를 들면 다음과 같습니다.
get-childitem alias:
별칭 만들기
Windows PowerShell에서 cmdlet 및 명령에 대한 별칭을 만들려면 Set-Alias cmdlet을 사용합니다. 예를 들어 Get-Help cmdlet에 대해 "gh" 별칭을 만들려면 다음과 같이 입력하십시오.
프로그램을 시작하는 명령과 같은 명령에 대한 별칭도 만들 수 있습니다. 예를 들어 메모장에 대해 "np" 별칭을 만들려면 다음과 같이 입력하십시오.
|
set-alias np c:\windows\notepad.exe |
(메모장의 경로는 사용자 시스템마다 다를 수 있습니다.)
별칭 삭제
별칭을 삭제하려면 Remove-Item cmdlet을 사용하여 Alias: 드라이브에서 해당 별칭을 삭제합니다. 예를 들어 "ls" 별칭을 제거하려면 다음과 같이 입력하십시오.
함수를 사용하여 대체 이름 만들기
cmdlet, 함수 또는 실행 파일에는 별칭을 만들 수 있지만 매개 변수가 포함된 명령에는 별칭을 만들 수 없습니다. 대신 별칭처럼 작동하는 함수를 만들 수 있습니다.
예를 들어 Windows XP를 실행하는 컴퓨터에서 메모장을 사용하여 Boot.ini 파일을 열려면 다음과 같이 입력하십시오.
"notepad c:\boot.ini"에 대해 별칭은 만들 수 없지만 함수를 만들 수 있습니다. 다음명령은 bootini 함수를 만듭니다.
|
function bootini {notepad c:\boot.ini} |
이 함수는 별칭처럼 작동합니다. Windows PowerShell 프롬프트에 bootini를 입력하면 Boot.ini가 메모장에서 열립니다.
Windows 프로그램 사용
Windows PowerShell에서 Windows 명령줄 프로그램을 실행하고 Windows 그래픽 프로그램을 시작할 수 있습니다. 프로그램에서 텍스트 출력을 생성하면 해당 텍스트를 캡처하여 다른 셸과 마찬가지로 새 셸에서 텍스트를 사용할 수 있습니다.
메모장 같은 프로그램을 Windows PowerShell에서 실행하려면 Path 환경 변수에 포함된 디렉터리에 해당 프로그램의 실행 파일이 있어야 합니다. 이는 Windows PowerShell이 응용 프로그램, 유틸리티 및 스크립트를 찾는 위치가 Path 환경 변수 값에 따라 결정되기 때문입니다. Cmdlet은 Path 디렉터리에 있을 필요가 없습니다.
Path 환경 변수의 경로를 보려면 다음과 같이 입력하십시오.
Path 환경 변수에 디렉터리를 추가하려면 다음과 같이 입력하십시오.
|
PS> $env:path += ";newdirectory" |
예를 들어 WordPad.exe 파일의 디렉터리를 Path 변수에 추가하려면 다음과 같이 입력하십시오.
|
PS> $env:path += ";C:\Program Files\Windows NT\Accessories" |
set 명령과 마찬가지로 이 대입문은 현재 Windows PowerShell 세션에 대한 Path 값만 변경합니다. 변경 내용을 영구적으로 적용하려면 대입문을 Windows PowerShell 사용자 프로필에 추가합니다. 자세한 내용은 "Windows PowerShell 프로필" 항목을 참조하십시오.
오류 관리
사용자 위치를 존재하지 않는 디렉터리로 설정하거나 필요한 권한 없이 파일을 제거하려는 경우처럼 셸을 사용할 때 가끔 오류가 발생할 수 있습니다.
Windows PowerShell에는 다음 두 가지 유형의 오류가 있습니다.
종료 오류: 명령 실행이 중지되는 오류
종료되지 않는 오류: 명령 실행이 중지되지 않는 오류
예를 들어 디렉터리에서 모든 .TMP 파일을 제거하려는 경우 모든 파일이 제거될 때까지 작업을 중지하지 않을 수 있습니다. 일반적으로 제거할 수 있는 모든 파일을 먼저 제거한 다음 제거할 수 없는 파일로 다시 돌아갈 수 있습니다.
파일을 제거할 수 없는 경우에 발생하는 오류를 종료되지 않는 오류라고 합니다. 종료되지 않는 오류가 발생하면 Windows PowerShell은 오류에도 불구하고 작업을 계속한 다음 출력과 함께 오류를 표시합니다.
보다 심각한 오류는 명령 처리를 중지합니다. 이러한 오류를 종료 오류라고 합니다. 종료 오류는 명령 처리를 중지합니다. 예를 들어 잘못된 데이터를 전송하거나 명령을 수행할 권한이 없는 경우 Windows PowerShell은 종료되지 않는 오류를 생성합니다.
Windows PowerShell 탐색
Windows PowerShell의 가장 강력한 기능 중 하나는 파일 시스템을 탐색할 때와 유사한 기술을 사용하여 여러 데이터 저장소를 탐색할 수 있는 기능입니다.
C: 및 D:와 같은 익숙한 파일 시스템 드라이브 외에 Windows PowerShell에는 대표적으로 HKEY_LOCAL_MACHINE(HKLM:) 및 HKEY_CURRENT_USER(HKCU:) 레지스트리 하이브, 사용자 컴퓨터의 디지털 서명 인증서 저장소(Cert:) 및 현재 세션의 함수(Function:)를 나타내는 드라이브가 포함되어 있습니다. 이러한 드라이브를 Windows PowerShell 드라이브라고 합니다.
Windows PowerShell은 Windows PowerShell 공급자에 의해 지원되는 몇 가지 유용한 드라이브와 함께 제공됩니다. Windows PowerShell 드라이브 목록을 보려면 다음과 같이 입력하십시오.
파일 시스템 탐색
Windows PowerShell을 시작할 때 사용자는 습관적으로 익숙한 cd, dir 또는 ls를 입력하려 할 수 있습니다. 이 경우 그대로 입력하십시오! cd는 Set-Location cmdlet(현재 위치를 지정한 경로로 변경하는 cmdlet)의 별칭이고, dir 및 ls는 Get-Childitem cmdlet(특정 위치의 하위 항목을 가져오는 cmdlet)입니다.
파일 시스템 드라이브를 탐색하려면 Set-Location(cd) 및 Get-Childitem(dir, ls) cmdlet을 사용합니다. Windows PowerShell에서 드라이브는 드라이브 이름 뒤에 콜론(:)을 사용하여 나타내며(예: C:) 상위 항목은 백슬래시(\) 또는 슬래시(/)로 하위 항목과 구별합니다(예: C:\Windows\System32).
Windows PowerShell에는 탐색을 도와주는 몇 가지 기능이 있습니다.
현재 디렉터리를 나타내는 기호(.)와 디렉터리의 내용을 나타내는 기호(*)가 있습니다.
홈 디렉터리($home)와 Windows PowerShell 설치 디렉터리($pshome)를 나타내는 기본 제공 변수가 있습니다.
다른 셸과 마찬가지로 위치를 변경하고, 디렉터리와 파일을 만들고 삭제, 이동 및 복사하고, 해당 속성을 변경할 수 있습니다. 경로 이름에 Tab 자동 채우기를 사용할 수도 있습니다. 자세한 내용은 Item cmdlet(Get-Item, Get-Childitem, New-Item, Remove-Item, Set-Item, Move-Item 및 Copy-Item)에 대한 도움말을 참조하십시오.
레지스트리 탐색
파일 시스템 드라이브를 탐색할 때와 동일한 기술을 사용하여 Windows 레지스트리를 탐색할 수 있습니다. Windows PowerShell에서 HKEY_LOCAL_MACHINE 하이브는 Windows PowerShell HKLM: 드라이브에 매핑되고, HKEY_CURRENT_USER 하이브는 Windows PowerShell HKCU: 드라이브에 매핑됩니다.
예를 들면 다음과 같습니다.
|
PS C:\> cd hklm:
PS HKLM:\> dir
PS HKLM:\> dir
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE
SKC VC Name Property
--- -- ---- --------
4 0 HARDWARE {}
1 0 SAM {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ dir <<<<
39 2 SOFTWARE {flash, (default)}
8 0 SYSTEM {}
PS HKLM:\> cd system\currentcontrolset\control
PS HKLM:\system\currentcontrolset\control> dir |
탐색해 보면 레지스트리 드라이브의 dir(Get-Childitem) 출력이 파일 시스템과 다른 것을 알 수 있을 것입니다. 레지스트리에는 서로 다른 정보를 포함하는 여러 개의 드라이브가 있기 때문에 셸은 여러 가지 데이터 보기를 제공합니다. 이 경우 출력에 하위 키 및 항목 이름 외에 하위 키 개수(SKC)와 값 항목 개수(VC)를 포함할 수 있도록 하위 키 및 항목 수를 아는 것이 중요합니다.
|
PS> cd "CurrentControlSet\Control\Session Manager"
PS> dir
Hive: Registry::HKEY_LOCAL_MACHINE\system\CurrentControlSet\Control\Session
Manager
SKC VC ChildName Property
--- -- --------- --------
0 1 AppCompatibility {AppCompatCache}
15 0 AppPatches {}
0 7 DOS Devices {AUX, MAILSLOT, NUL, PIPE, PRN, UNC, f... |
탐색할 때 레지스트리 항목이 나타나기 전에는 큰 차이를 발견하지 못할 것이니다. 레지스트리 키의 항목은 해당 항목이 있는 키의 속성으로 간주됩니다. 이러한 항목도 마찬가지로 Get-ItemProperty cmdlet을 사용하여 검색합니다.
예를 들어 Windows PowerShell 실행 정책 값을 보려는 경우 Get-ExecutionPolicy cmdlet을 사용하거나 HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell에 값을 저장하는 ExecutionPolicy 레지스트리 항목을 탐색할 수 있습니다.
|
PS C:\> cd hklm:
PS HKLM:\> cd software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell
PS HKLM:\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell> dir
PS HKLM:\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell> get-itemproperty -path . -name executionpolicy
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Micro
soft.PowerShell
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds
PSChildName : Microsoft.PowerShell
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
ExecutionPolicy : RemoteSigned |
인증서 저장소 탐색
사용자 컴퓨터의 디지털 서명 인증서 저장소도 탐색할 수 있습니다. 인증서 저장소는 Windows PowerShell Cert: 드라이브에 매핑됩니다. 다음 예제에서는 Set-Location(cd) 및 Get-Childitem(dir, ls)을 사용하여 Cert: 드라이브를 탐색하는 방법을 보여 줍니다.
|
PS C:\> cd cert:
PS cert:\> dir
Location : CurrentUser
StoreNames : {TrustedPeople, _NMSTR, Trust, REQUEST...}
Location : LocalMachine
StoreNames : {_NMSTR, Trust, REQUEST, TrustedPeople...}
PS cert:\> cd currentuser
PS cert:\currentuser> dir
Name : TrustedPeople
Name : _NMSTR
Name : Trust
Name : REQUEST
Name : AuthRoot
Name : ACRS
Name : My
Name : addressbook
Name : Disallowed
Name : CA
Name : UserDS
Name : Root
Name : TrustedPublisher
PS cert:\currentuser> cd authroot
PS cert:\currentuser\authroot> dir
Directory: Microsoft.PowerShell.Security\Certificate::currentuser\authroot
Thumbprint Subject
---------- -------
F88015D3F98479E1DA553D24FD42BA3F43886AEF O=C&W HKT SecureNet CA SGC Root, C=hk
F44095C238AC73FC4F77BF8F98DF70F8F091BC52 CN=Class 3TS Primary CA, O=Certplus, C=FR
EF2DACCBEABB682D32CE4ABD6CB90025236C07BC O="Colegio Nacional de Correduria Publica Mexicana, A.C.", CN="Autoridad C...
...
PS cert:\currentuser\authroot> get-childitem F88015D3F98479E1DA553D24FD42BA3F43886AEF
Directory: Microsoft.PowerShell.Security\Certificate::currentuser\authroot
Thumbprint Subject
---------- -------
F88015D3F98479E1DA553D24FD42BA3F43886AEF O=C&W HKT SecureNet CA SGC Root, C=hk
PS cert:\currentuser\authroot> get-childitem F88015D3F98479E1DA553D24FD42BA3F43886AEF | format-list -property *
PSPath : Microsoft.PowerShell.Security\Certificate::currentuser\authroot\F88015D3F98479E1DA553D24FD42BA3F43
886AEF
PSParentPath : Microsoft.PowerShell.Security\Certificate::currentuser\authroot
PSChildName : F88015D3F98479E1DA553D24FD42BA3F43886AEF
PSDrive : cert
PSProvider : Microsoft.PowerShell.Security\Certificate
PSIsContainer : False
Archived : False
Extensions : {}
FriendlyName : CW HKT SecureNet CA SGC Root
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter : 10/16/2009 2:59:00 AM
NotBefore : 6/30/1999 3:00:00 AM
HasPrivateKey : False
PrivateKey :
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 2, 235...}
SerialNumber : 00
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint : F88015D3F98479E1DA553D24FD42BA3F43886AEF
Version : 1
Handle : 1577256
Issuer : O=C&W HKT SecureNet CA SGC Root, C=hk
Subject : O=C&W HKT SecureNet CA SGC Root, C=hk |
기타 드라이브 탐색
파일 시스템, 레지스트리 및 인증서 저장소 외에도 Windows PowerShell에는 별칭(Alias:), 환경 공급자(Env:), 함수(Function:) 및 변수(Variable:) 드라이브를 포함하는 여러 가지 유용한 드라이브가 있습니다. 이러한 드라이브에서도 기본적으로 같은 기술을 사용하여 탐색할 수 있습니다.
Windows PowerShell 드라이브 정보
Windows PowerShell의 확장된 탐색 기능에 숨은 개념은 바로 Windows PowerShell 드라이브입니다.
Windows PowerShell 드라이브는 Windows PowerShell에서 사용 가능한 모든 데이터 저장소에 만들 수 있으며 C: 또는 "My Drive"와 같이 뒤에 콜론(:)을 붙여 유효한 이름을 지정할 수 있습니다. 이러한 드라이브는 파일 시스템 드라이브에서와 동일한 방법을 사용하여 탐색할 수 있습니다. 그러나 Windows PowerShell 드라이브는 Windows PowerShell에서만 볼 수 있습니다. Windows 탐색기 또는 Cmd.exe에서는 드라이브에 액세스하거나 볼 수 없습니다.
Windows PowerShell은 Windows PowerShell 공급자에 의해 지원되는 몇 가지 유용한 드라이브와 함께 제공됩니다. Windows PowerShell 드라이브 목록을 보려면 다음과 같이 입력하십시오.
또한 New-PsDrive cmdlet을 사용하여 사용자 고유의 Windows PowerShell 드라이브를 만들 수 있습니다. 예를 들어 사용자의 내 문서 디렉터리에 "MyDocs:"라는 새 드라이브를 만들려면 다음과 같이 입력하십시오.
|
new-psdrive -name MyDocs -psprovider FileSystem -root "$home\My Documents" |
이제 MyDocs: 드라이브를 다른 모든 드라이브와 동일한 방식으로 사용할 수 있습니다. 사용자 위치를 이 드라이브로 변경하거나 드라이브 내용을 열거하거나 드라이브 속성을 변경할 수 있습니다.
드라이브 및 공급자
Windows PowerShell 공급자는 Windows PowerShell의 드라이브를 사용자 세션에서 사용할 수 있도록 합니다. Windows PowerShell 공급자는 데이터를 손쉽게 보고 관리할 수 있도록 특수화된 데이터 저장소의 데이터를 Windows PowerShell에서 사용할 수 있게 해 주는 .NET 어셈블리입니다. Windows PowerShell 공급자에 대한 자세한 내용을 보려면 다음과 같이 입력하십시오.
|
get-help about_psprovider |
Windows PowerShell 공급자 목록을 보려면 다음과 같이 입력하십시오.
공급자 도움말 파일 목록을 보려면 다음과 같이 입력하십시오.
|
get-help -category provider |
특정 공급자에 대한 정보를 보려면 다음과 같이 입력하십시오.
예를 들면 다음과 같습니다.
Windows PowerShell 사용자 지정
이 절에서는 사용자 요구에 맞게 Windows PowerShell을 사용자 지정할 수 있는 몇 가지 방법을 설명합니다.
실행 정책 검토
스크립팅은 매우 강력한 도구이지만 악의적인 목적에 잘못 사용될 수 있습니다. 사용자 데이터 및 운영 체제의 무결성을 보호하기 위해 Windows PowerShell에는 특히 실행 정책을 비롯한 몇 가지 보안 기능이 포함되어 있습니다.
Windows PowerShell 실행 정책에서는 스크립트 실행에 대한 허용 여부 및 스크립트에 대한 디지털 서명 적용 여부(실행 가능한 경우)를 결정합니다. 또한 구성 파일을 로드할 수 있는지 여부도 결정합니다.
기본 실행 정책인 Restricted는 가장 안전한 실행 정책입니다. 이 정책이 적용되면 어떤 스크립트도 실행이 허용되지 않으며 Windows PowerShell 프로필을 포함하여 어떤 구성 파일도 로드할 수 없습니다. Windows PowerShell은 계속 대화형으로 사용할 수 있습니다.
그러나 스크립트를 실행하거나 구성 파일을 로드하려는 경우 사용자 시스템의 실행 정책을 변경할 수 있습니다. 자세한 내용을 보려면 다음과 같이 입력하십시오.
사용자 시스템의 실행 정책을 확인하려면 다음과 같이 입력하십시오.
사용자 시스템의 실행 정책을 변경하려면 Set-ExecutionPolicy cmdlet을 사용합니다. 예를 들어 실행 정책을 RemoteSigned로 변경하려면 다음과 같이 입력하십시오.
|
set-executionpolicy remotesigned |
Windows PowerShell 실행 정책은 Windows 레지스트리에 저장되며 Windows PowerShell을 제거하고 다시 설치하는 경우에도 그대로 유지됩니다.
Windows PowerShell 프로필
Windows PowerShell에 별칭, 함수 및 변수를 추가하는 경우 실제로는 현재 Windows PowerShell 세션에만 추가하는 것입니다. 세션을 종료하거나 Windows PowerShell을 닫으면 변경 내용이 손실됩니다.
이러한 변경 내용을 유지하려면 Windows PowerShell 프로필을 만들고 이 프로필에 별칭, 함수 및 변수를 추가할 수 있습니다. 프로필은 Windows PowerShell을 시작할 때마다 로드됩니다.
프로필을 로드하려면 사용자의 Windows PowerShell 실행 정책에서 구성 파일 로드를 허용해야 합니다. 그렇지 않으면 프로필 로드에 실패하고 Windows PowerShell에서 오류 메시지를 표시합니다.
프로필 이해
Windows PowerShell에는 네 가지 프로필을 만들 수 있습니다. 프로필은 로드되는 순서대로 나열됩니다. 한정된 프로필이 한정되지 않은 프로필보다 우선적으로 적용됩니다.
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
이 프로필은 모든 사용자 및 모든 셸에 적용됩니다.
%windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1
이 프로필은 모든 사용자에게 적용되지만 Microsoft.PowerShell 셸에만 적용됩니다.
%UserProfile%\My Documents\WindowsPowerShell\profile.ps1
이 프로필은 현재 사용자에게만 적용되지만 모든 셸에 영향을 줍니다.
%UserProfile%\\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
이 프로필은 현재 사용자와 Microsoft.PowerShell 셸에만 적용됩니다.
프로필 만들기
프로필을 만들고 공유 및 배포하여 대규모 기업에서 Windows PowerShell의 일관성 있는 보기를 적용할 수 있습니다.
프로필은 자동으로 생성되지 않습니다. 프로필을 만들려면 지정된 위치에 지정된 이름을 가진 텍스트 파일을 만들어야 합니다.
일반적으로 사용자 프로필이라고 하는 사용자 및 셸 고유의 프로필을 사용합니다. 이 프로필의 위치는 $profile 변수에 저장됩니다.
사용자 프로필이 만들어졌는지 확인하려면 다음과 같이 입력하십시오.
응답은 프로필이 있는 경우 True, 프로필이 없는 경우 False입니다.
사용자 프로필을 만들려면 다음과 같이 입력하십시오.
|
new-item -path $profile -itemtype file -force |
메모장에서 프로필을 열려면 다음과 같이 입력하십시오.
다른 프로필 중 하나(예: 모든 사용자 및 모든 셸에 적용되는 프로필)를 만들려면 다음과 같이 입력하십시오.
|
new-item -path C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 -itemtype file -force |
Windows PowerShell의 환경 변수에는 "%" 표기법을 사용할 수 없습니다. Windows 환경 변수를 식별하려면 $env:<variable>(예: $env:windir)과 같은 형식을 사용합니다.
|
new-item -path C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 -itemtype file -force |
메모장에서 프로필을 만들고 저장한 경우에는 파일 이름을 따옴표로 묶어야 합니다. 예를 들면 다음과 같습니다.
따옴표가 없으면 파일에 .txt 파일 이름 확장명이 추가되므로 Windows PowerShell에서 파일을 인식하지 못합니다.
프로필을 사용하여 별칭, 함수 및 변수를 저장할 수 있습니다. 매우 유용한 한 가지 함수로, 자주 사용하는 텍스트 편집기에서 프로필을 여는 함수가 있습니다. 예를 들어 다음 명령은 메모장에서 사용자 프로필을 여는 pro라는 함수를 만듭니다.
|
function pro { notepad $profile } |
잘 디자인된 프로필이 있으면 Windows PowerShell을 사용하고 사용자 시스템을 관리하기가 훨씬 쉬워집니다.