以前、私たちはPowerCLI – それが何であり、どのようにインストールするか、Windows Powershell ISEに統合するかを見てきました。今度は、接続、PowerCLIコマンドレット、およびループを含む基本的なスクリプトを見てみましょう。
基本的なPowerCLIスクリプト
vSphere環境から情報を取得するのがどれほど簡単かを見るために、いくつかの基本的なPowerCLIコマンドレットを見てみましょう。以下は、包括的なチュートリアルではなく、PowerCLIの紹介およびコマンドレットの実行と環境の自動化を学ぶ方法の導入です。
最初に実行する必要があるコマンドレットは、実際にvSphere環境に接続するものです。ESXiホストまたはvCenter Serverに直接接続できます。
接続するには、PowerCLIが有効になっているPowerShellセッションで次のコマンドを実行します。
connect-viserver –server 〈yourserver〉
コマンドを実行すると、ログイン資格情報を求められます。ESXiサーバーまたはvCenter Serverのユーザー名とパスワードを入力します。
ESXiまたはvCenterに接続した場合に実行できる最も基本的なコマンドの1つは、環境内のすべてのVMを表示することです。ゲストVMに関する情報を表示するために、get-vmコマンドレットを使用します。
Get-VM - get-vmコマンドレットは、接続したホストで実行されているVMを一覧表示します
より詳細な情報をget-vm
コマンドレットから取得するには、次のコマンドで完全な情報を表示できます:
Get-VM | fl
– ゲストオペレーティングシステム、リソースプール、VMハードウェアバージョンレベル、所在するフォルダなど、より詳細な情報を表示します。
さて、Get-VMコマンドレットから特定の有用な情報を返しましょう。PoweredOff状態にあるVMを見つけましょう。Get-VMコマンドレットから情報を取得し、それをwhere-object
にパイプして、この場合はPowerState
をクエリするために特定の情報を選択します。さまざまなVM情報を取得し、この情報を別のPowerShellコマンドレットにパイプすることの可能性があることがわかります。
Get-VM | where-object {$_.PowerState -eq "PoweredOff"}
これにより、”PoweredOff” PowerStateにあるVMのみが表示されます。これは非常に便利です。上記のコマンドの結果をStart-VMコマンドレットにパイプすることさえできます。つまり、すべての電源を切ったVMを取得して、それらのVMを起動できます。
Get-VM | where-object {$_.PowerState -eq "PoweredOff"} | Start-VM
特定のVMをシャットダウンする方法は?それもできます。名前でVMを呼び出し、Stop-VMGuestコマンドレットを使用して、ゲストオペレーティングシステムのシャットダウンを開始します。
Get-VM 〈yourvm〉 | Stop-VMguest
アクションの確認を受け取りたくない場合、–confirm:falseパラメータを追加できます。
VMが割り当てられたCPUが1つ以上ある実行中のVMの数を見たいとします。再び、where-objectコマンドレットを使用して、NumCpuオブジェクトを選択できます。
Get-VM | where-object {$_.NumCpu –gt 1 }
PowerCLIループ
ループを使用すると、選択したオブジェクトに対してまたは繰り返し処理される回数に対して、同じ操作を複数回実行できます。たとえば、foreachループを使用すると、特定のアクションを複数回繰り返すことができます。以下の疑似コードのように設定されています。
foreach ($var in $vars){
何かを行う...
}
特定のオブジェクトに対してどのようなアクションを実行するかを具体的にする場合は、例えば、テキストファイルから特定の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 "〈ポートグループ名〉" -Type "VMXNET3" –startconnected
}
リソース
ウェブ上には、個人のブログサイト、公式ドキュメント、コードサンプルなど、多くの素晴らしいリソースがあります。私が見つけたことは、何かをしたいと思えば、おそらくすでにそれを行うPowerCLIコードの1行を書いた人がいるということです。良いことは、通常、やりたいことに非常に近いものを見つけることができ、基本を学んだ後は、ほとんど修正する必要がなく、それを自分のニーズに合わせて変更できるということです。これによって、PowerCLIとその動作方法、および達成する必要があるタスクを実行するためにコードを変更する方法を学んでいます。
A great place to start with documentation and other resources is the official VMware PowerCLI release and documentation site. Here, you can download the binaries as well as the official User’s Guide.
解剖および修正できるスクリプトやスクリプトの例がたくさんある本もあります。ほとんどの場合、PowerCLIに習熟する過程で他の誰かから学んだ知識を共有することを喜んでいるVMware管理者コミュニティも忘れないでください。特定の点や一般的な原則に関するヘルプを求めるために、コミュニティ内のそのような人々にアウトリーチしてください。
考え
PowerCLIは非常に強力です。上記の例では、まだ表面しか触れていません。繰り返し行うタスクや、ウェブクライアントで行うのが面倒なタスクは、PowerCLIでスクリプト化するのに適しています。実際、それがPowerCLIに導入される方法です – 自動的に実行する必要があるタスクがあるか、またはvSphereの他のアクションに基づくアクションがあるか、または再びスクリプト化に適している繰り返しのアクションがある場合です。
最高の方法は、PowerCLIをダウンロードして、インストールして、ホームラボなどのラボ環境でそれを使用して始めることです。 VMware vSphere環境の真の力は、自動化を使用してvSphereを制御する可能性を見るときにのみ解放されます。 ですから、PowerCLIでスクリプトを開始して、もう後ろを振り返ることはありません!
Source:
https://www.nakivo.com/blog/basic-powercli-scripting-vmware-vsphere/