【VMware】PowerCLIでvCenterの仮想マシン一覧取得

Virtualization
スポンサーリンク

今回は、VMwareのvCenterからPowerCLIを使用して仮想マシン情報一覧を取得する方法を解説します。
クライアントにPowerCLIをインストールしていない場合は、以下の記事よりインストールしてください。

【PowerCLI入門】PowerCLIインストール

期待する目標

本手順で期待する目標は以下の通りです。

  • PowerCLIを使用してvCenter Serverに接続できる
  • PowerCLIを使用してVMの情報を取得できる
  • Powershellを使用してCSV出力ができる

前提条件

本手順で使用するコンポーネントの情報は以下の通りです。

【vCenter】

  • vCenter Version : 7.0.0
  • Host : 3 ESXi Host

【PowerCLI】

  • OS : Windows10 22H2
  • PowerCLI Version : VMware.PowerCLI 12.7.0 build 20091289
  • Powershell Version : 5.1

今回はWindows10で実行していますが、Windows Serverでも実行可能です。
Powershellバージョンについては、5系を使用していますが、Windows Server 2016以降であれば問題なく実行できます。

PowerCLIを使用してvCenterに接続

PowerCLIを使用してvCenter Serverに接続していきたいと思います。
Powershell ISEや任意のエディタで任意の名前でps1ファイルを作成します。

プレーンテキストを使用したvCenter Server接続

プレーンテキストを使用したvCenter Serverの接続は以下の通りです。

$vCenter_FQDN = "<vCenter Server FQDN or IP>"
$vCenter_Username = "administrator@vsphere.local"
$vCenter_Password = 'Password'

Connect-VIServer -Server $vCenter_FQDN -User $vCenter_Username -Password $vCenter_Password -Force

このコマンドを実行するか、ps1ファイルに記載して実行します。

警告: Please consider joining the VMware Customer Experience Improvement Program, so you can help us make PowerCLI a better product. You can join using the following command:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true

VMware's Customer Experience Improvement Program ("CEIP") provides VMware with information that enables VMware to improve its products and services, to fix problems, and to advise you on how best to deploy and use our products.  As part of the CEIP, VMware 
 collects technical information about your organization窶冱 use of VMware products and services on a regular basis in association with your organization窶冱 VMware license key(s).  This information does not personally identify any individual.

For more details: type "help about_ceip" to see the related help article.

To disable this warning and set your preference use the following command and restart PowerShell:
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true or $false.

Name                           Port  User
----                           ----  ----
<vCenter FQDN>         443   VSPHERE.LOCAL\Administrator

vCenter Server接続時に警告が表示されますが、CEIPを設定するかどうかの確認なので、無視しても問題ありません。
vCenter Serverに接続すると、接続先のvCenter ServerのFQDN・ポート・ユーザ名が表示されます。

ここで重要なのが、パスワードの指定方法です。
PowershellでStringを定義する場合には、[ダブルクォーテーション]で囲みますが、パスワードを定義する場合には、[シングルクォーテーション]で囲みます。

Secure Stringを使用したvCenter Server接続

通常のパスワードだとps1ファイルに直接パスワードを記載してしまうため、パスワードを暗号化した形式でvCenter Serverへ接続していきたいと思います。

初めに、以下の記事を参照して、暗号化されたパスワードファイルを作成します。

GitHub - willserver/Convert_SecureCredential: Powershell Password Encrypt Script.
Powershell Password Encrypt Script. Contribute to willserver/Convert_SecureCredential development by creating an account...

使い方は、[Plaintext.txt]にパスワードを記載し、[Convert_SecureCredential.ps1]を実行します。
実行すると[EncryptText.txt]が生成されるため、今回は生成された[EncryptText.txt]を使用してPowershellスクリプトを組みます。

$vCenter_FQDN = "<vCenter Server FQDN or IP>"
$vCenter_Username = "administrator@vsphere.local"
$vCenter_Password = Get-Content ".\EncryptText.txt" | ConvertTo-SecureString
$vCenter_Credential = New-Object System.Management.Automation.PSCredential ($vCenter_Username, $vCenter_Password)

Connect-VIServer -Server $vCenter_FQDN -Credential $vCenter_Credential

