VMWare의 PowerCLI는 ESXi 지원 하드웨어의 가상화 관리자들을 위한 만능 인터페이스가 되고 있습니다. PowerShell과 PowerCLI를 사용하여 VMware를 관리하는 방법을 배우는 것은 여러분의 도구 상자에 강력한 추가가 될 것입니다. 이 PowerCLI 튜토리얼에서는 그것을 어떻게 할지에 대해 배우게 될 것입니다.
이 튜토리얼에서는 다음을 배울 수 있습니다:
- PowerCLI를 사용하여 VMware 인프라에 연결하는 기본 사항
- VMware 개체와 작업하기 위한 cmdlet에 익숙해지기
- 자신을 탐색하기 위한 지식을 얻기
- PowerCLI를 통해 VMware를 더욱 관리하기
시작해 봅시다!
필요한 것과 알아야 할 사항
이 PowerCLI 튜토리얼을 시작하기 전에, 우리 둘 다 동일한 페이지에 있는지 항상 확인하는 것이 중요합니다. 이 글에서는 다음을 가정하고 있습니다:
- 기본적인 PowerShell 경험이 있다. 당신이 PowerShell 전문가일 필요는 없지만, PowerShell에 대해 어느 정도의 이해가 있다면 도움이 될 것입니다.
- VMware ESXi 호스트 또는 vCenter 애플라이언스에 연결하여 테스트하고 있는 상태이다.
- Windows(또는 Mac / Linux) 워크스테이션에서 작업 중이다.
- PowerCLI가 이미 설치되어 있고 연결되어 있다. 그렇지 않다면, 이 PowerCLI 설치 문서를 확인하십시오.
I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.
PowerCLI로 ESXi 호스트에 대한 정보 수집하기
vSphere 환경의 가상 레이어에 들어가기 전에 물리 하드웨어 레이어를 검토하는 것이 좋습니다. VMware PowerCLI는 이를 위해 직접 정보를 수집하는 Get-VMHost
라는 cmdlet을 제공합니다.
vCenter 서버 또는 ESXi 호스트에 연결된 상태에서 다음 cmdlet을 실행하십시오.

저는 두 개의 별도 ESXi 호스트를 관리하고 있는 vCenter Server Appliance에 연결되어 있기 때문에 관리되는 호스트에 대한 기본 정보를 제공받습니다. Get-VMHost
를 사용하면 가상화 호스트의 하드웨어 기능을 검토할 수 있습니다. 그러나 기본적으로 Get-VMHost
는 모든 정보를 반환하지 않습니다.
Get-VMHost
cmdlet을 Format-List
에 파이프로 연결하면 주어진 호스트에 대한 모든 정보에 대한 콘솔 출력을 얻을 수 있습니다.

Get-VMHost | Format-List
또는 더 구체적이고 선택적으로 작업 중인 VMHost 개체의 개별 속성만 선택할 수도 있습니다. 예를 들어:
이 보다 자세한 출력을 활용하면 가상화된 워크로드를 실행하는 하위 하드웨어에 대한 더 큰 시각을 제공할 수 있습니다. 특히 다음과 같은 정보가 있을 것입니다:
- 라이선스 유효성 검사 정보
- CPU/Memory 총량
- 하드웨어 공급업체 모델
- DNS 호스트 이름
검토 후, 이를 Export-CSV
cmdlet을 사용하여 CSV 파일로 컴파일할 수 있습니다.
PowerCLI을 사용하여 VM 검사
이제 이 PowerCLI 튜토리얼에서 다른 주제로 넘어가서 특정 ESXi 호스트에 현재 있는 가상 머신을 검토하는 방법에 대해 알아보겠습니다.
Get-VM
명령은 VM 정보를 검토하는 데 유용한 명령입니다.
이 cmdlet의 출력은 다음과 같을 것입니다:

