【发布时间】:2016-11-07 15:57:02
【问题描述】:
我正在尝试将基于 WMI 的脚本转换为 CIM,此脚本能够将 IP 地址注入 Hyper-V 虚拟机 原文为:http://www.ravichaganti.com/blog/?p=2766
就我而言,我已将 WMI 转换为 CIM 语句,如下所示:
$vmname="mytestvm"
$vm=get-ciminstance -namespace 'root\virtualization\v2' -Class 'Msvm_ComputerSystem' -ComputerName $ComputerName | Where-Object { $_.ElementName -eq $vmname }
$VMSettings = get-cimassociatedinstance $vm -resultclassname 'Msvm_VirtualSystemSettingData' | Where-Object { $_.VirtualSystemType
-eq 'Microsoft:Hyper-V:System:Realized' }
$vmnetadapters=get-cimassociatedinstance $vmSettings -resultclassname 'Msvm_SyntheticEthernetPortSettingData'
$NetworkSettings = @( Get-CimAssociatedInstance $vmnetadapters -resultclassname 'Msvm_GuestNetworkAdapterConfiguration' )
到目前为止,一切正常,数据被访问并且我能够看到界面特征。 但是当我尝试像原始脚本一样设置一个值时,我无法修改它,它告诉我属性设置为只读。
这些分配不起作用。
$NetworkSettings[0].DHCPEnabled = $false
$NetworkSettings[0].IPAddresses = $IPAddress
$NetworkSettings[0].Subnets = $Subnet
当我用“Get-Member”检查对象时,我可以看到这些属性只有“get”方法,而“set”方法不可用。
Name MemberType Definition
---- ---------- ----------
DefaultGateways Property string[] DefaultGateways {get;}
DHCPEnabled Property bool DHCPEnabled {get;}
DNSServers Property string[] DNSServers {get;}
InstanceID Property string InstanceID {get;}
IPAddresses Property string[] IPAddresses {get;}
IPAddressOrigins Property uint16[] IPAddressOrigins {get;}
ProtocolIFType Property uint16 ProtocolIFType {get;}
PSComputerName Property string PSComputerName {get;}
Subnets Property string[] Subnets {get;}
使用 WMI 的原始脚本能够修改这些值,但在我使用 CIM 时无法修改
按照微软的WMI和CIM应该是等价的,但是好像有一些区别。
如何使用 CIM 语句修改这些只读属性?
提前致谢。
【问题讨论】:
标签: powershell hyper-v psobject get-wmiobject