TAM サービス クラウド運用・管理

[TAM Blog] PowerCLIによる運用効率化 – 導入編(インストール~超基本まで)

こんにちは、VMware TAM の丸山です。

TAM サービス(Technical Account Manager サービス) では、VMware 製品をご利用頂いているお客様の
・運用の高度化・効率化
・基盤安定度の維持・向上
・将来計画の策定
などを中長期的にご支援しています。

さて、こういった運用支援の中で良く出てくるツールとして、PowerCLI があります。
この PowerCLI は、PowerShell 環境に追加導入することで非常に簡単に使用することができ、VMware 基盤の運用を効率化する最もベーシックなツールの一つと言えます。

今回はこの PowerCLI について、『導入編』としてインストールから超基本までをご紹介させて頂きます。

※ インストール対象の PowerCLI を最新の 12.5.0 に更新しました(2022/3/24)

目次

      1. はじめに – PowerCLI とは?おすすめポイントは??
      2. PowerCLI インストール準備
      3. PowerCLI インストール – インターネット接続環境の場合
      4. PowerCLI インストール – PowerShell Gallery 接続不可の環境の場合
      5. PowerCLI 実行イメージ
      6. PowerCLI コマンドレットヘルプ
      7. まとめ
      8. 参考リンク

■ はじめに – PowerCLI とは?おすすめポイントは??

これまでのご経験で、こんな場面はありませんでしたでしょうか?

・稼働中の仮想マシンの一覧を取得し、vCPU 数・メモリサイズ・IP・OS 種別などを確認したい
・スナップショットを持っている仮想マシンの一覧を取得したい
・CD/DVD マウントをしたままになっていて、vMotion できない仮想マシンの一覧を取得したい
・ESXi ホスト全台のバージョン/Build番号を確認したい
・ESXi ホスト全台の CPU/Memory 使用状況を確認したい
・性能試験実施時のパフォーマンスチャートのデータを CSV 形式で取得し、Excel で整理したい

もちろん、vSphere Client などの GUI から一つ一つの設定値を目視でチェックしたり、可能な場合は GUI から CSV ファイルをダウンロードしたりして一括参照する、ということもできますが、PowerCLI を使用すればコマンド一発で実行可能です
(GUI で対応していない場合でも、PowerCLI ならほとんどの場合は大丈夫)

また、スクリプト化して、Windows のタスクスケジューラに仕込んで、定期的に実行、なんてこともカンタンにできます。

一度使い始めてしまえばクセになる便利さですよ!

ということで、改めて PowerCLI のおすすめポイントです

PowerCLI のおすすめポイントまとめ

・情報参照だけでなく、作成や設定の変更など、様々な操作を一括で実行可能
・PowerShell ベースなので、直感的に理解可能
・PowerShell の Cmdlet を使って、出力結果を好きな形に加工できる(例:Excel 形式)
・サンプル多数。やりたいことをググると、誰かが公開してくれているサンプルが大体見つかる!
・なんといっても無償!

今回は、入門編として、インストールから基本的ないくつかのコマンドまでをご紹介します。
まだ使ったことがない、という方は、ぜひ以下を参考にトライしてみて下さい。

■ PowerCLI インストール準備

ではまず、PowerCLI 環境の構築からです。
構築、といってもすごくカンタンです。

今回は、本 Blog 更新時点(2022/3/24)で最新の12.5.0をインストールします。

まず、用意頂くのは、以下の物理 PC もしくは仮想マシン(仮想サーバ or 仮想デスクトップ)がオススメです。

Windows 10 バージョン 1803 以降
または
Windows Server 2019 または バージョン 1803 以降

vCenter などの管理サーバに接続可能なネットワーク

インターネット接続(あれば便利ですが、なくてもOK)

この環境であれば、

・サポート OS としても問題なし
・標準で PowerShell 5.1 以降がインストール済み
・標準で .NET Framework 4.7.2 以降がインストール済み

ですので、要件を全て満たしており、そのまま PowerCLI だけインストールすればOKです。

ちなみに、Windows Server 2016 の場合は、事前に .NET Framework4.7.2 以降をインストールしておいて頂ければ大丈夫です。

他にも Linux、macOS などでも使用可能ですので、下記サイトで要件や互換性を確認しつつ、インストール要件にあった環境をご準備下さい。

VMware PowerCLI 12.5.0 Release Notes

Compatibility Matrixes for VMware PowerCLI 12.5.0

なお、PowerCLI で接続する管理サーバ(vCenter Server や Horizon Connection Server など)のバージョンによっては互換性がない場合もありますので、本番環境で使用されるのであれば、下記サイトにてご確認の上、互換性があるバージョンをご使用下さい。