위의 출력은 특정 호스트에서 현재 실행 중인 VM의 전체 상태 목록을 제공합니다. 위의 예에서처럼 개별 호스트를 지정하지 않은 경우 각 후속 호스트와 해당 호스트의 VM에 대한 정보 표가 표시됩니다.
문제 해결 중에 특정 호스트에 있는 가상 머신의 수를 알아야 하는 경우 또는 VMware PowerCLI를 사용하여 ESXi 호스트 정보를 수집해야 할 필요가 있는 경우 이러한 cmdlet을 사용할 수 있습니다. 현재 사용 가능한 보고 기능이 점점 확장되고 있습니다!
PowerCLI를 사용하여 가상 스위치 검사
vCenter 클러스터의 가상 네트워크를 구성하거나 관리해야 하는 경우 모든 사용 사례에 대한 네트워킹 cmdlet의 전체 범위가 있습니다. vSphere 환경에서 구성된 가상 스위치를 보려면 다음을 사용합니다:
가상 네트워크 및 가상 스위치의 수에 따라 결과 목록이 상당히 크게 될 수 있습니다. 아래에서 보는 것처럼, 저는 단일 DSwitch 즉, 분산 가상 스위치를 가지고 있습니다.
다수의 ESXi 호스트가 클러스터에 있는 Enterprise vSphere 구현에서 DSwitches는 동일한 구성을 가진 여러 호스트에 가상 스위치와 포트 그룹을 배포하는 것을 간소화합니다. 이는 각 호스트에서 동일한 네트워크 구성을 수동으로 작성하는 수고를 덜어주며, 클러스터의 확장에 효과적인 방법입니다!

PowerCLI를 사용하여 가상 네트워크에 연결된 가상 머신을 찾는 방법
문제의 범위를 좁히기 위해 특정 네트워크에 연결된 가상 머신을 확인하고 싶을 때가 있습니다. 이를 위해 Get-VirtualPortGroup
명령을 사용할 수 있습니다. 이 PowerCLI 튜토리얼에서 이 cmdlet에 대해 알아보겠습니다.
A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup
without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

해당 포트 그룹(나의 경우 DPortGroup)에 속한 모든 가상 머신을 찾으려면 아래 스크립트를 실행하면 됩니다. DPortGroup 값을 자신의 가상 포트 그룹의 이름으로 교체해야 합니다.
이 한 줄의 명령에서는 이 vCenter 애플라이언스에 있는 모든 가상 머신 목록을 가져와서 Where-Object
cmdlet을 사용하여 네트워크 이름이 포트 그룹과 일치하는 가상 머신만 가져옵니다.

이 출력을 통해 어떤 기계가 각 네트워크에 연결되어 구성되어 있는지 확인할 수 있습니다.
VMware에서 특정 네트워크에 연결된 가상 머신을 찾고 분석하라는 요구가 있을 때, 이제 PowerCLI 보고 솔루션을 제공할 수 있게 되었습니다.
PowerCLI를 사용하여 VM의 OS 버전 정보 가져오기
VMware 내의 대부분의 관리 작업은 가상 머신 수준에서 수행됩니다. VM의 모든 하드 드라이브 크기 목록을 검색하거나 서버의 게스트 OS 버전을 가져오는 등의 작업 요청을 무수히 받을 수 있습니다.
이러한 작업은 대규모로 진행될 때 번거로울 수 있습니다. PowerCLI를 사용하면 몇 가지 중요한 cmdlet을 사용하여 이러한 작업을 간소화할 수 있습니다. 이 PowerCLI 튜토리얼에서 해당 cmdlet에 대해 알아보겠습니다.
아마도 한 번은 “VMware 클러스터에 Ubuntu 서버가 몇 개 있나요?”라는 질문을 받았을 것입니다. 그럼 아마도 많은 시간을 소비하여 답을 찾기 위해 vCenter에서 여기저기 클릭했을 것입니다. PowerCLI는 vCenter의 VM 개체를 확인하고 출력에 PowerShell 마법을 적용하여이 프로세스를 간소화할 수 있습니다.
다음 스크립트를 살펴보세요. 이 코드는 나중에 자세히 설명할 Get-View
명령을 사용하여 VMware 개체 속성을 검색하는 고급 방법임을 알아두세요. 이 경우에는이 방법으로 가장 쉽게 검색할 수 있는 중첩 속성을 수집하고 있습니다.
위의 코드는 PowerCLI Get-VM
cmdlet을 사용하여 가상 머신 목록을 검색하고, PowerShell Sort-Object
cmdlet을 사용하여 해당 목록을 정렬하며, PowerCLI Get-View
cmdlet을 사용하여 일부 개체 속성을 검색합니다.
내 환경에서 이를 실행하면 아래 결과가 생성됩니다. vCenter의 VM 이름, VMware의 가상 하드웨어가 게스트 운영 체제를 해석하는 방식인 구성된 OS
및 실제 운영 체제를 나타내는 실행 중인 OS
가 표시됩니다.

