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?
How do you run this function? You should do it like:
Set-HostNetworkAdapterDisabled -activeNic $activeNic -vmHostViewNetSys $vmHostViewNetSys
Regards, Robert
How do you run this function? You should do it like:
Set-HostNetworkAdapterDisabled -activeNic $activeNic -vmHostViewNetSys $vmHostViewNetSys
Regards, Robert
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!
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.