« PREV : 1 : NEXT »

Exchange 관리자라면, 연결이 끊어진 사서함에 대해 알고 있을것이다.

하지만 혹시 부주의로 넘어갈수 있는 상황을 방지 하고자 여기 연결이 끊어진 사서함의 중요성과 확인 방법을 적어 보겠습니다.

연결이 끊어진 사서함은, Exchange 관리 도구의 받은 사람 구성에서 확인할수도 있고 Powershell 아래 명령을 통해서도 확인이 가능합니다.

Get-mailbox | Get-Mailboxstatistics | Where {$_.DisconnectDate -ne $null}

연결이 끊어진 사서함이 생기는 이유는 쉽게 말씀드리면 아래와 입니다.

사용자의 메일함을 사용안함, 삭제를 했을경우 연결이 끊어진 사서함으로 이동하게 되는데, 삭제와 사용안함의 차이는 계정과 관련이 있습니다.
사용안함 : 사용자 계정 아이디는 필요하고, 더이상 해당 메일함만 필요 없을 경우는 사용안함을 선택하여, 해당 사용자와 현재 메일함을 분리하는것이라고 생각하시면 됩니다.
다른 메일함을 연결하거나, 해당 사용자에게 메일함이 더이상 필요하지 않을때, 계정은 남겨두어야 할때 사용안함을 선택하시면 됩니다. Powershell 명령은 Disable-mailbox 입니다.

삭제 : 많은 분들이 이것을 사용하지는 않을것 같습니다만, 삭제는 계정과 메일함을 같이 지우게됩니다.
더이상 계정과 메일함 모두 필요없다면, 이것을 선택하시면 됩니다.
Powershell 명령은 Remove-mailbox 입니다.

연결이 끊어진 사서함 기본 삭제 주기(30일)까지 데이터 베이스에 끊어진 사서함으로 표시된후 온라인 유지 보수를 통해 영구적으로 삭제 됩니다.

하지만 간혹 사용자 사사함이 복구가 필요할때가 있습니다. (내용 확인 및 사용자 요구)
이때는 연결이 끊어진 사서함을 위에서 검색한후 Connect-mailbox 명령이나, 관리도구에서 해당 사서함을 검색한후 연결로 다른 사용자 혹은 기존 사용자로 연결해 줄수 있습니다.

[팁] 삭제되었는데 연결이 끊어진 사서함에 나타나지 않는경우 아래 명령을 사용하시면 현재 연결이 끊어진 사서함들을 정리, 갱신하여 줍니다.
Clean-MailboxDatabse
저작자 표시 비영리
Write your message and submit

Windows 에서 제공 하는 Powershell을 통해 많은 작업을 편리하게 Cmd로 확인할수 있습니다.

이를 더 편리 하게 사용하기위하여, Powershell을 이용해, 원하는 결과를 파일로 내보낸 다음 내보낸 파일을, 메일로 전송하는 작업을 예약작업으로 실행해 봅시다.

여기서는 다른 환경(Powershell 확장 명령)에서도 사용할수 있도록 Exchange 환경을 예로 들겠습니다.

1.원하는 결과 Powershell로 추출하기
아마 많은 분들이 알고 있으시리라 생각됩니다. Powershell에서는 export라는 명령과 |(파이프라인)을 통해 실행 결과를 저장 파일로 내보낼수있습니다.

쉽게 설명드리면
Get-ExchangeServer | where {$_.ishubtransportserver -eq "true"} | get-message -resultsize unlimited
위 명령은 Get-Exchangeserver의 실행결과를  |을 통해 저장한후 hubtransportserver로 지정된 정보를 필터링을 통해 골라내  조건에 맞는 정보만 결과값으로 가지고 있으라는 명령입니다. 여기에 아래 명령를 하나더 붙였다고 생각하시면 됩니다.
| get-message -resultsize unlimited
그럼 그결과를 가지고 다시 조건을 거는 결과 인데 위 처음 실행한 명령에서 HubTransport 서버의 정보가 남아 있겠죠 그 결과를 가지고, Get-Message를 하라는 명령에 다시 조건을 걸어, 사이즈가 unlimited인 메세지를 결과만 남게 됩니다.

위 명령을 실행하면 아래와 같은 결과를 가지게 됩니다.