replicant 및 Scriptrunner 가상 머신이 클러스터에서 꺼져 있으면 Running OS
값이 표시되지 않습니다. 운영 체제는 VMware Tools 서비스에 의해 수집됩니다. 사용할 수 없으면 PowerCLI는 운영 체제 정보를 가져올 수 없습니다.
PowerCLI를 사용하여 CSV 보고서 생성하기
VMware Tools는 Windows 및 Linux 가상 머신을 위한 게스트 내부 서비스로서 하이퍼바이저에 추가 정보와 관리 기능을 제공합니다. 가장 일반적으로 깨끗한 종료, 운영 체제 정보 및 가상 머신의 고해상도 콘솔 보기가 제공됩니다.
A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV
cmdlet. Export-Csv
will create a CSV file with the same information you see in the console.
위의 코드를 실행한 후에는 Excel로 CSV 파일을 열어 보고서를 검토할 수 있어야 합니다.

PowerCLI를 사용하여 가상 하드 디스크 검사하기
Get-Harddisk
명령은 또 다른 유용한 명령입니다. Get-HardDisk
cmdlet을 사용하면 가상 머신에 연결된 가상 하드 디스크에 대한 정보를 검사할 수 있습니다.
예를 들어, exchange1 가상 머신에 연결된 가상 하드 디스크에 대한 정보를 조회하려면 다음을 실행할 수 있습니다:

일부 정보는 중복될 수 있습니다. 예를 들어, 용량을 KB와 GB로 표시하는 것은 중복될 수 있습니다. 그러나 StorageFormat
(thin/thick 프로비저닝 유형)과 VMDK 파일 이름을 알고 있는 것은 가치가 있습니다.
예를 들어, 일반적인 문제를 발견하고 모든 VM 하드 디스크가 동일한 데이터 저장소 볼륨에 있으면 이러한 정보를 알고 있다면 문제 해결이 가속화될 수 있습니다.
PowerCLI를 사용하여 가상 네트워크 어댑터 검사하기
가상 머신의 하드 디스크 정보를 검토하는 것 외에도 가상 네트워크 어댑터를 확인할 수도 있습니다. 단일 가상 머신에 대한 이러한 속성을 확인하려면 Get-NetworkAdpter
cmdlet을 사용할 수 있습니다.
이전에 동일한 네트워크에 있는 모든 가상 머신을 찾았다면, 이번에는 특정 가상 머신에 연결된 어댑터만 보고 싶을 것입니다.

