私は次のような管理スクリプトを作成したいと考えています:
- vSphere から VM を削除する
- VMのDNSエントリを削除する
- Windows DHCPサーバーでVMのIPアドレスを解放する
最初の項目は vSphere の PowerCLI で実行でき、最後の 2 つの項目は PowerShell " Cmdlets
" で実行できます。さらに、これらをファイルCmdlets
内に入れて*.ps1
、シェルからファイルを実行することもできます。
初期調査では、PowerCLI は PowerShell をラップ/拡張しているだけで、基本的には独自の vSphere 中心の で構成されていることがわかりましたCmdlets
。そこで疑問に思うのは、PowerCLI「コード」(Cmdlets
など) を他の PowerShell コードとともに PS1 ファイル内に配置し、通常の PS1 のように実行できるかどうかです。
答え1
PowerCLI「コード」(コマンドレットなど)を他の PowerShell コードとともに PS1 ファイル内に配置し、通常の PS1 のように実行できますか?
はい。ただし、PowerCLI コンソールを使用する場合のように期待どおりに動作させたい場合、環境を初期化する必要があります。ショートカット「VMware vSphere PowerCLI.lnk」を調べると、これがどのように行われるかがわかります。ターゲットは次のとおりです。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -noe -c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
これを詳しく見てみましょう:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Powershellバイナリ
-psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1"
の短縮形-PSConsole
。指定された vim.psc1 コンソールをロードします。
-noe
の短縮形です-NoExit
。起動コマンドを実行した後も閉じません。
-c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
の短縮形-Command
。[パスはエスケープ引用符で囲まれています] ファイル Initialize-PowerCLIEnvironment.ps1 をセッションにドット ソースします。
これを凝縮して、初期化を任意の .ps1 ファイルに配置することができます。このスタブの例から始めることができます。
# This is the main magic.
Add-PSSnapin VMware.VimAutomation.Core
# Dot source the PowerCLI init script
. 'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'
# We're up and running with "PowerCLI", do some VM stuff.
Connect-VIServer vcenter-01
Get-VM
...