*사이트 보호를 위해 실제 출력 데이터 내용은 뺐습니다.^^;
그럼 파일까지 생성해 볼까요?
Get-ExchangeServer | where {$_.ishubtransportserver -eq "true"} | get-message -resultsize unlimited | csv-export Queue.csv
자 이제 이해가 확~ 되시죠? ^^ |(파이프라인)을 통해 결과를 명령어로 출력하도록 하는 것 입니다.
위 명령을 자주 사용하신다면 ps1확장자를 가진 파일로 생성(ASCII)하시면 됩니다.
Check-Queue.ps1
그럼 이제 메일을 전송 하는 단계를 진행해 봅시다.

2. Powershell 명령 예약작업 등록하기
이건 진행해본 사람들은 아마 쉽게 바로 실행하기는 않될거라는것을 아실겁니다.
눈치가 있으신 분들은 아마 Technet을 찾아보시고, Google 검색을 하셔서 찾아 내셨을거라 생각합니다.
저도 여러 삽질끝에 확인된 결과를 여기 정리해 드릴게요.

Powershell 명령어는 특정 확장자를 가지고 있어  바로 실행이 되지 않고, Powershell 을 통해 실행하는 연결 문서를 실행하듯이 실행하셔야 합니다.
예로 Check-Queue.ps1(Powershell 확장자)를 CMD에서 실행하고자 하신다면,
Powershell Check-Queue.ps1
이라고 입력해 주시면 됩니다.

그럼 실행이 되었을까요?

아마 위 명령으로 오류 메세지와 함께 실행이 되지 않을것 입니다.
이유는 즉, Get-ExchangeServer라는 명령이 Powershell 기본 명령이 아닌, Exchange Server 전용 Powershell 명령이기 때문입니다.
이를 해결하기 위해 제공하는 옵션으로 -PSConsoleFile을 사용할수 있습니다.
위 명령을 통해 확장 명령이 등록된 psc1(환경설정파일)을 연결해주시면, 해당 확장 명령이 사용가능합니다.
Exchange Server용 psc1는 Exchange Server 설치 경로은 Bin에 위치 합니다. 
그럼 다음과 같이 입력해 봅시다.
POWERSHELL.Exe -PSconsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\exshell.psc1" -COMMAND "& {& '\\Path\Check-Queue.ps1'}"
위처럼 실행 경로 앞뒤로 }로 묵는 이유는 스크립트 상 경로 오류를 막기 위함 입니다.

정상 실행결과가 생성된다면 위 명령을 cmd(확장자), bat(확장자)로 저장하여 쉘 스크립트로 실행가능하도록 만듭니다.
Job1.bat라고 저장합니다.
그리고 제어판 예약 작업을 실행하여, 방금 만든 Job1.bat를 등록하시면 정상 예약 작업 실행이 가능하게 됩니다. ^^

어느덧 마지막 단계이네요,
이제 자동 실행까지 원하는 결과를 얻을수 있는데 매번 서버에 들어가서 확인해야 한다면 참으로 불편하겠죠,
그것을 위해 자신 혹은 해당 봐야하는 담당자에게 메일을 보내는 스크립트를 생성해 봅시다.


3. 실행결과 메일로 첨부하여 전송하기
첨부 파일 저장하는 명령어는 VBS의 기능을 사용합니다.
하지만Powershell도 VBS를 지원하기 때문에 잘 동작한답니다.
메일을 보내는 스크립트는 다음과 같습니다.

$filename = "\\Path\Queue.csv"
$smtpServer = "localhost"

$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($filename)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

$msg.From = from@domain.com
$msg.To.Add(to@domain.com)
$msg.Subject = "현재 Queues 현황"
$msg.Body = "안녕하세요 ITKA 올엠입니다. 결과 파일로 첨부하였습니다."
$msg.Attachments.Add($att)

$smtp.Send($msg)
이 부분은 길게 설명 않드리겠습니다. 이것은 그대로 사용하시면 되고, 대신 SMTP의 릴레이 설정을 Enable 하셔야 하고,
첨부 파일의 경로는 전체경로로 입력하시기 바랍니다.(미지정시 기본 경로가 로그인 유저의 내문서 경로가 됩니다.) 
그리고, Exchange의 경우 받는 사용자의 사서함을 찾는 경우가 발생할수 있습니다.


추가 궁굼하신점, 틀린부분 보충 설명은 댓글및 방명록에 남겨주세요..

저작자 표시 비영리
Write your message and submit

Exchange Service 확인 방법

Posted 2010/01/20 13:47

서버 연결도 잘되고, 글로벌 카달로그도 정상 엑세스가 된다면, Exchange 서비스에 문제가 있는지 확인해 봐야 하는데
이 Exchange 서비스가 정상 실행되지 않는지, 빠르게 확인이 가능한 Powershell 명령이 있습니다.