VMware Product Interoperability Matrices

■ PowerCLI インストール – インターネット接続環境の場合

以前の PowerCLI は、モジュールをダウンロードしてインストールするという旧来のやり方でしたが、PowerCLI 6.5.1 を境に、PowerShell Gallery からのインストールという方式が標準になっています。

まず、スタートメニューから 「Windows PowerShell」を起動します。
ここで、右クリックから「管理者として実行する」を選択し、管理者権限で起動すると権限エラー等でのハマりを回避できます。

Start-PowerShell

実際のインストールですが、以下のコマンド一発です。

Install-Module VMware.PowerCLI

※リポジトリの信頼性に関する Warning が出た場合には、y+ENTER を押してインストールを継続して下さい

ダウンロード後、インストールまで完了したら、以下コマンドで確認を行って、無事にリストが出力されればインストールは完了です。

Get-Module VMware* -ListAvailable

■ PowerCLI インストール – PowerShell Gallery 接続不可の環境の場合

インターネット接続が制限されており、直接 PowerShell Gallery にアクセスできない場合は、まず下記サイトよりインストール用のモジュールを別途ダウンロードし、インストール対象の環境へ配置して下さい。

VMware {code} VMware PowerCLI 12.5.0 → VMware-PowerCLI-12.5.0-19195797.zip

※ 新しいバージョンがリリースされており、前述のVMware Product Interoperability Matrices で確認頂いて利用環境にマッチしているのであれば、より新しいものをダウンロード・インストール下さい。

次に、スタートメニューから 「Windows PowerShell」を起動します。
一つ前の例と同じく、右クリックから「管理者として実行する」を選択しておくと無難です。

そして、展開先を特定するため、PowerShell のモジュールパスの確認を行います

$env:PSModulePath

上記で確認したフォルダにダウンロードした ZIP ファイルを展開します

Windows の場合、ダウンロードしたファイルにセキュリティブロックがかかりますので、それを解除します

Get-ChildItem -Path ‘folder_path’ -Recurse | Unblock-File

※ folder_path は、ZIP ファイルを展開した PowerCLIのモジュールパス
※ パス記載は、シングルクォート「’」または ダブルクォート「”」で囲みましょう

最後に、正しく認識されているかどうかを確認して完了です。

Get-Module VMware* -ListAvailable

■ PowerCLI 実行イメージ

インストールが完了したら、早速試してみましょう。

まず下準備として、実行ポリシーの確認をします。( PowerShell のデフォルトでは、PowerShell スクリプトは実行できないポリシーになっています)

Get-ExecutionPolicy

結果が、RemoteSigned / Unrestricted / Bypass のいずれかであれば実行には問題ありませんが、そうでない場合は下記コマンドでRemoteSigned に変更しましょう

Set-ExecutionPolicy RemoteSigned

上記ポリシー変更で「Y」を実行することでセキュリティポリシーが変更され、実行可能になります。念のため、Get-ExecutionPolicy を再度実行し、反映されたことも確認しておいて下さい。
#セキュリティ観点では、通常時は厳しくしておいて、実行時にのみ変更するのがのぞましいですが、本 Blogでは一旦割愛します

では、次に vCenterServer へ接続します

Connect-VIServer -Server ‘vCenter-FQDN-or-IP’ -User ‘AdministratorUser’ -Password ‘Password’

※ ‘vCenter-FQDN-or-IP’ は接続先vCenterの情報として下さい
※ ‘AdministratorUser’ , ‘Password’ は接続用ユーザ名とパスワードを指定して下さい
※ 管理者権限でないユーザで接続した場合は、そのユーザの権限に基づいた内容のみが実行可能となります

ちなみに、SSL エラーとなってしまった場合は、-force オプションをつけて

Connect-VIServer -Server ‘vCenter-FQDN-or-IP’ -User ‘AdministratorUser’ -Password ‘Password’ -force

とします

そして、つながったら、まずはどんな仮想マシンがあるかを確認してみましょう。

Get-VM

仮想マシンのリストが表示されましたでしょうか?私の環境での実行イメージはこんな感じです。



ここから、電源が ON ( PowerState が PoweredOn ) の仮想マシンだけを抽出してみます。

Get-VM | Where { $_.PowerState -eq “PoweredOn” }

Bashなどのシェルスクリプトの経験がある方は、ここで大きな違いに気がつくと思います。
そう、PowerShell はオブジェクト指向の言語のため、パイプ(|)で渡されるのは、ただの実行結果ではなく、
「オブジェクト」が渡されるのです。
(今回の場合、Get-VM で抽出された「仮想マシン」オブジェクトがパイプで渡されています)

