PowerShell은 명령줄 도구이지만 그래픽 인터페이스의 기초로 사용될 수도 있다는 것을 알고 계셨나요? 특정 상황에는 명령줄이 가장 적합한 종류의 인터페이스가 아닐 때도 있습니다. 서비스 데스크를 위한 PowerShell GUI를 구축하는 것이 좋은 예입니다. 이는 그래픽 도구를 구축하는 것이 더 적합한 경우 중 하나입니다.
Not a reader? Watch this related video.
도움말 데스크에서 비밀번호 재설정 시 엔드 사용자 확인을 강제로 적용하세요. Specops Secure Service Desk를 사용하여 사회 공학적 취약성을 줄입니다. 데모를 위해 문의하세요!
PowerShell은 .NET 기능과 기능을 사용하고 노출할 수 있습니다. 결과적으로 생성한 스크립트에 대한 GUI 프론트 엔드를 작성하는 것이 가능합니다. PowerShell GUI를 구축하는 것은 초보자에게는 복잡해 보일 수 있습니다.
하지만 PowerShell 스크립트 작성에 기본 경험이 있다면 스크립트에 대한 GUI를 생성하는 연습을 배우지 않을 이유가 없습니다.
이 게시물에서는 Windows Presentation Framework (WPF)를 사용하여 PowerShell GUI를 작성하는 방법을 배우게 됩니다.
사전 준비 사항
시작하기 전에 다음 요구 사항을 충족하는지 확인하십시오:
- Visual Studio 2017 또는 이후 버전 – 이를 사용하여 WPF를 사용하여 그래픽 사용자 인터페이스를 생성합니다. 무료/커뮤니티 버전을 다운로드할 수 있습니다.
- A script editor – I use Visual Studio Code, but you can also use another text editor of your choice. Some other options are Notepad++ and the built-in PowerShell ISE
- A Windows 10 computer with Windows PowerShell 5.1.
스크립트 작성하기
이 게시물에서는 Main.ps1이라는 간단한 스크립트를 만들게 됩니다. 이 스크립트에서는 Win32_LogicalDisk WMI 클래스를 쿼리하여 로컬 또는 원격 시스템에서 디스크 정보를 추출하는 코드를 작성합니다.
먼저 GUI를 둘러싸는 스크립트가 필요합니다. 이 게시물에서는 컴퓨터 이름을 입력하고 디스크 정보를 쿼리할 수 있는 스크립트를 사용하기로 결정했습니다. 이는 GUI를 작성하는 데 필수적인 것은 아닙니다. 이 게시물에서 배운 기술을 사용하여 자신의 스크립트에 GUI를 적용하세요.
예제 스크립트로서 다음 동작을 수행하는 함수를 만들겠습니다:
- 쿼리할 컴퓨터의 이름을 입력받기
- 컴퓨터를 쿼리하고 고정 디스크 정보를 변수에 저장하기
- 결과 반환하기
함수 작성하기
아래는 이 프로젝트에 사용할 Get-FixedDisk
라는 함수입니다. 이 프로젝트의 목적은 대상 컴퓨터의 이동 불가능한 또는 고정 디스크에 대한 정보를 가져오는 것입니다.
이 코드 조각은 그대로 사용할 수 있지만, 함수를 도트 소스로 로드하고 매번 명령을 수동으로 입력할 필요 없이 빠른 쿼리를 수행하려는 경우 GUI를 만드는 것이 좋습니다.
코드에 param () 블록을 추가한 것을 볼 수 있습니다. 이는 함수가 지정된 데이터 유형을 기반으로 입력을 허용하도록 지시하기 위한 것입니다.
예를 들어, Computer
매개 변수를 추가했습니다. 이 매개 변수는 문자열 값을 허용합니다. 또한 Mandatory
매개 변수 속성을 추가하여 런타임에서 Computer
매개 변수가 지정되지 않은 경우 함수가 실행되지 않도록 보장합니다.
다음으로, 18번째 줄에서는 실제 WMI 쿼리 명령을 보여줍니다. 이 명령은 모든 논리 디스크의 목록을 가져와 $DiskInfo
라는 변수에 결과를 저장합니다. 또한 DriveType=3
인 디스크만 가져오도록 필터를 추가했습니다. 이 필터는 로컬 고정 디스크에 대한 정보만 표시되도록 보장합니다.
코드 가져 오기 (도트 소싱)
이 시점에서 작동하는 스크립트를 가지고 테스트해볼 준비가 되었습니다. 그러나 스크립트를 테스트하기 전에 PowerShell 세션에 코드를 가져와야합니다. PowerShell 세션에 코드를 로드하는 한 가지 방법은 도트 소싱(dot sourcing)입니다.
스크립트를 도트 소스화하려면 스크립트 경로 앞에 점(.
)과 공백을 입력하면 됩니다. 스크립트가 C:\PoshGUI-sample 폴더에 있다면 아래와 같이 도트 소스화 할 수 있습니다.
현재 작업 디렉토리가 아닌 경우 전체 경로를 지정할 수도 있습니다. 아래 예제 코드에서는 스크립트의 전체 경로를 볼 수 있습니다.
이제 코드를 메모리로 가져왔으므로 만든 함수를 테스트할 수 있습니다. 아래 예제에서는 Get-FixedDisk
함수가 컴퓨터 poshLabExc를 쿼리하는 데 사용되었습니다.
PowerShell GUI 만들기
이 시점에서 Main.ps1이라는 스크립트 파일을 생성하고 스크립트 내에서 Get-FixedDisk
함수를 생성했습니다. 또한 함수가 작동하는지 테스트하고 확인할 수 있었습니다.
스크립트가 작동한다는 것을 알았으므로 이제 GUI를 만들기 시작할 수 있습니다.
PowerShell GUI 폼 디자인
먼저 GUI가 어떻게 보일지와 사용할 요소를 계획하세요. 이 간단한 예제에서는 다음과 같은 GUI가 있을 것입니다:
- a text box where the computer name can be entered
- a button to execute the function
- a text box where we can display the results
다음으로, 구축을 시작할 수 있습니다!
GUI를 만들기 시작하려면 Visual Studio를 열고 새 프로젝트를 생성하십시오.
Visual Studio를 열면 파일 (1)을 클릭하십시오. -> 새로 만들기 (2) -> 프로젝트 (3).

