0

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 を使用すると変更できません

Microsoft によると、WMI と CIM は同等のはずですが、いくつかの違いがあるようです。

CIM 文を使用してこれらの読み取り専用プロパティを変更するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2