「$_」は PowerShell の特殊変数の一つで、パイプで渡されたオブジェクトを表しますので、渡された「仮想マシン」オブジェクトの「PowerState」属性が「PoweredOn」であるものに絞り込む、ということをやっているわけです。

そのオブジェクトのメンバー(属性)にどのようなものがあるかは、Get-Memberで確認出来ます。

Get-VM | Get-Member

ではさらに、それらの仮想マシンのいくつかの情報をあわせて表示させてみましょう。

Get-VM | Where { $_.PowerState -eq “PoweredOn” } | select Name, PowerState, Guest, NumCpu, MemoryGB, VMHost

・仮想マシン名
・電源状態
・ゲストOS設定
・CPU数
・メモリ量(GB)
・稼働しているESXiホスト

があわせて表示されましたでしょうか?こんなイメージです。

Get-VM_PWR-ON_Select

ただ、このままでは見づらい&扱いづらいので、CSV形式にしてみます。

まずは画面に表示させます。

Get-VM | Where { $_.PowerState -eq “PoweredOn” } | select Name, PowerState, Guest, NumCpu, MemoryGB, VMHost | ConvertTo-Csv

Get-VM_PWR-ON_Select_CSV

思った通りの出力になっていることが確認出来たら、続いて、CSVファイルへ出力します。

Get-VM | Where { $_.PowerState -eq “PoweredOn” } | select Name, PowerState, Guest, NumCpu, MemoryGB, VMHost | Export-Csv c:\vm-list.csv -Encoding Default

※ ファイルパス・ファイル名は適宜変更下さい

Excel

こんなイメージで、各種情報を抽出・整理することができるわけです。

今回は第一弾ということで、ここまでにしておきます。

最後に、忘れずに vCenter Server との接続を切断しましょう。

Disconnect-VIServer -Server ‘vCenter-FQDN-or-IP’ -Confirm:$False

■ コマンドレットヘルプ

プロンプト上で以下のコマンドを実行することで、使用可能なCmdletの一覧や、Cmdletのヘルプを参照することが出来ます。WebリファレンスやGoogle先生に聞くより早いこともありますね。

Get-VICommand

Get-VICommand | Select-String Datastore

Get-Help Get-VM

Get-Help Get-VM -full | more

Get-Help Get-VM -examples

■ まとめ

いかがでしたでしょうか?環境のセットアップおよび使用イメージはつかめましたでしょうか?

今回は vCenter Server へ接続しての vSphere 環境の実行例を記載しましたが、他にも、Horizon 環境や vROps (vRealize Operations Manager)NSX-T など、様々な環境へ接続しての基盤管理が可能です。また、最近では VMware Cloud on AWS 環境への接続など、管理範囲もどんどん拡張されてきていますので、ぜひ一度導入してお試し頂ければと思います。

Horizon 環境の PowerCLI 管理については、既に TAM Blog が複数エントリ公開されておりますので、ぜひ以下もご覧下さい。

[TAM Blog] Horizon PowerCLI コマンドレット活用方法のご紹介

[TAM Blog] Horizon PowerCLI コマンドレット活用方法 (Part2)

[TAM Blog] Horizon PowerCLI コマンドレット活用方法 (Part3)

VMware TAM サービスでは、今回のような PowerCLI による運用効率化のご支援をはじめ、さまざまなご支援を行っております。ご興味がありましたら是非とも弊社までお問い合わせ頂ければと思います。

VMware {code} – VMware PowerCLI

無償の開発者向けサイト、VMware {Code} 内の PowerCLI ページ
各バージョンのモジュールや、リリースノート・ユーザガイドなどのドキュメントが入手可能です

Developer Documentation – VMware PowerCLI ★サンプルあり★

2021/01にリニューアルした PowerCLI のドキュメントサイト
2021/02時点ではまだBETA扱いですが、ドキュメントやサンプル、Blog など、
今後はここへ集約されていくようです
CmdletのReferenceについては、管理対象の製品ごとに改めて整理されていて非常に使いやすくなっています

PowerCLI 12.5.0 User’s Guide ★サンプルあり★

今回導入した PowerCLI 12.5.0 のユーザガイドです。
インストール方法や、サンプルも多数掲載されています。

PowerCLI-Example-Scripts ★サンプルあり★

GitHub 上の、サンプルスクリプトサイトです。
上記各種サイトからもリンクされています。

VMware PowerCLI Blog

PowerCLI 専門の Blog です。(英語)
新バージョンや新機能の情報などが頻繁にアップされてます

New Release – VMware PowerCLI 12.5

今回導入したPowerCLI 12.5 の What’s New についての Blog です。(英語)