PowerShell DSC Journey – Day 23

No intro. Going right back into trying to add a Network Adapter and a VMNetwork to that adapter. I look first at the hardware profile, and lo and behold I have 9 legacy network adapters, which is interesting because yesterday I had none. So, I remove them all first.

Ok, first things first, let’s make sure I can get the network I want, which I can do using this command:

Get-SCVMNetwork | Where Name -eq $VMNetwork

The next thing I can do is try to create a new network adapter on the Hardware Profile, which I can do using this command.

New-SCVirtualNetworkAdapter -HardwareProfile $ResourceHWProfile

However, this creates a Legacy network adapter. After reading the help file I determine that I need the -Synthetic parameter in order to make it a non-legacy network adapter.

So, that’s all working now. Next step is to see if I can actually set the Virtual Network on the adapter itself, which is where I failed so hard yesterday. This works.

PS C:\Scripts> Get-SCVirtualNetworkAdapter -HardwareProfile $ResourceHWProfile | Set-SCVirtualNetworkAdapter -VirtualNetwork "Server Traffic Virtual Switch"


SlotId                                     : 0
VirtualNetwork                             : Server Traffic Virtual Switch
VMwarePortGroup                            : 
MACAddressType                             : Dynamic
EthernetAddressType                        : Dynamic
PhysicalAddressType                        : Dynamic
MACAddress                                 : 
EthernetAddress                            : 
PhysicalAddress                            : 
RequiredBandwidth                          : 0
VirtualNetworkAdapterType                  : Synthetic
VmwAdapterIndex                            : 
LogicalNetwork                             : 
VMNetwork                                  : 
VMNetworkServiceSetting                    : 
VMSubnet                                   : 
PortClassification                         : 
VirtualNetworkAdapterPortProfileSet        : 
LogicalSwitch                              : 
GuestIPNetworkVirtualizationUpdatesEnabled : False
MACAddressSpoofingEnabled                  : False
MACAddressesSpoofingEnabled                : False
VMNetworkOptimizationEnabled               : False
VLanEnabled                                : False
VLanID                                     : 0
UsesSriov                                  : False
IsUsedForHostManagement                    : False
VirtualNetworkAdapterComplianceStatus      : Compliant
TemplateNicName                            : 
VirtualNetworkAdapterComplianceErrors      : {}
PerfNetworkKBytesRead                      : 0
PerfNetworkKBytesWrite                     : 0
DeviceID                                   : 
IPv4AddressType                            : Dynamic
IPv6AddressType                            : Dynamic
IPv4Addresses                              : {}
IPv6Addresses                              : {}
ObjectType                                 : VirtualNetworkAdapter
Accessibility                              : Public
Name                                       : Jacobs Profile
IsViewOnly                                 : False
Description                                : 
AddedTime                                  : 6/25/2014 3:31:39 PM
ModifiedTime                               : 6/25/2014 3:33:19 PM
Enabled                                    : True
MostRecentTask                             : Change properties of network adapter
ServerConnection                           : Microsoft.SystemCenter.VirtualMachineManager.Remoting.ServerConnection
ID                                         : cd305001-19bb-476f-80af-1b44600211b9
MarkedForDeletion                          : False
IsFullyCached                              : True
MostRecentTaskIfLocal                      : Change properties of network adapter

So, let’s try this next. And it works. I swear I did this a billion times but I am not even to go back and look because it might make me angry or depressed. Or both.

PS C:\Scripts> Get-SCVirtualNetworkAdapter -HardwareProfile $ResourceHWProfile | Set-SCVirtualNetworkAdapter -VirtualNetwork $VMNetwork


SlotId                                     : 0
VirtualNetwork                             : Server Traffic Virtual Switch
VMwarePortGroup                            : 
MACAddressType                             : Dynamic
EthernetAddressType                        : Dynamic
PhysicalAddressType                        : Dynamic
MACAddress                                 : 
EthernetAddress                            : 
PhysicalAddress                            : 
RequiredBandwidth                          : 0
VirtualNetworkAdapterType                  : Synthetic
VmwAdapterIndex                            : 
LogicalNetwork                             : 
VMNetwork                                  : 
VMNetworkServiceSetting                    : 
VMSubnet                                   : 
PortClassification                         : 
VirtualNetworkAdapterPortProfileSet        : 
LogicalSwitch                              : 
GuestIPNetworkVirtualizationUpdatesEnabled : False
MACAddressSpoofingEnabled                  : False
MACAddressesSpoofingEnabled                : False
VMNetworkOptimizationEnabled               : False
VLanEnabled                                : False
VLanID                                     : 0
UsesSriov                                  : False
IsUsedForHostManagement                    : False
VirtualNetworkAdapterComplianceStatus      : Compliant
TemplateNicName                            : 
VirtualNetworkAdapterComplianceErrors      : {}
PerfNetworkKBytesRead                      : 0
PerfNetworkKBytesWrite                     : 0
DeviceID                                   : 
IPv4AddressType                            : Dynamic
IPv6AddressType                            : Dynamic
IPv4Addresses                              : {}
IPv6Addresses                              : {}
ObjectType                                 : VirtualNetworkAdapter
Accessibility                              : Public
Name                                       : Jacobs Profile
IsViewOnly                                 : False
Description                                : 
AddedTime                                  : 6/25/2014 3:31:39 PM
ModifiedTime                               : 6/25/2014 3:34:10 PM
Enabled                                    : True
MostRecentTask                             : Change properties of network adapter
ServerConnection                           : Microsoft.SystemCenter.VirtualMachineManager.Remoting.ServerConnection
ID                                         : cd305001-19bb-476f-80af-1b44600211b9
MarkedForDeletion                          : False
IsFullyCached                              : True
MostRecentTaskIfLocal                      : Change properties of network adapter

So, let’s run my Configuration and see what happens again. And it works. Of course it does.

PS C:\Scripts> Start-DscConfiguration -Wait -Verbose -Path .\TestSCVMMHardware
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredState
Configuration'.
VERBOSE: An LCM method call arrived from computer MyComp with user sid S-1-5-21-738551990-92959840-526660263-26386.
VERBOSE: [MyComp]: LCM:  [ Start  Set      ]
VERBOSE: [MyComp]: LCM:  [ Start  Resource ]  [[cSCVMM_Hardware]MyHardwareProfile]
VERBOSE: [MyComp]: LCM:  [ Start  Test     ]  [[cSCVMM_Hardware]MyHardwareProfile]
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] VMMServer is MY-VMM-SERVER1
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Hardware Profile Name is Jacobs Profile
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\virtualmachinemanager
.R2Aliases.ps1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\VirtualMachineManager
LibraryClientCleanup.ps1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\psModules\virtualmach
inemanager\..\..\virtualmachinemanager.R2AdvFunc.psm1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\psModules\virtualmach
inemanager\..\..\Microsoft.SystemCenter.VirtualMachineManager.dll'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] VMMServer was found and is 'MY-VMM-SERVER1'
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Hardware Profile is Jacobs Profile
VERBOSE: [MyComp]: LCM:  [ End    Test     ]  [[cSCVMM_Hardware]MyHardwareProfile]  in 1.8182 seconds.
VERBOSE: [MyComp]: LCM:  [ Start  Set      ]  [[cSCVMM_Hardware]MyHardwareProfile]
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] VMMServer is MY-VMM-SERVER1
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Hardware Profile Name is Jacobs Profile
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\virtualmachinemanager
.R2Aliases.ps1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\VirtualMachineManager
LibraryClientCleanup.ps1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\psModules\virtualmach
inemanager\..\..\virtualmachinemanager.R2AdvFunc.psm1'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Loading module from path 'C:\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin\psModules\virtualmach
inemanager\..\..\Microsoft.SystemCenter.VirtualMachineManager.dll'.
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Checking if the Hardware Profile Jacobs Profile exists
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] The Hardware Profile was found
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] Ensure set to Present
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] No setting specified for DVDDrive.  No changes made
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] CPUCount is already set to 2
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] VMNetwork should be Server Traffic Virtual Switch.  Setting VMNetwork
VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] VMNetwork set to Server Traffic Virtual Switch
VERBOSE: [MyComp]: LCM:  [ End    Set      ]  [[cSCVMM_Hardware]MyHardwareProfile]  in 2.8620 seconds.
VERBOSE: [MyComp]: LCM:  [ End    Resource ]  [[cSCVMM_Hardware]MyHardwareProfile]
WARNING: The specified ConfigurationModeFrequencyMins was over-written to a multiple of RefreshFrequencyMins
VERBOSE: [MyComp]: LCM:  [ End    Set      ]    in  4.7235 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 2.879 seconds

I then add most of the same code to the section of Set-TargetResource for when a Hardware Profile doesn’t exist. Now let me delete my profile and try it. And of course I get some errors because I am using the $ResourceHWProfile variable in this section of code instead of just $Name. So, I change it to this.

            If($VMNetwork)
            {
                Write-Verbose "VMNetwork should be $VMNetwork.  Setting VMNetwork"

                New-SCVirtualNetworkAdapter -HardwareProfile $Name -Synthetic
                Get-SCVirtualNetworkAdapter -HardwareProfile $Name | Set-SCVirtualNetworkAdapter -VirtualNetwork $VMNetwork
                Write-Verbose "VMNetwork set to $VMNetwork"
            }
            Else
            {
                Write-Verbose "No setting specified for VMNetwork.  No changes made"
            }

And that works as well. One interesting thing to note. There is a lot of Write-Verbose commands I have that aren’t being written after this section of code. And I have no idea why either.

VERBOSE: [MyComp]:                            [[cSCVMM_Hardware]MyHardwareProfile] The Hardware Profile was not found.  Creating new Hardware Profile Jacobs Profile
VERBOSE: [MyComp]: LCM:  [ End    Set      ]  [[cSCVMM_Hardware]MyHardwareProfile]  in 2.4584 seconds.
VERBOSE: [MyComp]: LCM:  [ End    Resource ]  [[cSCVMM_Hardware]MyHardwareProfile]
WARNING: The specified ConfigurationModeFrequencyMins was over-written to a multiple of RefreshFrequencyMins
VERBOSE: [MyComp]: LCM:  [ End    Set      ]    in  4.3398 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 2.644 seconds

Well, that’s working now so I am happy. Now that I have a functioning Resource that does what I wanted it to do, this will be the last post in the series 🙂