VMware vSphere PowerCLIを使用したスクリプトをバッチから起動するためのメモです
VMware vSphere PowerCLIは便利ですが、VMware vSphere PowerCLIコンソールを立ち上げてからのコマンド実行なので、少しめんどくさいです。なので少し調べてみました。
なお、VMware vSphere PowerCLIは、以下からダウンロードできます。
VMware vSphere PowerCLIに限らずですが、
Powershell スクリプトファイル(.PS1)を実行するためにはポリシー変更が必要です。
VMware vSphere PowerCLIを初回起動時には以下のように表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
. : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLI Environment.ps1 を読み込むことができません。詳細については、「about_Execution_P olicies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 発生場所 行:1 文字:3 + . "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Init ial ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess PS C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> |
この場合、管理者として実行したPowershellにて、以下のコマンドを実行する必要があります。
1 |
Set-ExecutionPolicy RemoteSigned |
(上記の場合、ローカルのローカルに保存されているスクリプトは実行可能。インターネットからダウンロードしたスクリプト(非ローカルのスクリプト)は、署名されているもののみが実行可能。)
そのほかのパラメータとしては、以下のようなものがあります。
Unrestricted
全てのスクリプトが実行可能。ただしインターネットからダウンロードしたスクリプトは、実行するかどうかが確認されるので、ユーザーが明示的に許可した場合のみ実行される
Bypass
全てのスクリプトが実警告やユーザーへの確認なしに、全てのスクリプトが実行可能
これで、VMware vSphere PowerCLIを起動した状態でPowerSHellからスクリプトファイルが実行できるようになります。
ためしに以下のps1ファイルを作成します
Get-PowerCLIVersion.ps1
1 2 |
#vSpherePowerCLIのバージョン表示 Get-PowerCLIVersion |
これをVMware vSphere PowerCLIで実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Welcome to the VMware vSphere PowerCLI! Log in to a vCenter Server or ESX host: Connect-VIServer To find out what commands are available, type: Get-VICommand To show searchable help for all PowerCLI commands: Get-PowerCLIHelp Once you've connected, display all virtual machines: Get-VM If you need more help, visit the PowerCLI community: Get-PowerCLICommunity Copyright (C) 1998-2012 VMware, Inc. All rights reserved.PowerCLI C:\Program Files\VMware\Infrastructure\vSphere PowerCLI> cd C:\tool\Pow erShellCUSTOM PowerCLI C:\tool\PowerShellCUSTOM> .\PowerCLIVersion.ps1 PowerCLI Version ---------------- VMware vSphere PowerCLI 5.1 Release 1 build 793510 --------------- Snapin Versions --------------- VMWare AutoDeploy PowerCLI Component 5.1 build 768137 VMWare ImageBuilder PowerCLI Component 5.1 build 768137 VMware vCloud Director PowerCLI Component 1.5 build 793505 VMware License PowerCLI Component 5.1 build 669840 VMware vSphere PowerCLI Component 5.1 build 793489 PowerCLI C:\tool\PowerShellCUSTOM> |
しかし、コマンドプロンプトやバッチファイルから以下のように実行しても、エラーになります。
1 2 3 4 5 6 7 8 9 10 11 |
C:\>cd C:\tool\PowerShellCUSTOM C:\tool\PowerShellCUSTOM>powershell .\PowerCLIVersion.ps1 用語 'Get-PowerCLIVersion' は、コマンドレット、関数、スクリプト ファイル、また は操作可能なプログラムの名前として認識されません。名前が正しく記述されているこ とを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行 してください。 発生場所 C:\tool\PowerShellCUSTOM\PowerCLIVersion.ps1:1 文字:20 + Get-PowerCLIVersion <<<< + CategoryInfo : ObjectNotFound: (Get-PowerCLIVersion:String) []、 CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException |
この場合は、実行するps1ファイルに以下の行を追加します
1 2 |
#PowerCLIスナップイン組み込み Add-PSSnapin VMware.VimAutomation.Core |
実際にやってみます。
Get-PowerCLIVersion.ps1 を変更
1 2 3 4 5 |
#PowerCLIスナップイン組み込み Add-PSSnapin VMware.VimAutomation.Core #vSpherePowerCLIのバージョン表示 Get-PowerCLIVersion |
コマンドプロンプトから実行してみます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
C:\tool\PowerShellCUSTOM>powershell .\PowerCLIVersion.ps1 PowerCLI Version ---------------- VMware vSphere PowerCLI 5.1 Release 1 build 793510 --------------- Snapin Versions --------------- VMWare AutoDeploy PowerCLI Component 5.1 build 768137 VMWare ImageBuilder PowerCLI Component 5.1 build 768137 VMware vCloud Director PowerCLI Component 1.5 build 793505 VMware License PowerCLI Component 5.1 build 669840 VMware vSphere PowerCLI Component 5.1 build 793489 C:\tool\PowerShellCUSTOM> |
実行できました。
あとは以下のようなバッチファイルを書けば、すぐに実行できますね。
1 2 3 |
@echo off cd C:\tool\PowerShellCUSTOM powershell .\PowerCLIVersion.ps1 |