바로,
Test-ServiceHealth 인데요,
사용법은 Test-ServiceHealth -server 서버이름 으로 사용하시면 됩니다.

저작자 표시 비영리
Write your message and submit

메일 삭제 Powershell

Posted 2009/12/15 09:33
갑자기 어떤 사용자가 그룹으로 메일을 보냈는데, 반드시 취소해야 한다는 연락이 들어왔다,

일반적으로 보낸 메일은 발송함에서 읽은 여부와, 회송을 통해 보낸 메일을 취소할수 있다, 단 수신자가 이미 메일을 읽었을 경우에는 회송하지 못한다.

그리고 그룹으로 보냈을 경우, 개별 확인이 되지 않기 때문에 회송이 되지 않는다.

이때는 관리자에게 전화하여, 수신자들의 메일 사서함에서 삭제를 요청할것인데... 어떻게 효과적으로 지울수 있을까..

아래 옵션을 통해 효과적으로 삭제할수 있습니다.
Get-Mailbox -Server 서버이름 | Export-Mailbox -SubjectKeywords “제목” -StartDate “12/13/2009″ -SenderKeywords tset@test.com  -DeleteContent

Get-Mailbox -Server 명령을 통해 검색할 메일 박스 서버를 지정하고, Export-Mailbox에 3가지 옵션 ( 제목, 검색활성날짜, 보낸사람)을 지정하여, 효과적으로 메일을 삭제할수 있도록 합니다.

-SubjectKeywords : 검색할 제목입니다. 입력한 문구가 들어간 메일이 포함됩니다.
-StartDate : 입력한 날짜 이후부터 검색합니다. -EndDate도 있겠죠? ^^; 의미는 같습니다. 이전 날짜 검색
-SenderKeywords : 보낸사람을 포함할수 있습니다.
-DeleteContent : 찾은 메일을 삭제하게 됩니다.
이외에도 다양한 옵션이 있으니, 찾고자 하거나, Export 하고자 하는 메일을 다양하게 시도해 보시기 바랍니다.

Tip Import-Mailbox 명령을 통해 메일 사서함에 넣을수도 있습니다.
 Get-Mailbox -Identity 사용자 | Import-Mailbox –PSTFolderPath 파일경로

 

저작자 표시 비영리
Write your message and submit

Windows PowerShell™ 사용 설명서

Posted 2009/09/10 21:18

 

Windows PowerShell™ 사용 설명서
Microsoft Corporation

게시일: 2006 9

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

이 설명서에서는 Windows PowerShell의 기본 개념 및 기능에 대해 설명하고 Windows PowerShell을 사용하여 시스템을 관리할 수 있는 방법을 제안합니다.


저작자 표시 비영리
Write your message and submit

PowerShell Technet 강의 노트 한글

Posted 2009/09/10 12:56

Write your message and submit

Windows PowerShell

Posted 2009/04/18 00:00

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 이름> -detailed

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

새 스크립트 언어

Windows PowerShell은 다음과 같은 이유로 기존 언어 대신 자체 언어를 사용합니다.

    Windows PowerShell에서는 .NET 개체를 관리할 언어가 필요합니다.

    cmdlet 사용을 위해 일관성 있는 환경을 제공하는 언어가 필요합니다.

    단순한 작업을 복잡하게 만들지 않으면서 복잡한 작업을 지원하는 언어가 필요합니다.

    C# 같은 .NET 프로그래밍에 사용되는 수준 높은 언어에 적합한 언어가 필요합니다.

Windows 명령 및 유틸리티

Windows PowerShell에서는 Windows 명령줄 프로그램을 실행하고 메모장 및 계산기와 같은 그래픽 사용자 인터페이스가 있는 Windows 프로그램을 시작할 수 있습니다. 또한 프로그램에서 생성하는 텍스트를 캡처하고 Cmd.exe에서와 거의 동일한 방법으로 셸에서 사용할 수 있습니다.

개체 처리

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

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

예를 들어 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 명령으로 전달됩니다. 파이프라인 연산자(|)는 왼쪽에 있는 명령의 결과를 오른쪽에 있는 명령으로 보냅니다. Microsoft® Windows® PowerShell에서는 문자열을 조작하거나 데이터 오프셋을 계산할 필요가 없습니다.

PS> ipconfig | findstr "Address"

IP Address. . . . . . . . . . . . : 172.28.21.5