이는 여러 개의 네트워크 어댑터에 연결된 가상 머신을 문제 해결하는 경우 유용합니다. 이를 통해 어댑터가 올바른 네트워크에 연결되어 있는지 빠르게 확인할 수 있습니다.
Invoke-VMScript를 사용하여 VM에서 PowerShell 스크립트 실행
Invoke-VMScript
를 사용하면 VM 내에서 직접 PowerShell 코드를 실행할 수 있습니다. 네트워크 연결이 필요하지 않습니다. Hyper-V 환경에서 PowerShell Direct를 사용한 적이 있다면 유사한 경험이 될 것입니다.
원격 PowerShell 세션을 생성하거나 네트워크를 통해 Invoke-Command
cmdlet을 사용하는 대신 Invoke-VMScript
cmdlet을 사용하여 일반적인 WinRM 또는 SSH 연결 없이 명령을 직접 VM으로 전송할 수 있습니다.
예를 들어, exchange1이라는 VM에서 간단한 디렉토리 목록을 수행하려면 아래와 같이 ScriptText
매개변수의 값으로 dir C:\
을 전달하면 됩니다.
결과는 마치 VM 콘솔에서 명령을 실행한 것처럼 나타납니다. 그런 다음 Invoke-VMScript
는 VM에서 실행된 명령의 모든 출력을 중계합니다.

이것은 기본적인 예제이지만, 원하는 대로 복잡해질 수 있습니다. 이 PowerCLI cmdlet은 ScriptText
매개변수 내에서 배치, PowerShell 또는 Bash 유형을 지정할 수 있습니다.
더욱 고급진 방법도 사용할 수 있습니다. 아래에서는 별도의 $script
변수를 사용하여 ScriptText
매개변수 입력에 대해 PowerShell 코드를 실행하는 방법을 볼 수 있습니다. 이를 통해 VM이 처리할 수 있는 더 맞춤형 스크립트 입력을 만들 수 있습니다.
ScriptText
매개변수 값은 문자열이어야 합니다. 이것이 $script
변수에 단일 외부 따옴표가 필요한 이유입니다.
GuestCredential
매개변수의 사용에도 주목하셨을 것입니다. 이 매개변수는 VM 운영 체제에 인증하기 위해 사용됩니다. 특히 다른 계정으로 스크립트를 실행하려는 경우에 유용합니다.
작동 중인 스크립트의 결과는 다음과 유사한 출력을 제공합니다.

이 스크립트의 결과로 VM의 디스크 정보를 얻을 수 있습니다. 그에 따라 VMware Virtual Disk
가 드라이브의 친숙한 이름으로 나타나므로 이것이 원격 VM임을 알 수 있습니다.
Get-View를 사용하여 고급 사용 방법
일부 기본 cmdlet에서는 ExtensionData
라는 속성이 반환될 수 있습니다. PowerShell Get-Member
cmdlet에 파이핑하여이 속성을 찾을 수 있습니다. 그게 무엇인지 궁금하다면 지금은 알아볼 기회입니다.
이 모험의 다음 단계는 Get-View
cmdlet을 이해하는 것입니다. VMware PowerCLI는 Get-VM
의 멋지고 간단한 출력을 제공하기 위해 VM에 대한 여러 가지 쿼리를 활용합니다. 그러나 Get-View
cmdlet을 사용해야만 접근할 수있는 많은 부분이 있습니다.
이 cmdlet을 사용하는 스크립트를 많이 볼 수 있습니다. 이 cmdlet이 작동하는 것을 익히기 위해 시간을 투자하는 것이 좋습니다. 익숙해지려면 Get-View
cmdlet을 사용하여 일부 가상 머신 정보(exchange1 예제에서)를 얻으십시오.
이 cmdlet의 Filter
옵션은 PowerShell 해시 테이블을 사용하며 개별 문자열 값은 사용할 수 없습니다. 고유한 스크립트를 작성할 때 이 점을 유의하십시오!
위의 명령의 결과는 VM에 대한 중첩된 구성 정보와 작업 수행 옵션의 많은 옵션입니다.

위의 동일한 스크립트를 사용하여 출력을 변수에 보내면 점 표기법으로 해당 중첩 옵션을 검사할 수 있습니다. 여기에서는 PowerCLI를 통해 보고하려는 게스트 운영 체제의 모든 추가 정보를 볼 수 있습니다.

