VMware vSphere 向け PowerCLI スクリプト入門

前回は、PowerCLIについて、その概要、インストール方法、およびWindows PowerShell ISEへの統合について解説しました。今回は、接続方法、PowerCLIコマンドレット、そしてループ処理を含む基本的なスクリプト作成について見ていきましょう。

NAKIVO for VMware vSphere バックアップ

NAKIVO for VMware vSphere バックアップ

VMware vSphere 仮想マシンの包括的なデータ保護と即時復旧機能。オンプレミス、オフサイト、クラウド上の安全なバックアップ先。ランサムウェア対策機能。

PowerCLIスクリプトの基本

PowerCLI を使って vSphere 環境から情報を取得するのがいかに簡単かを確認するために、いくつかの基本的な PowerCLI コマンドレットを見てみましょう。なお、以下は決して網羅的なチュートリアルではなく、PowerCLI の概要や、コマンドレットの実行方法、環境の自動化の学習方法を紹介するものです。

最初に実行する必要があるコマンドレットは、vSphere環境に実際に接続するためのものです。ESXiホストに直接接続することも、vCenter Serverに接続することも可能です。

接続するには、PowerCLIが有効になっているPowerShellセッションで次のコマンドを実行します:

  • connect-viserver –server 〈yourserver〉

コマンドを実行すると、ログイン情報の入力を求められます。ご自身の ESXiサーバー または vCenter Server。

Basic PowerCLI scripting

ESXi または vCenter に接続した際に実行できる最も基本的なコマンドの一つは、環境内のすべての仮想マシンを確認することです。ゲスト仮想マシンに関する情報を表示するには、`get-vm` コマンドレットを使用します。

  • Get-VM - The get-vm commandlet lists VMs running on the connected host

get-vm commandlet

より詳細な情報を取得するには、 get-vm commandlet を使用すれば、次のコマンドで詳細情報を表示できます:

  • Get-VM | fl – ゲストOS、リソースプール、VMのハードウェアバージョン、VMが配置されているフォルダなど、より詳細な情報を表示します。

Get VM Full Information

それでは、Get-VM コマンドレットから具体的な有用な情報を取得してみましょう。PoweredOff 状態にある VM を検索してみましょう。情報を取得するには、 Get-VM commandlet を実行し、その結果をパイプで where-object クエリの対象となる特定の情報を選択するために――この場合は PowerStateご覧の通り、さまざまなVM情報を取得し、その情報を別のPowerShellコマンドレットに渡すことで、無限の可能性が広がります。

  • Get-VM | where-object {$_.PowerState –eq “PoweredOff”}

Get-VM PowerState

ご覧のとおり、これにより"PoweredOff"というPowerStateにあるVMのみが表示されます。これは非常に便利です。さらに、上記のコマンドの結果を Start-VM コマンドレットです。つまり、電源がオフになっているすべてのVMを取得し、それらのVMの電源を入れることができます。

  • Get-VM | where-object {$_.PowerState –eq “PoweredOff”} | Start-VM

Start-VM commandlet

特定のVMをシャットダウンするのはどうでしょうか?それも可能です。VM名を指定して呼び出し、その後 Stop-VMGuest ゲストOSのシャットダウンを開始するコマンドレット。

  • Get-VM 〈yourvm〉 | Stop-VMguest

Stop-VMguest commandlet

操作の確認メッセージを表示したくない場合は、 –confirm:false パラメータ:

Stop-VMguest –confirm:false

例えば、メモリ使用量が 1 CPU 割り当てられました。ここでも、 where-object …を選択するためのコマンドレット NumCpu オブジェクト。

  • Get-VM | where-object {$_.NumCpu –gt 1 }

where-object commandlet

PowerCLIのループ

ループを使用すると、選択したオブジェクトに対して、あるいは指定した回数だけ、同じ操作を繰り返し実行することができます。たとえば、foreachループを使えば、特定のアクションを複数回繰り返すことができます。その設定方法は、以下の擬似コードのようになります:

foreach ($var in $vars){
Do something…
}

どのオブジェクトに対してアクションを実行するかを具体的に指定したい場合は、例えば、テキストファイルに記載された特定のVMリストをループ処理することができます。テキストファイルにデータを入力するには、 Get-VM 必要なプロパティを抽出するコマンドレットを実行し、その結果をテキストファイルに出力します。その後、PowerShell を使用してそのテキストファイルを読み込み、VM を配列に格納します。この配列をループ処理して、特定の操作を実行することができます。以下では、リスト内の VM に新しいネットワークアダプターを追加しています。

Get-vm | where-object {$_.MemoryGB –eq 4 } | select -ExpandProperty Name | out-file c:VMs.txt

$vms = get-content c:VMs.txt

Foreach-object ($vm in $vms) {
new-networkadapter -vm $vms -NetworkName "〈Port group name〉" -Type "VMXNET3" –startconnected
}

リソース

ウェブ上には、個人のブログサイトや公式ドキュメント、コードサンプルなど、素晴らしいリソースがたくさんあります。私の経験上、やりたいことが思いつけば、その機能を実現するPowerCLIのコードをすでに誰かが書いてくれている可能性が高いです。 さらに良い点は、通常、自分がやりたいことに非常に近いものが見つかり、基礎を学んだ後、ほんの少し手を加えるだけで、自分のニーズに合わせて修正できることです。こうすることで、PowerCLIとその仕組みを学ぶだけでなく、達成すべきタスクを実行するためにコードを修正する方法も学べます。

ドキュメントやその他のリソースを始めるのに最適な場所は、VMware PowerCLIの公式リリースおよびドキュメントサイトです。 ここでは、バイナリや公式のユーザーガイドをダウンロードできます。

また、スクリプトやスクリプトの例が掲載された書籍も数多くあり、それらを分析して修正することも可能です。さらに、VMware管理者のコミュニティも活用しましょう。その多くは、PowerCLIを習得する過程で他者から得た知識を、喜んで共有してくれるはずです。具体的な内容や一般的な原則について助けが必要な場合は、コミュニティのメンバーに連絡してみてください。

所感

PowerCLIは、控えめに言っても非常に強力です。 上記の例では、そのほんの一端しか紹介できていません。繰り返し行うタスクや、Webクライアントでは煩雑な作業は、PowerCLIによるスクリプト化に最適な候補です。実際、多くの人がPowerCLIを知るきっかけは、自動化が必要なタスクや、vSphere内の他のアクションに基づいた操作、あるいはスクリプト化に適した反復的な作業がある場合です。

PowerCLIを学ぶ最良の方法は、ダウンロードしてインストールし、ホームラボなどのラボ環境で実際に使い始めることです。VMware vSphere環境の真の力は、自動化を活用してvSphereを制御する可能性を実感して初めて解き放たれます。さあ、PowerCLIを使ったスクリプト作成を始めてみましょう。きっとその便利さに夢中になるはずです!

試してみてください NAKIVO Backup & Replication

試してみてください NAKIVO Backup & Replication

無料トライアルをご利用いただき、本ソリューションのデータ保護機能をすべてお試しください。15日間無料です。機能や容量の制限は一切ありません。クレジットカードも不要です。

People also read