IP Address. . . . . . . . . . . . : 172.30.160.225 


상호 작용 및 스크립팅

대화형 환경

다른 셸과 마찬가지로 Windows PowerShell은 완전한 대화형 환경을 지원합니다. 프롬프트에 명령을 입력하면 명령이 처리되고 셸 창에 출력이 표시됩니다. 명령의 출력을 파일 또는 프린터로 보내거나 파이프라인 연산자(|)를 사용하여 다른 명령으로 출력을 보낼 수 있습니다.

스크립팅 지원

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

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

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

c:\test\testscript.ps1 


또는

c:\test\testscript 


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

.\testscript.ps1  


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

get-help about_signing 


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

Windows PowerShell 시작

시작 메뉴에서 Windows PowerShell을 시작하려면 시작, 모든 프로그램, Windows PowerShell 1.0을 차례로 클릭한 다음 Windows PowerShell을 클릭합니다.


실행 상자에서 Windows PowerShell을 시작하려면 시작, 실행을 차례로 클릭하고 다음과 같이 입력하십시오.

powershell 


명령 프롬프트(cmd.exe) 창에서 Windows PowerShell을 시작하려면 명령 프롬프트에서 다음과 같이 입력하십시오.

powershell 


Windows PowerShell 시작 옵션을 보려면 명령 프롬프트 창에서

다음과 같이 입력하십시오.

powershell -? 


Windows PowerShell이 열리면 Get-Help cmdlet을 사용하여 도움말을 찾을 수 있습니다. Windows PowerShell 명령 프롬프트에서 다음과 같이 입력하십시오.

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-Help, Get-Command, Get-Process, Get-Service 및 Get-Eventlog와 같은 몇 가지 기본 cmdlet에 대해 알아야 합니다.

Cmdlet 도움말의 가장 단순한 보기를 표시하려면 cmdlet 이름 앞에 "get-help"를 입력합니다. 예를 들어 Get-Command cmdlet에 대한 도움말을 보려면 다음과 같이 입력하십시오.

get-help get-command 


cmdlet 도움말에 형식이 제대로 지정되지 않은 경우, 즉 XMLNS 태그로 시작하는 경우 사용자 시스템의 Windows PowerShell 실행 정책에 따라 시스템이 cmdlet 도움말의 형식을 지정하는 구성 파일을 로드하지 못했을 수 있습니다. 실행 정책에 대한 자세한 내용을 보려면 다음을 입력하십시오.

get-help about_signing  


매개 변수 설명 및 예제를 포함하여 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에 대한 도움말을 표시하려면 다음과 같이 입력하십시오.

man get-command 


또는

help get-command 


특정 도움말 항목을 요청하는 경우 Get-Help는 해당 항목의 내용을 표시합니다. 그러나 와일드카드 문자를 사용하여 둘 이상의 항목을 요청하면 Get-Help는 항목의 목록을 표시합니다. 예를 들어 "Get" cmdlet에 대한 도움말 항목의 목록을 보려면 다음과 같이 입력하십시오.

get-help get-*

Windows PowerShell의 개념에 대한 도움말은 "about_"으로 시작합니다. Windows PowerShell 개념에 대한 도움말을 표시하려면 개념 이름 앞에 "get-help"를 입력합니다. 예를 들어 와일드카드에 대한 도움말을 보려면 다음과 같이 입력하십시오.

get-help about_wildcard 


Windows PowerShell의 모든 개념 도움말 항목의 목록을 표시하려면 다음과 같이 입력하십시오.

get-help about_* 


도움말 항목을 읽고 예제를 연습해 보면 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 get-alias 


또는

get-help 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 사용자 프로필에 추가합니다.

사용자 세션의 모든 별칭을 찾으려면 다음과 같이 입력하십시오.

get-alias 


특정 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" 별칭을 만들려면 다음과 같이 입력하십시오.

set-alias gh get-help 


프로그램을 시작하는 명령과 같은 명령에 대한 별칭도 만들 수 있습니다. 예를 들어 메모장에 대해 "np" 별칭을 만들려면 다음과 같이 입력하십시오.

set-alias np c:\windows\notepad.exe


(메모장의 경로는 사용자 시스템마다 다를 수 있습니다.)

별칭 삭제

별칭을 삭제하려면 Remove-Item cmdlet을 사용하여 Alias: 드라이브에서 해당 별칭을 삭제합니다. 예를 들어 "ls" 별칭을 제거하려면 다음과 같이 입력하십시오.