단일 속성을 선택하려면 다음을 실행하여 개별 값을 좁힐 수 있습니다.
모든 종류의 VMware 개체에 대한 Get-View
옵션이 많이 있습니다. 이러한 옵션을 모두 살펴보고 이 강력한 cmdlet에 대해 자세히 설명하는 VMware의 유익한 기사를 확인해보세요!
VMware Code Capture – 클릭에서 학습하기
PowerCLI를 활용하고 싶지만 코드를 직접 작성하기 싫다면, vCenter의 Code Capture를 사용하세요. Code Capture는 Active Directory 관리 센터와 유사하게 작동하는 새로운 개발자 도구입니다. 이 PowerCLI 자습서에서 Code Capture를 다루어 보겠습니다.
이 도구는 GUI에서 수행하는 모든 작업을 기록합니다. 그런 다음 해당 작업을 PowerCLI 스크립트로 변환해 제공합니다.
기본적으로 Code Capture는 비활성화되어 있습니다. 활성화하려면 vCenter 어플라이언스를 열고 다음과 같이 이동하여 메뉴 -> 개발자 센터로 이동하세요.

개발자 센터 탭에 도착하면 Code Capture 활성화 옵션을 토글하세요.

Code Capture를 활성화하면 vCenter 헤더에 빨간색 기록 버튼이 표시됩니다. 활성화된 후에는 GUI 작업을 기록하고 PowerCLI 출력으로 변환하려면 기록 버튼을 눌러야 합니다.

빨간색 기록 버튼은 vCenter에 로그인한 사용자 섹션 옆에 나타나므로 언제든지 기록할 수 있습니다.
코드 캡처를 시연하기 위해 새 가상 머신 생성 마법사를 따라가세요.
- 녹화 시작을 위해 녹화 버튼을 클릭하세요. 이로 인해 빨간색 녹화 버튼이 깜박이기 시작합니다.
- VMware 호스트를 마우스 오른쪽 버튼으로 클릭하고 새 가상 머신 생성을 선택하세요. 결과로 나오는 마법사를 통해 모든 기본값을 가진 새 가상 머신을 생성하세요.
- 가상 머신이 생성되면 녹화 버튼을 클릭하고 녹화를 중지하세요.
결과로 나오는 출력물은 예상보다 약간 더 자세할 수 있습니다. 출력물에는 가상 머신을 생성하기 전에 GUI를 탐색하는 모든 작업도 포함됩니다. 하지만 주석으로 표시된 CreateVM_Task
로 시작하는 섹션을 확인할 수 있어야 합니다. 여기서 코드가 가상 머신을 생성하기 시작합니다.
아래는 코드 캡처를 통해 GUI를 통한 새 VM 마법사 프로세스의 일부분인 CreateVM_Task 출력입니다.

이 출력은 약간 어려울 수 있지만, 가상 머신에 사용 가능한 구성 옵션의 수를 직접 노출시킵니다. 자신의 필요에 따라 스크립트를 수정하고 자유롭게 사용자 정의할 수 있습니다.
코드 캡처 유틸리티는 VM 생성에만 한정되지 않습니다. 네트워킹 변경, 작은 VM 수정 또는 호스트 구성 변경에 대한 코드도 생성할 수 있습니다. GUI 작업의 PowerCLI 출력을 검토할 수 있기 때문에 인프라를 코드로 배포하는 여정을 빠르게 진행할 수 있습니다.
PowerCLI 튜토리얼 요약
이 기사에서는 많은 내용을 다뤘습니다. 잘 하셨습니다! PowerCLI이 VMware 인프라 관리에 가져다주는 힘을 깨달으셨기를 바랍니다.
PowerCLI에는 다양한 제품 베이스에 대한 많은 cmdlet이 있지만, 여기서는 일부만 다루었습니다. 이 멋진 도구에 대한 더 많은 기사를 위해 이 블로그를 계속 지켜봐주시기 바랍니다!