PowerShell과 .NET

agnusdei·2025년 5월 6일

📘 PowerShell과 .NET: 구조적 이해

1. 개요: .NET이란 무엇인가?

.NET은 마이크로소프트(Microsoft)에서 만든 범용 소프트웨어 개발 프레임워크로, 여러 언어(C#, VB.NET, F# 등)와 다양한 플랫폼(Windows, Linux, macOS 등)을 지원합니다.
PowerShell은 바로 이 .NET 위에서 동작하는 자동화 및 스크립트 환경입니다.

  • 정식 명칭: .NET Platform (구 .NET Framework)
  • 핵심 역할: 프로그램 실행 환경 제공, 공통 라이브러리 제공, 언어 간 상호 운용
  • PowerShell과의 관계: PowerShell은 내부적으로 .NET의 CLR과 FCL을 직접 호출하여 기능을 수행함

2. .NET의 구성요소

🔹 2.1 CLR (Common Language Runtime)

  • .NET의 실행 엔진
  • 역할: 메모리 관리, 예외 처리, 가비지 컬렉션, 보안 등 제공
  • PowerShell은 이 위에서 스크립트를 컴파일하지 않고 바로 해석하고 실행

🔹 2.2 FCL (Framework Class Library)

  • 수천 개의 클래스 집합
  • 역할: 파일 시스템, 네트워크, UI, 암호화, 데이터베이스 등 거의 모든 기능 제공
  • PowerShell은 이 클래스들을 직접 호출하여 업무 자동화 가능

🔹 2.3 언어 컴파일러

  • C#, F# 등 .NET 지원 언어를 CLR이 이해할 수 있는 중간 언어(CIL)로 변환
  • PowerShell은 자체 파서로 해석하지만, 필요시 C# 컴파일도 수행 가능 (Add-Type)

3. PowerShell과 .NET의 연결

PowerShell은 .NET 클래스, 메서드, 속성을 직접 호출할 수 있는 고유한 스크립트 언어입니다.

🧩 기본적인 문법 구조

[네임스페이스.클래스이름]::정적메서드(인자)
(인스턴스).메서드()

예:

[System.Math]::Sqrt(16) # 정적 메서드
(Get-Date).AddDays(7)   # 인스턴스 메서드

4. 주요 .NET 클래스 실전 예제 (PowerShell 기준)

기능.NET 클래스PowerShell 예제
파일 읽기System.IO.File[IO.File]::ReadAllText("C:\file.txt")
디렉터리 정보System.IO.Directory[IO.Directory]::GetFiles("C:\Logs")
문자열 처리System.Text.StringBuilder$sb = New-Object Text.StringBuilder
날짜 계산System.DateTime(Get-Date).AddDays(5)
웹 요청System.Net.WebClient, System.Net.Http.HttpClient$wc = New-Object Net.WebClient; $wc.DownloadString("http://example.com")
암호화System.Security.Cryptography다양한 해시 생성 등 가능

5. 고급 사용법: PowerShell에서 직접 C# 컴파일

Add-Type -TypeDefinition @"
public class Calculator {
    public static int Add(int a, int b) => a + b;
}
"@
[Calculator]::Add(3, 5)

PowerShell은 .NET 컴파일 기능을 내장하여 스크립트 내에서 C# 코드를 정의하고 사용할 수 있음


6. 실무 활용 사례

6.1 시스템 모니터링 자동화

Get-Process | Where-Object { $_.CPU -gt 50 }

.NET의 System.Diagnostics.Process 클래스로부터 파생된 객체를 다룸

6.2 REST API 호출 (WebClient 또는 HttpClient 사용)

$client = [System.Net.Http.HttpClient]::new()
$response = $client.GetStringAsync("https://api.github.com").Result

6.3 암호화/복호화 자동화

$md5 = [System.Security.Cryptography.MD5]::Create()
$bytes = [System.Text.Encoding]::UTF8.GetBytes("Hello")
$hash = $md5.ComputeHash($bytes)
[BitConverter]::ToString($hash)

7. .NET Core / .NET Framework / .NET 5+ 차이

항목.NET Framework.NET Core.NET 5~8
플랫폼Windows 전용크로스 플랫폼크로스 플랫폼 (통합 버전)
PowerShell 버전Windows PowerShell 5.1PowerShell Core 6/7PowerShell 7+
지원 상태유지보수 중단 예정유지보수적극 개발 중

👶 어린이 버전 요약

  • .NET은 마이크로소프트가 만든 똑똑한 도구 상자예요.
  • PowerShell은 이 도구 상자를 빌려서 컴퓨터랑 대화하는 마법사예요.
  • System.IO.File 같은 도구로 파일도 읽고, System.Net.WebClient로 인터넷도 하고, Math로 계산도 하죠!

📌 정리

  • PowerShell을 깊이 있게 다루려면 .NET 클래스와 구조를 반드시 이해해야 함
  • 거의 모든 PowerShell 명령은 .NET 기반 객체 조작으로 귀결됨
  • 필요하면 C# 코드를 직접 집어넣어 사용할 수도 있음

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글