PowerShell을 사용하여 관리 작업 자동화 - Powershell 코드 작성 입문
해당 포스팅은 Microsoft Learn에서 제공되는
<Automate administrative tasks by using PowerShell> learning path를 학습하며 정리한 글 입니다.
Powershell은 플랫폼 간 작업 자동화, 구성 관리에 사용된다. Command-line shell 과 프로그래밍 언어로 구성되어 있는데주로 사용되는 용도들은
- 작업 자동화 및 오케스트레이션
- 구성 관리
- 서버 및 클라우드 관리
- 사용자 정의 도구 제작
- 스크립팅
오늘은 파워쉘 입/출력, 코드 입력 오류 진단, 요소 식별들을 공부해보겠음
New-Item HelloWorld.ps1
code HelloWorld.ps1
샌드박스를 사용해도 되지만 이미 powershell이 설치되어 있어서 위 명령어를 실행해보니
vscode에 HelloWorld.ps1 라는 파일이 생성되었다
New-Item이라는 명령어는 .ps1 파일(파워쉘 스크립트에 사용되는 확장자)를 디렉토리에 생성한다.
<code 명령어+파일명>은 코드 에디터에서 파일을 열어준다.
만약 다른 디렉토리에서 열고싶으면 파일명이랑 같이 경로를 적으면 됨.
Write-Output 'Hello World!'
# Write-Output 'Hello World!'
$name = Read-Host -Prompt "Please enter your name"
Write-Output "Congratulations $name! You have written your first code with PowerShell!"
다른 프로그래밍 언어랑 비슷하지만 구동시키는 방식은 더 공부해야 할것같다.
PowerShell에서 기본적인 요소들
Cmdlet
Cmdlet은 PowerShell에서 주로 사용하는 명령으로 동사-명사(Verb-Noun) 형식으로 작성됨. 동사(Verb)는 무엇을 할지, 명사(Noun)는 무엇에 대해 동작을 수행할지 나타낸다
문자열(String)
문자열은 기본적인 데이터 유형으로, 텍스트 데이터를 처리할때 사용됨.
PowerShell에서는 문자열을 큰따옴표("")나 작은따옴표('')로 묶어 정의함
>> 큰따옴표는 변수의 값을 출력할 수 있게 해줌
Read-Host 및 사용자 입력
Read-Host를 사용하여 사용자로부터 입력을 받을 수 있고
-Prompt 매개 변수를 사용해 입력을 요청할 메시지를 정의함
변수(Variable)
변수는 값을 저장할 수 있는 "컨테이너" 같은 개념. 변수는 달러 기호($)로 시작하고, 등호(=) 뒤에 저장할 값을 정의함.
ex) $name = "Chase"는 Chase라는 값을 변수 $name에 저장
파라미터(Parameter)
파라미터는 Cmdlet이 사용자로부터 입력을 받아 처리할 수 있게 해주는 요소
오류 처리
PowerShell 오류 메시지는 문제를 신속히 파악할 수 있게 도와줍니다. 오류 메시지를 주의 깊게 읽으면 시간을 절약할 수 있음.
Powershell 코드 작동 방식
PowerShell 코드는 추상 구문 트리(AST)로 먼저 컴파일된 후 실행됨. 이 과정은 코드 실행 전 오류를 확인하는 역할을 하며, 오류가 없을 경우 프로그램이 실행된다
Get-Help 명령을 사용하면 특정 명령어에 대한 세부 정보를 확인할 수 있는데
Get-Help -Name 'Write-Output' -Full
Get-Help
Get-Help는 명령어에 대한 도움말을 요청하는 명령어
-Full 스위치는 지정된 명령어에 대한 모든 정보(명령어 설명, 매개변수 정보, 예시) 등 포함
Get-Command
PowerShell에서 제공하는 모든 명령어를 탐색하려면 Get-Command * 명령어를 사용한다
와일드카드(*)는 패턴을 매칭하여 정보를 동적으로 찾을 수 있음
ex) Get-Command *User* : 이 명령은 User가 포함된 모든 명령어를 보여줌
PowerShell 통합 쉘
PowerShell은 통합 쉘을 제공하므로 코드를 예상대로 작동하는지 확인하려면
터미널에 코드를 입력하여 바로 테스트/상호작용이 가능하다
위의 예시들을 약간 응용해서 다시 연습해보았음
점검 문제를 풀어보자
다 맞았다~~~