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

如何用PowerShell创建引用其他WMI类实例属性的WMI类属性

WMI类引用属性创建修正方案

你在创建WMI类引用属性时的核心问题有两处:一是引用属性的数组标记错误,二是硬编码了目标类名导致灵活性不足。以下是修正后的实现代码及关键说明:

关键修正点

  • 引用单个实例时,添加属性的第三个参数(是否为数组)需设为$false,原代码传$true会将属性设为引用数组类型
  • 替换硬编码的Device_WarrantyElement为变量$classNameElement,确保与目标类名一致
  • 可选添加Description限定符提升属性可读性

修正后的完整代码

$Namespace = "root\cimv2\YourCustomNamespace" # 替换为你的目标命名空间
$classNameElement = "Device_WarrantyElement"
$className = "YourTargetClass" # 替换为你的主类名

if (!(Get-CimInstance -Namespace $Namespace -ClassName $classNameElement)){
    $managementClass = New-Object System.Management.ManagementClass($Namespace, [String]::Empty, $null)
    $managementClass["__CLASS"] = $classNameElement

    # 添加ID键属性
    $managementClass.Properties.Add("ID", [System.Management.CimType]::String, $false)
    $managementClass.Properties["ID"].Qualifiers.Add("Key", $true)

    # 添加其他属性
    $managementClass.Properties.Add("Name", [System.Management.CimType]::String, $false)
    $managementClass.Properties.Add("Description", [System.Management.CimType]::String, $false)
    $managementClass.Properties.Add("Type", [System.Management.CimType]::String, $false)
    $managementClass.Properties.Add("Start", [System.Management.CimType]::String, $false)
    $managementClass.Properties.Add("End", [System.Management.CimType]::String, $false)

    $managementClass.Put()
}

$managementClass = $null

if (!(Get-CimInstance -Namespace $Namespace -ClassName $className)){
    $managementClass = New-Object System.Management.ManagementClass($Namespace, [String]::Empty, $null)
    $managementClass["__CLASS"] = $className

    # 添加Serial键属性
    $managementClass.Properties.Add("Serial", [System.Management.CimType]::String, $false)
    $managementClass.Properties["Serial"].Qualifiers.Add("Key", $true)

    # 添加Country属性
    $managementClass.Properties.Add("Country", [System.Management.CimType]::String, $false)

    # 修正后的Warranty引用属性创建
    $managementClass.Properties.Add("Warranty", [System.Management.CimType]::Reference, $false)
    $managementClass.Properties["Warranty"].Qualifiers.Add("CIMTYPE", "ref:$classNameElement")
    # 可选:添加描述限定符
    $managementClass.Properties["Warranty"].Qualifiers.Add("Description", "关联$classNameElement类的保修实例")

    $managementClass.Put()
}

验证方法

类创建完成后,可通过以下命令验证引用属性是否正确配置:

Get-CimClass -Namespace $Namespace -ClassName $className | 
    Select-Object -ExpandProperty Properties | 
    Where-Object Name -eq Warranty

输出结果中CimType应为Reference,Qualifiers中会包含正确的CIMTYPE值。

内容的提问来源于stack exchange,提问作者Pete Mitchell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:44:50