1

http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.VirtualMachine.html#reconfigure

我正在编写一个脚本来更新虚拟机的 VMX 状态以符合某些标准,但也希望备份它们的状态以防它们需要重新恢复。任务工作正常,ReconfigVM我可以通过($VM | Get-View).config.extraconfig

我不知道如何使用VirtualMachineConfigSpec删除项目。

假设我更新了一个值。

$ExtraOptions = @{
    "isolation.device.connectable.disable"="true";
    "log.rotateSize"="100000";
}

$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
Foreach ($Option in $ExtraOptions.GetEnumerator()) {
    $OptionValue = New-Object VMware.Vim.optionvalue
    $OptionValue.Key = $Option.Key
    $OptionValue.Value = $Option.Value
    $vmConfigSpec.extraconfig += $OptionValue
}
# ...

foreach($vm in $vms){
    $vm.ReconfigVM($vmConfigSpec)
}

现在假设我在更改它们之前为这些值创建了配置规范的备份哈希表。由于这些值在更新之前不存在,因此之前没有任何值。

A$null引发错误。

"isolation.device.connectable.disable"=$null;

""不更新

"isolation.device.connectable.disable"="";

我可以简单地恢复布尔值并将整数值设置为0,但我宁愿只是从配置中删除该值。

文档说明了以下关于extraconfig

虚拟机的其他配置信息。这描述了对附加选项的一组修改。如果存在键但未设置值或值为空字符串,则删除选项。否则,键被设置为新值。

与可通过 ConfigSpec 对象中的其他字段显式配置的参数冲突的配置键将被静默忽略。

编辑

传递空白字符(即" ")会将值设置为falseor 0

4

2 回答 2

1

显然,您必须下载 vmx 文件(存储这些选项的位置),然后在虚拟机关闭时重新上传修改后的文件,并且可能也未注册。

于 2014-06-13T22:16:30.697 回答
1
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.extraconfig = New-Object VMware.Vim.optionvalue
$vmConfigSpec.extraconfig[0].Key="cloud.uuid"
$vmConfigSpec.extraconfig[0].Value=""
$vm.ReconfigVM($vmConfigSpec)

将加号与空值“”一起删除应该会从 vmx 文件中删除该行。

于 2017-01-20T15:21:10.547 回答