remove-item alias:ls 


함수를 사용하여 대체 이름 만들기

cmdlet, 함수 또는 실행 파일에는 별칭을 만들 수 있지만 매개 변수가 포함된 명령에는 별칭을 만들 수 없습니다. 대신 별칭처럼 작동하는 함수를 만들 수 있습니다.

예를 들어 Windows XP를 실행하는 컴퓨터에서 메모장을 사용하여 Boot.ini 파일을 열려면 다음과 같이 입력하십시오.

notepad c:\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 환경 변수의 경로를 보려면 다음과 같이 입력하십시오.

PS> $env: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 드라이브 목록을 보려면 다음과 같이 입력하십시오.

get-psdrive 


파일 시스템 탐색

Windows PowerShell을 시작할 때 사용자는 습관적으로 익숙한 cd, dir 또는 ls를 입력하려 할 수 있습니다. 이 경우 그대로 입력하십시오! cd는 Set-Location cmdlet(현재 위치를 지정한 경로로 변경하는 cmdlet)의 별칭이고, dirls는 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 드라이브 목록을 보려면 다음과 같이 입력하십시오.

get-psdrive 


또한 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-psprovider 


공급자 도움말 파일 목록을 보려면 다음과 같이 입력하십시오.

get-help -category provider 


특정 공급자에 대한 정보를 보려면 다음과 같이 입력하십시오.

get-help <공급자 이름>


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

get-help registry 


Windows PowerShell 사용자 지정

이 절에서는 사용자 요구에 맞게 Windows PowerShell을 사용자 지정할 수 있는 몇 가지 방법을 설명합니다.

실행 정책 검토

스크립팅은 매우 강력한 도구이지만 악의적인 목적에 잘못 사용될 수 있습니다. 사용자 데이터 및 운영 체제의 무결성을 보호하기 위해 Windows PowerShell에는 특히 실행 정책을 비롯한 몇 가지 보안 기능이 포함되어 있습니다.

Windows PowerShell 실행 정책에서는 스크립트 실행에 대한 허용 여부 및 스크립트에 대한 디지털 서명 적용 여부(실행 가능한 경우)를 결정합니다. 또한 구성 파일을 로드할 수 있는지 여부도 결정합니다.

기본 실행 정책인 Restricted는 가장 안전한 실행 정책입니다. 이 정책이 적용되면 어떤 스크립트도 실행이 허용되지 않으며 Windows PowerShell 프로필을 포함하여 어떤 구성 파일도 로드할 수 없습니다. Windows PowerShell은 계속 대화형으로 사용할 수 있습니다.

그러나 스크립트를 실행하거나 구성 파일을 로드하려는 경우 사용자 시스템의 실행 정책을 변경할 수 있습니다. 자세한 내용을 보려면 다음과 같이 입력하십시오.

get-help about_signing 


사용자 시스템의 실행 정책을 확인하려면 다음과 같이 입력하십시오.

get-executionpolicy 


사용자 시스템의 실행 정책을 변경하려면 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 변수에 저장됩니다.

사용자 프로필이 만들어졌는지 확인하려면 다음과 같이 입력하십시오.

test-path $profile 


응답은 프로필이 있는 경우 True, 프로필이 없는 경우 False입니다.

사용자 프로필을 만들려면 다음과 같이 입력하십시오.

new-item -path $profile -itemtype file -force 


메모장에서 프로필을 열려면 다음과 같이 입력하십시오.

notepad $profile 


다른 프로필 중 하나(예: 모든 사용자 및 모든 셸에 적용되는 프로필)를 만들려면 다음과 같이 입력하십시오.

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 


메모장에서 프로필을 만들고 저장한 경우에는 파일 이름을 따옴표로 묶어야 합니다. 예를 들면 다음과 같습니다.

"profile.ps1" 


따옴표가 없으면 파일에 .txt 파일 이름 확장명이 추가되므로 Windows PowerShell에서 파일을 인식하지 못합니다.

프로필을 사용하여 별칭, 함수 및 변수를 저장할 수 있습니다. 매우 유용한 한 가지 함수로, 자주 사용하는 텍스트 편집기에서 프로필을 여는 함수가 있습니다. 예를 들어 다음 명령은 메모장에서 사용자 프로필을 여는 pro라는 함수를 만듭니다.

function pro { notepad $profile } 


잘 디자인된 프로필이 있으면 Windows PowerShell을 사용하고 사용자 시스템을 관리하기가 훨씬 쉬워집니다.

Write your message and submit