새 프로젝트 창에서 Visual C# (1)을 선택하고, WPF 앱(.NET Framework) (2)을 선택한 후, 이름을 PoshGUI-sample (3)로 변경하고 확인을 클릭하십시오.

프로젝트가 생성되면, 이름이 MainWindow.xaml인 빈 폼이 나타납니다.

이 폼을 우리의 요구 사항에 맞게 서식을 지정해야 합니다. 아래에 추가해야 할 컨트롤 및 형식이 나와 있습니다.
- 창
- 제목: 디스크 정보
- 높이: 326
- 너비: 403
- 컨트롤(4)
- 레이블
- 내용: “컴퓨터 이름:”
- 여백: 10, 10, 0, 0
- 텍스트 상자
- 이름: txtComputer
- 텍스트: “”
- 높이: 23
- 너비: 174
- 버튼
- 이름: btnQuery
- 내용: 쿼리
- 여백: 0, 13, 12, 0
- 텍스트 상자
- 이름: txtResults
- 텍스트: “”
- 읽기 전용: True
- 여백: 10, 60, 0, 0
- 높이: 225
- 너비: 373
- 레이블
최종적으로 폼의 외관은 아래 이미지와 유사해야 합니다. 창의 레이아웃을 다르게 재배치할 수도 있습니다. 창조적으로 해보세요!

스크립트 및 PowerShell GUI 결합
디자인을 완성하고 나면, 이제 스크립트와 통합을 시작할 수 있습니다.
PowerShell은 폼을 기본적으로 표시할 수 없습니다. 폼을 표시하기 위해 스크립트 맨 위에 한 줄의 코드를 추가하여 WPF 폼의 렌더링을 지원해야 합니다.
그런 다음 다음 작업을 수행하는 코드를 추가하세요:
- 폼의 XAML 코드를 가져와서 읽기
- 각 명명된 컨트롤에 할당된 동적 변수 생성
- 폼 표시
아래는 스크립트 내의 업데이트된 코드입니다.
참고:
$xamlFile
라인을 수정하여 MainWindow.xaml 파일의 전체 경로를 지정하십시오.
참고:
$Null = $window.ShowDialog()
는 스크립트 내에서 항상 마지막 코드 줄이어야 합니다.
이 코드를 Main.ps1 스크립트를 실행하여 실행하면 아래 예시 출력이 표시됩니다.

보시다시피, 세 개의 명명된 컨트롤에 변수가 할당되었습니다. 이러한 변수 이름은 나중에 스크립트에서 컨트롤 로직 코드를 추가할 때 참조될 것입니다.
- var_btnQuery
- var_btnComputer
- var_txtResults
이 시점에서 스크립트는 형식을 표시할 수는 있지만, 아직 코드를 추가하지 않았으므로 컨트롤은 사용할 수 없습니다.
버튼 클릭 이벤트 코드 추가
이제 스크립트를 수정하여 GUI를 가져오고 표시하는 것이 성공적으로 이루어졌으므로, 컨트롤에 코드를 추가하여 디스크 정보 데이터를 검색하고 표시할 수 있습니다.
이 프로젝트에서는 btnQuery
버튼만 동작이 할당될 것입니다. 다른 컨트롤은 입력 및 출력/표시 컨트롤로만 사용됩니다. 따라서 btnQuery
에는 클릭 이벤트 코드만 추가하면 됩니다.
btnQuery
에 클릭 동작을 추가하려면 아래의 코드를 해당 변수 이름 $var_btnQuery
에 할당하세요. 아래의 코드를 복사하여 스크립트의 Get-Variable var_*
와 $Null = $window.ShowDialog()
코드 참조 사이에 삽입하세요.
완성된 PowerShell GUI 테스트
모든 부분을 다루었으므로, 아래는 함수와 PowerShell GUI를 통합한 스크립트의 완성 코드입니다.
아래에서 PowerShell에서 스크립트를 호출한 후 PowerShell GUI 창이 나타납니다. 그런 다음 유효한 컴퓨터 이름을 입력하여 기능을 테스트할 수 있습니다.

사용자 위장 기회를 제거하는 인증 방법으로 호출자를 안전하게 확인하세요. Specops Secure Service Desk으로 도움말 데스크 해커 차단하기. 무료로 사용해 보세요!
요약
이 문서에서는 입력을 받아 결과를 반환하는 간단한 함수를 생성하는 방법을 배웠습니다. 또한 기본적인 WPF PowerShell GUI를 생성하는 방법과 PowerShell 스크립트의 프론트엔드로서 가져오는 방법도 배웠습니다.
이것은 단순한 스크립트와 GUI의 조합입니다. 다음과 같은 여러 가지 개선점이 있습니다:
- 사이즈와 사용 가능한 공간을 GB 값으로 표시하는 방법의 형식 지정.
- 표시되는 속성의 이름 변경.
- 결과를 표시하는 데 GridView 대신 TextBox 사용.
- CSV 파일에서 서버 목록을 반복하는 가져오기 버튼 추가.
요구 사항에 따라 수정하고 기능을 추가하는 것은 당신에게 달려 있습니다.