VMX ファイルを編集するスクリプト ESXiでの HotAdd/HotPlug 機能の無効化

VMX ファイルを編集するスクリプト  ESXiでの HotAdd/HotPlug 機能の無効化について調べていて、参考になりそうな情報がありました。

 

海外の情報ですが、スクリプトがかなり細かく作られています。

 

こちら

 

タイトルがすべてを表していると思います。いくつかのパラメーターに基づいて VM の vmx ファイルを編集するスクリプトを作成しましたが、その前に、スクリプトを作成した理由について少し歴史を説明します。

 

最近、作業中に、vSphere 5 をハイパーバイザーとして使用する XenDesktop 環境の仮想デスクトップで、ユーザーが「ハードウェアを安全に取り外してメディアを取り出す」を介して仮想デスクトップの NIC を取り出すことができるという問題に遭遇しました。

 

この問題は、多くの投稿で言及されており、この VMware KB で詳しく説明されているため、認識している可能性があります。

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1012225

 

KB には、devices.hotplug = “false” の行を vmx ファイルに追加する修正が含まれています。これを基本イメージに設定し、完全に電源を切ってから再度オンにすると、取り外し可能な NICSCSI コントローラーが見えなくなりました。ただし、イメージから作成したすべてのクローンには、vmx ファイルへの変更が含まれていませんでした。これについては、別の機会に調べます。とりあえず、デプロイされたすべての仮想デスクトップの vmx ファイルを変更する必要がありました。

 

これをクライアントごとに手動で行うのではなく、vmx ファイルを編集するスクリプトを探し始めました。私は PowerShell を楽しんでおり、PowerCLI を使用する必要があることはわかっていました。Get-VMAdvancedConfiguration と Set-VMAdvancedConfiguration の設定は、いくつかの VMware KB (最も注目すべきはこれ) で詳しく説明されていますが、一部の KB では、vmx で直接設定を編集するためのメソッドとクラスについても詳しく説明されています。

 

また、同僚の 1 人に尋ねたところ、非常に役立つ数行のコードを教えてくれました。  http://www.shogan.co.uk/で彼を見つけることができます。

とにかく、ここに十分なワッフルがスクリプトです:

 

 

#Script to add a value to the VMX file of a virtual client.
#This is to remove teh ability to eject the network card as described in
#http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1012225
#
#Values within <> are relevant to the environment the script is run in.
########################################################################################################
Function CheckVMX
{
    ForEach ($vmCHECK in $vmLIST)
    {
        $Error.psbase.clear()
 
        $Option = $vmCHECK.extensionData.config.extraconfig | where {$_.Key -eq "devices.hotplug"}
 
        If ($Option.value -match "false")
            {
            "Value already present in VMX file for " + $vmCHECK
            }
        Else
            {
            EditVMX
            }
    }
}
########################################################################################################
Function EditVMX
{
    $Error.psbase.clear()
 
    $vm = Get-View (Get-VM $vmCHECK).ID
    $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $vmConfigSpec.extraconfig += New-Object VMware.Vim.optionvalue
    $vmConfigSpec.extraconfig[0].Key="devices.hotplug"
    $vmConfigSpec.extraconfig[0].Value="false"
    $vm.ReconfigVM($vmConfigSpec)
 
    If ($Error.Count -eq 0)
        {
            "Updated VMX File for " + $vmCHECK
        }
    Else
        {
            "Error deleting " + $vmCHECK
            $Error[0].exception
        }
}
########################################################################################################
#Main Part of the Script
 
#Add VMware PowerCLI Snapin
add-pssnapin VMware.VimAutomation.Core
 
#Ignore vCenter certificate error and connect to single vCenter Instance
Set-PowerCLIConfiguration -InvalidCertificateAction "Ignore" -DefaultVIServerMode "single" -Confirm:$false
 
#Connect to vCenter Instance
Connect-VIServer <vCenter IP> -user "<vCenter Logon>" -pass <password>
 
#Create list of VM's file and log file paths
$Date = get-date -uformat "%d-%m-%Y"
$LogDir = "<Log Location>"
$Log = $LogDir + "\EditVM-" + $Date + ".log"
$vmLIST = Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"} | Where-Object {$_.Name -like "<Client Name>"}
 
#Set error action preference to silently continue
$ErrorActionPreference = 'SilentlyContinue'
 
#Run function and write output to logfile
CheckVMX | Out-File $Log
 
#Disconnect from vCenter Instance
Disconnect-VIServer -Server * -Force -Confirm:$false
 
#Script End

 

 

スクリプトは、名前に基づいて電源がオフになっているクライアントを見つけます。これは、テキスト ファイルなどを読み取るように簡単に変更できます。次に、スクリプトは、設定するパラメータが存在するかどうかを確認し、存在しない場合は、vmx ファイルを編集してパラメータを含めます。

 

クライアントがオンのときに vmx ファイルを編集できますが、設定は VDI クライアントの電源をオフにして再度オンにした場合にのみ適用されます。VDI クライアントを再起動すると有効にならないため、電源がオフの VM を検索する理由. また、エラー コードがある場合は、エラー コードを含むログ ファイルに出力を書き込みます。

 

これは、vmx ファイルを編集する限り、さまざまなアプリケーションを使用できる汎用性の高いスクリプトだと思います。

 

注: ここで説明する PowerShell コマンドを使用するには、関連するスナップインまたはモジュールを読み込む必要があります。

 

汎用性が高いとあり、いろいろと使えそうです。

 

バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK