func GetVirtualMachineSwitchName(vmName string) (string, error) { var script = ` param([string]$vmName) (Get-VMNetworkAdapter -VMName $vmName).SwitchName ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, vmName) if err != nil { return "", err } return strings.TrimSpace(cmdOut), nil }
func CreateVirtualSwitch(switchName string, switchType string) (bool, error) { var script = ` param([string]$switchName,[string]$switchType) $switches = Get-VMSwitch -Name $switchName -ErrorAction SilentlyContinue if ($switches.Count -eq 0) { New-VMSwitch -Name $switchName -SwitchType $switchType return $true } return $false ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, switchName, switchType) var created = strings.TrimSpace(cmdOut) == "True" return created, err }
func Uptime(vmName string) (uint64, error) { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName -ErrorAction SilentlyContinue $vm.Uptime.TotalSeconds ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, vmName) if err != nil { return 0, err } uptime, err := strconv.ParseUint(strings.TrimSpace(string(cmdOut)), 10, 64) return uptime, err }
func IsOff(vmName string) (bool, error) { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName -ErrorAction SilentlyContinue $vm.State -eq [Microsoft.HyperV.PowerShell.VMState]::Off ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, vmName) if err != nil { return false, err } var isRunning = strings.TrimSpace(cmdOut) == "True" return isRunning, err }
func IpAddress(mac string) (string, error) { var script = ` param([string]$mac, [int]$addressIndex) try { $ip = Get-Vm | %{$_.NetworkAdapters} | ?{$_.MacAddress -eq $mac} | %{$_.IpAddresses[$addressIndex]} if($ip -eq $null) { return "" } } catch { return "" } $ip ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, mac, "0") return cmdOut, err }
func Mac(vmName string) (string, error) { var script = ` param([string]$vmName, [int]$adapterIndex) try { $adapter = Get-VMNetworkAdapter -VMName $vmName -ErrorAction SilentlyContinue $mac = $adapter[$adapterIndex].MacAddress if($mac -eq $null) { return "" } } catch { return "" } $mac ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, vmName, "0") return cmdOut, err }
func GetVirtualMachineNetworkAdapterAddress(vmName string) (string, error) { var script = ` param([string]$vmName, [int]$addressIndex) try { $adapter = Get-VMNetworkAdapter -VMName $vmName -ErrorAction SilentlyContinue $ip = $adapter.IPAddresses[$addressIndex] if($ip -eq $null) { return $false } } catch { return $false } $ip ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, vmName, "0") return cmdOut, err }
func GetHostAdapterIpAddressForSwitch(switchName string) (string, error) { var script = ` param([string]$switchName, [int]$addressIndex) $HostVMAdapter = Get-VMNetworkAdapter -ManagementOS -SwitchName $switchName if ($HostVMAdapter){ $HostNetAdapter = Get-NetAdapter | ?{ $_.DeviceID -eq $HostVMAdapter.DeviceId } if ($HostNetAdapter){ $HostNetAdapterConfiguration = @(get-wmiobject win32_networkadapterconfiguration -filter "IPEnabled = 'TRUE' AND InterfaceIndex=$($HostNetAdapter.ifIndex)") if ($HostNetAdapterConfiguration){ return @($HostNetAdapterConfiguration.IpAddress)[$addressIndex] } } } return $false ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script, switchName, "0") return cmdOut, err }
func GetExternalOnlineVirtualSwitch() (string, error) { var script = ` $adapters = Get-NetAdapter -Physical -ErrorAction SilentlyContinue | Where-Object { $_.Status -eq 'Up' } | Sort-Object -Descending -Property Speed foreach ($adapter in $adapters) { $switch = Get-VMSwitch -SwitchType External | Where-Object { $_.NetAdapterInterfaceDescription -eq $adapter.InterfaceDescription } if ($switch -ne $null) { $switch.Name break } } ` var ps powershell.PowerShellCmd cmdOut, err := ps.Output(script) if err != nil { return "", err } var switchName = strings.TrimSpace(cmdOut) return switchName, nil }
func CreateDvdDrive(vmName string, isoPath string, generation uint) (uint, uint, error) { var ps powershell.PowerShellCmd var script string script = ` param([string]$vmName, [string]$isoPath) $dvdController = Add-VMDvdDrive -VMName $vmName -path $isoPath -Passthru $dvdController | Set-VMDvdDrive -path $null $result = "$($dvdController.ControllerNumber),$($dvdController.ControllerLocation)" $result ` cmdOut, err := ps.Output(script, vmName, isoPath) if err != nil { return 0, 0, err } cmdOutArray := strings.Split(cmdOut, ",") if len(cmdOutArray) != 2 { return 0, 0, errors.New("Did not return controller number and controller location") } controllerNumberTemp, err := strconv.ParseUint(strings.TrimSpace(cmdOutArray[0]), 10, 64) if err != nil { return 0, 0, err } controllerNumber := uint(controllerNumberTemp) controllerLocationTemp, err := strconv.ParseUint(strings.TrimSpace(cmdOutArray[1]), 10, 64) if err != nil { return controllerNumber, 0, err } controllerLocation := uint(controllerLocationTemp) return controllerNumber, controllerLocation, err }