You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell和Nutanix API更新虚拟机分类的实现疑问

使用PowerShell和Nutanix API更新虚拟机分类的实现疑问

我完全懂你现在卡在哪了——通过Nutanix API的GET请求拿到VM信息后,metadata里的categories是PSCustomObject类型,没法直接用.Add()或者+=这类集合方法来添加新的键值对,对吧?别着急,有几个简单又靠谱的方法能解决这个问题。

方法一:直接给PSCustomObject添加属性(最简单)

PowerShell里其实可以直接给PSCustomObject新增属性,不需要转成其他类型,用Add-Member命令就能搞定:

# 假设你已经通过GET请求拿到了$get_vm对象
# 直接给categories添加新的分类键值对,比如新增Environment:Production
$get_vm.metadata.categories | Add-Member -MemberType NoteProperty -Name "Environment" -Value "Production"

执行完这行命令后,你再查看$get_vm.metadata.categories,就能看到新的分类已经加进去了,原有分类也会完整保留。

方法二:转换为哈希表操作(灵活度更高)

如果后续需要对分类做更多复杂操作(比如删除、批量修改键值对),可以先把PSCustomObject转成哈希表,操作完再转回去:

第一步:先写个简单的转换函数(如果PowerShell没有内置的话)

function ConvertTo-Hashtable {
    param(
        [Parameter(ValueFromPipeline)]
        [PSCustomObject]$InputObject
    )
    $hashTable = @{}
    # 遍历PSCustomObject的所有属性,添加到哈希表
    $InputObject.PSObject.Properties | ForEach-Object {
        $hashTable[$_.Name] = $_.Value
    }
    return $hashTable
}

第二步:转换并操作哈希表

# 将原有categories转成哈希表
$categoriesHash = $get_vm.metadata.categories | ConvertTo-Hashtable

# 添加新分类
$categoriesHash["Environment"] = "Production"
# 也可以修改原有分类,比如把AppTier改成Web
$categoriesHash["AppTier"] = "Web"

# 把更新后的哈希表转回PSCustomObject,赋值回去
$get_vm.metadata.categories = [PSCustomObject]$categoriesHash

生成PUT请求的Payload并发送

不管用哪种方法,更新完categories后,就可以生成Payload并发送PUT请求了:

# 生成JSON格式的Payload,一定要加-Depth 100避免嵌套结构被截断
$payload = $get_vm | Select-Object spec, api_version, metadata | ConvertTo-Json -Depth 100

# 发送PUT请求
$put_vm = Invoke-RestMethod -Uri "https://mynutanix.net/vms/6e1b8781-6666-4830-a15a-0af30daccf89" `
    -Method PUT `
    -Headers $Header_Prism `
    -Body $payload

额外提醒

  • 生成Payload后,可以先把它输出到文件检查一下,确保JSON结构没问题:
$payload | Out-File "vm_update_payload.json"

打开这个文件确认categories里的新键值对已经正确存在,避免因为JSON格式错误导致API调用失败。

  • 不要随意修改metadata里的其他字段(比如spec_version、entity_version),这些是Nutanix API用来验证请求有效性的必要字段,保持原样即可。

备注:内容来源于stack exchange,提问作者motorbass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:43:10