PowerCLI

 View Only
  • 1.  Disabling host network adapater

    Posted Aug 25, 2010 09:03 AM

    I'm trying to run the following script but get an error:

    Cannot validate argument on parameter 'VIObject'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.

    At :line:46 char:18

    + $_this = Get-View <<<< $vmHostViewNetSys

    Function Set-HostNetworkAdapterDisabled($activeNic, $vmHostViewNetSys)
    {
    	# ------- UpdateVirtualSwitch -------
    	
    	$vswitchName = "vSwitch3"
    	
    	$spec = New-Object VMware.Vim.HostVirtualSwitchSpec
    	$spec.numPorts = 64
    	$spec.bridge = New-Object VMware.Vim.HostVirtualSwitchBondBridge
    	$spec.bridge.nicDevice = New-Object System.String[] (2)
    	$spec.bridge.nicDevice[0] = "vmnic5"
    	$spec.bridge.nicDevice[1] = "vmnic10"
    	$spec.bridge.beacon = New-Object VMware.Vim.HostVirtualSwitchBeaconConfig
    	$spec.bridge.beacon.interval = 1
    	$spec.bridge.linkDiscoveryProtocolConfig = New-Object VMware.Vim.LinkDiscoveryProtocolConfig
    	$spec.bridge.linkDiscoveryProtocolConfig.protocol = "cdp"
    	$spec.bridge.linkDiscoveryProtocolConfig.operation = "listen"
    	$spec.policy = New-Object VMware.Vim.HostNetworkPolicy
    	$spec.policy.security = New-Object VMware.Vim.HostNetworkSecurityPolicy
    	$spec.policy.security.allowPromiscuous = $false
    	$spec.policy.security.macChanges = $false
    	$spec.policy.security.forgedTransmits = $false
    	$spec.policy.nicTeaming = New-Object VMware.Vim.HostNicTeamingPolicy
    	$spec.policy.nicTeaming.policy = "loadbalance_srcid"
    	$spec.policy.nicTeaming.reversePolicy = $true
    	$spec.policy.nicTeaming.notifySwitches = $true
    	$spec.policy.nicTeaming.rollingOrder = $false
    	$spec.policy.nicTeaming.failureCriteria = New-Object VMware.Vim.HostNicFailureCriteria
    	$spec.policy.nicTeaming.failureCriteria.checkSpeed = "minimum"
    	$spec.policy.nicTeaming.failureCriteria.speed = 10
    	$spec.policy.nicTeaming.failureCriteria.checkDuplex = $false
    	$spec.policy.nicTeaming.failureCriteria.fullDuplex = $false
    	$spec.policy.nicTeaming.failureCriteria.checkErrorPercent = $false
    	$spec.policy.nicTeaming.failureCriteria.percentage = 0
    	$spec.policy.nicTeaming.failureCriteria.checkBeacon = $false
    	$spec.policy.nicTeaming.nicOrder = New-Object VMware.Vim.HostNicOrderPolicy
    	$spec.policy.nicTeaming.nicOrder.activeNic = New-Object System.String[] (1)
    	$spec.policy.nicTeaming.nicOrder.activeNic[0] = $activeNic
    	$spec.policy.offloadPolicy = New-Object VMware.Vim.HostNetOffloadCapabilities
    	$spec.policy.offloadPolicy.csumOffload = $true
    	$spec.policy.offloadPolicy.tcpSegmentation = $true
    	$spec.policy.offloadPolicy.zeroCopyXmit = $true
    	$spec.policy.shapingPolicy = New-Object VMware.Vim.HostNetworkTrafficShapingPolicy
    	$spec.policy.shapingPolicy.enabled = $false
    	
    	$_this = Get-View $vmHostViewNetSys
    	$_this.UpdateVirtualSwitch($vswitchName, $spec)
    }
    
    foreach ($VMHost in Get-VMHost)
    {
    	"testing host " + $VMHost | Out-File $logFile -Append
    	# vmHost View
    	$vmHostView = $VMHost | Get-View
    	$vmHostViewNetSys = $vmHostView.Configmanager.NetworkSystem
                    foreach ($nic in $hostNics)
    	{		
    		#disable first host network adapter
    		"disabling network adapter " + $nic + " on host " + $VMHost | Out-File $logFile -Append
    		Set-HostNetworkAdapterDisabled($nic, $vmHostViewNetSys)	
                                    # run tests below....
                    }
    }
    
    

    but if i change the code to access the Get-View Object of the $vmHostViewNetSys before entering into the function it doesn't error. Any ideas?



  • 2.  RE: Disabling host network adapater
    Best Answer

    Posted Aug 25, 2010 09:25 AM

    How do you run this function? You should do it like:

    Set-HostNetworkAdapterDisabled -activeNic $activeNic -vmHostViewNetSys $vmHostViewNetSys
    

    Regards, Robert



  • 3.  RE: Disabling host network adapater

    Posted Aug 25, 2010 09:40 AM

    I just run it calling Set-HostNetworkAdapterDisabled($nic, $vmHostViewNetSys)

    which i whought called the function ok, but just errors when trying to Get-View on the Host Network System. But, i tried it your way and it worked. Can you explain why?

    thanks very much!



  • 4.  RE: Disabling host network adapater

    Posted Aug 25, 2010 09:48 AM

    You can't call a function with "Set-HostNetworkAdapterDisabled($nic, $vmHostViewNetSys)" in PowerShell. You have to call it like you call a cmdlet. So no () and no comma's. You can do it without the parameter names, like this:

    Set-HostNetworkAdapterDisabled $nic $vmHostViewNetSys
    

    but then you have to know the parameters position. So I think it is easier to use the parameter names.