我正在尝试将基于 WMI 的脚本转换为 CIM,该脚本能够将 IP 地址注入 Hyper-V Virtual Mahine 原始脚本是: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 语句修改这些只读属性?
提前致谢。