programming ⌨/파워쉘 PowerShell

나를 위한 PowerShell(2) : 매개변수의 종류

Kortsec1 2024. 2. 25. 23:39

본 내용은 이전 포스트와 연결됨

2024.02.25 - [programming ⌨/파워쉘 PowerShell] - 나를 위한 PowerShell(1) : 콘솔과 명령

 

나를 위한 PowerShell(1) : 콘솔과 명령

주변을 보면 윈도 운영체제를 사용하는 사람이 굉장히 많은 것을 알 수 있다. 이러한 환경에서 PowerShell은 자동화 스크립트와 같이 우리 업무의 효율을 높여줄 수 있고, 운영체제의 기능들과 상

kortsec1n4mationm.tistory.com

 

앞서 같이 해볼 문제가 하나 있다.

메모장 실행 후, PowerShell을 사용하여 이를 종료시켜라

 

가장 먼저 프로세스와 관련 있는 명령들을 찾아보자

Get-Command -Noun Process

Get-Command -Noun Process

Debug, Get, Start, Stop, Wait 이 출력된다.

이중 Stop-Process가 프로세스 종료와 관련이 있을 것 같다.

 

윈도 메모장을 실행 시킨 후 직접 명령어를 입력해 보자

PS에서 notepad 입력을 하던 직접 찾아서 열던 방법은 무관하다.

notepad

 

이후 아래 명령을 실행해 보면 정상적으로 메모장이 종료되는 것을 알 수 있다.

Stop-Process -Name notepad

 

오늘의 주제는 여기 명령줄 속 파라미터 -Name에 있다.

기존에 봐왔던 Get-Command의 -Verb, -Noun과 같은 매개변수와는 달리, -Name은 명령을 수행하는데 꼭 필요로 하는 필수 인자임을 기억하자

 

Get-Help

매개변수에 관해 들어가기 앞서 오늘 주로 사용할 Get-Help를 알고 가도록 하자

사용해 보면 알겠지만 PowerShell의 Get-Help는 정말 강력하다..

 

Get-Help

콘솔에 Get-Help를 입력하면 친절하게 본인을 설명해 준다.

 

이 중 몇가지 유용해 보이는 옵션들을 가져와 봤다.

 

1. Online

말 그대로 웹 브라우저를 통해 해당 명령의 정보를 보여준다.

아래 코드와 같이 Online 옵션을 넣어주면 된다.

Get-Help Stop-Process -Online

Get-Help Stop-Process -Online

 

2. ShowWindow

별도의 팝업창을 띄울 수도 있다.

옵션은 ShowWindow이며 실행 결과는 아래와 같다

Get-Help Stop-Process -ShowWindow

Get-Help Stop-Process -ShowWindow

 

3. Examples

PowerShell help는 퀄리티 좋은 예시들을 많이 제공한다는 점이 너무 좋은 것 같다

옵션은 Examples이며 원하는 명령어의 추가적인 활용을 볼 수 있다

Get-Help Stop-Process -Examples

Get-Help Stop-Process -Examples

 

이밖에도 파라미터, 속성 그리고 예제 모두를 포함하는 FullDetailed 옵션이 있다.

더 자세한 내용은 microsoft 페이지에서 확인가능하다

 

 

다양한 매개변수의 종류

본론으로 돌아와 포스트 앞부분에서 Name 파라미터가 어떻게 꼭 필요로 하는 매개변수임을 알 수 있었을까?

Get-Help를 보면 알 수 있다.

Get-Help Stop-Process -Parameter Name

Get-Help Stop-Process -Parameter Name

 

Get-Help에 따르면 -Name 파라미터필수이며 named라고 되어있다.

필수 여부는 말 그대로 이해가 되지만, 위치(Position)는 좀 어렵다.

 

Position : named 하면, 쉽게 파라미터이름과 그 값이 둘다 필요하다고 생각하면 된다.

맨 처음 Stop-Process의 상황에서는 -Name notepad가 된다.

구체적이고 명확한 이해를 위해 다음 예제를 살펴보자

 

Get-Help Get-Eventlog -Parameter Logname

Get-Help Get-Eventlog -Parameter Logname

Get-EventlogLogName 파라미터를 보면, 필수이지만 position : 0 으로 되어있다.

0의 구체적인 의미는 추후 살펴보고 전체적인 의미는 다음과 같다

Get-Eventlog 실행 시 LogName이란 매개변수는 필수로 입력받지만 파라미터의 이름('-LogName')은 필요하지 않다.

 

Get-EventLog System

Get-EventLog System

윈도 3가지 주요 속성인 System, Application, Security 중 하나를 입력해 보았다.

실제로 Get-EventLog -LogName System과 같이 매개변수명을 입력하지 않아도 정상적으로 실행이 됨을 알 수 있다.

 

 

추가로 파라미터가 값을 필요로 하지 않는 경우도 있다.

우리는 이를 switched parameters라고 부르고 이전 포스트에서 만나보기도 했다

바로 WhatIf가 그 예시다.

 

Get-Help Restart-Computer -Parameter WhatIf

Get-Help Restart-Computer -Parameter WhatIf

 

 

 

킵해두었던 Position : 0 0의 의미에 대해 이야기해보자

결론부터 얘기하자면, 명령 줄에서 첫 번째 인자가 해당 파라미터의 값으로 인식된다는 뜻이다.

 

Get-ChildItemFilterPath 파라미터를 살펴보자

Get-Help Get-ChildItem -Parameter Filter/Path

 

PathFilter의 Position 값이 각각 0과 1이다.

Get-ChildItem A B

그렇다면 위 코드의 상황에서 AB는 자동으로 PathFilter에 매핑된다.

 

실제로 두 매개변수를 뒤바꿔 명령을 실행하면 오류가 발생한다

Get-ChildItem *.txt C:\

 

요약


Get-Help를 통해 명령어의 설명을 볼 수 있다
    -Online : 웹 브라우저를 통해 보여준다
    -ShowWindow : 별도의 팝업창을 통해 보여준다
    -Examples : 다양한 예시들을 볼 수 있다

매개변수는 필수여부(Required)와 위치(Position)에 따라 특징이 나뉜다
    (true, named) : 명령 수행 시 파라미터명, 값 모두 필수
    (true, 0) : 명령 수행 시 필수 인자이지만, 파라미터 명은 필요 X
                    Position의 숫자는 인자 전달 시 순번을 의미
    (false, named) : 명령 수행 시 필수 인자가 아니지만, 입력 시 파라미터 명이 필요

Stop-Process : 프로세스를 종료한다 (-Name)
Get-EventLog : 윈도 이벤트 로그를 출력한다
Get-ChildItem : 지정된 위치의 항목 및 자식 항목을 가져온다


 

참고

https://sid-500.com/2018/01/02/powershell-for-beginners-part-3-the-parameters/

https://sid-500.com/2018/01/06/powershell-for-beginners-part-4-the-help/