[$vCenter_Password]で、パスワードファイルをSecure String形式で読み込みます。
[$vCenter_Credential]で、ユーザ・パスワードをクレデンシャル形式にして代入します。
Connect-VIServerでvCenter ServerのFQDNとCredentialファイルを使用してvCenter Serverへ接続します。

PowerCLIを使用してvCenterから切断

Connect-VIServerでvCenter Serverに接続ができたので、切断の方法を確認しておきます。

Disconnect-VIServer -Server $vCenter_FQDN -Confirm:$False

vCenter Serverから切断するには、[Disconnect-VIserver]というコマンドを使用します。
その際にオプションとして、[-Confirm:$False]を指定します。

Get-VMによるvCenter Server上の仮想マシン取得

vCenter Serverに接続ができたら、vCenter上の仮想マシン情報を取得していきたいと思います。
仮想マシンの一覧を取得するには、[Get-VM]というコマンドを使用します。
今回は、Get-VMで取得した仮想マシン一覧をExport-csvでcsvファイルに出力します。

$GET_VM = Get-VM
$GET_VM | Export-Csv -Path .\<出力するファイル名> -NoTypeInformation

[Get-VM]で取得できる値は以下の通りです。

  • Name
  • PowerState
  • Notes
  • Guest
  • NumCpu
  • CoresPerSocket
  • MemoryMB
  • MemoryGB
  • VMHostId
  • VMHost
  • VApp
  • FolderId
  • Folder
  • ResourcePoolId
  • ResourcePool
  • HARestartPriority
  • HAIsolationResponse
  • DrsAutomationLevel
  • VMSwapfilePolicy
  • VMResourceConfiguration
  • Version
  • HardwareVersion
  • PersistentId
  • GuestId
  • UsedSpaceGB
  • ProvisionedSpaceGB
  • DatastoreIdList
  • CreateDate
  • SEVEnabled
  • BootDelayMillisecond
  • MigrationEncryption
  • MemoryHotAddEnabled
  • MemoryHotAddIncrement
  • MemoryHotAddLimit
  • CpuHotAddEnabled
  • CpuHotRemoveEnabled
  • ExtensionData
  • CustomFields
  • Id
  • Uid

仮想マシン名だけでなく、起動状態・仮想マシンのコア数・メモリ数なども取得できるようです。
また、[CreateDate]などの作成日もわかります。

ps1ファイルを作成する

vCenter Serverへの接続と仮想マシンの取得・出力をps1ファイルにしてみます。

$vCenter_FQDN = "<vCenter Server FQDN or IP>"
$vCenter_Username = "Administrator@vsphere.local"
$vCenter_Password = Get-Content ".\EncryptText.txt" | ConvertTo-SecureString
$vCenter_Credential = New-Object System.Management.Automation.PSCredential ($vCenter_Username, $vCenter_Password)
$OutputFile = ".\<出力するファイル名>"

Connect-VIServer -Server $vCenter_FQDN -Credential $vCenter_Credential
$GET_VM = Get-VM
$GET_VM | Export-Csv -Path $OutputFile -NoTypeInformation

Disconnect-VIServer -Server $vCenter_FQDN -Confirm:$False

最終的にps1ファイルに落とします。
Powershellで保存したps1ファイルを実行して、CSVファイルが出力されることを確認します。

よくあるエラー

Connect-VIServer : 2022/11/28 0:06:37   Connect-VIServer                Cannot complete login due to an incorrect user name or password.
発生場所 C:\Users\administrator\Documents\Sample_Programs\GET_vCenter_VM\GET_vCenter_VM.ps1:25 文字:1
+ Connect-VIServer -Server $vCenter_FQDN -User $vCenter_Username -Passw ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-VIServer], InvalidLogin
    + FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_SoapException,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer

ユーザ名・パスワードが間違っている場合に出力されるエラーです。
パスワードを定義している文字列が間違っているか、ダブルクオーテーションで記載している場合に置きました。
また、vCenter Serverへ接続する際に使用するアカウントに権限がない場合でも起きそうです。

まとめ

今回は、PowerCLIを使用してvCenter Server上にある仮想マシン一覧を取得・出力してみました。
全ての仮想マシンをすべての項目で取得しましたが、必要に応じてフィルターをかけて出力すると便利だと思います。

おまけ

本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
willserverのnoteも開設したのでフォローお願いします。

コメント

タイトルとURLをコピーしました