func CreateExternalVirtualSwitch(vmName string, switchName string) error { var script = ` param([string]$vmName,[string]$switchName) $switch = $null $names = @('ethernet','wi-fi','lan') $adapters = foreach ($name in $names) { Get-NetAdapter -Physical -Name $name -ErrorAction SilentlyContinue | where status -eq 'up' } foreach ($adapter in $adapters) { $switch = Get-VMSwitch -SwitchType External | where { $_.NetAdapterInterfaceDescription -eq $adapter.InterfaceDescription } if ($switch -eq $null) { $switch = New-VMSwitch -Name $switchName -NetAdapterName $adapter.Name -AllowManagementOS $true -Notes 'Parent OS, VMs, WiFi' } if ($switch -ne $null) { break } } if($switch -ne $null) { Get-VMNetworkAdapter -VMName $vmName | Connect-VMNetworkAdapter -VMSwitch $switch } else { Write-Error 'No internet adapters found' } ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, switchName) return err }
func EnableVirtualMachineIntegrationService(vmName string, integrationServiceName string) error { integrationServiceId := "" switch integrationServiceName { case "Time Synchronization": integrationServiceId = "2497F4DE-E9FA-4204-80E4-4B75C46419C0" case "Heartbeat": integrationServiceId = "84EAAE65-2F2E-45F5-9BB5-0E857DC8EB47" case "Key-Value Pair Exchange": integrationServiceId = "2A34B1C2-FD73-4043-8A5B-DD2159BC743F" case "Shutdown": integrationServiceId = "9F8233AC-BE49-4C79-8EE3-E7E1985B2077" case "VSS": integrationServiceId = "5CED1297-4598-4915-A5FC-AD21BB4D02A4" case "Guest Service Interface": integrationServiceId = "6C09BB55-D683-4DA0-8931-C9BF705F6480" default: panic("unrecognized Integration Service Name") } var script = ` param([string]$vmName,[string]$integrationServiceId) Get-VMIntegrationService -VmName $vmName | ?{$_.Id -match $integrationServiceId} | Enable-VMIntegrationService ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, integrationServiceId) return err }
func SetVirtualMachineVlanId(vmName string, vlanId string) error { var script = ` param([string]$vmName,[string]$vlanId) Set-VMNetworkAdapterVlan -VMName $vmName -Access -VlanId $vlanId ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, vlanId) return err }
func SetVirtualMachineCpuCount(vmName string, cpu uint) error { var script = ` param([string]$vmName, [int]$cpu) Set-VMProcessor -VMName $vmName -Count $cpu ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, strconv.FormatInt(int64(cpu), 10)) return err }
func MountFloppyDrive(vmName string, path string) error { var script = ` param([string]$vmName, [string]$path) Set-VMFloppyDiskDrive -VMName $vmName -Path $path ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, path) return err }
func DeleteAllDvdDrives(vmName string) error { var script = ` param([string]$vmName) Get-VMDvdDrive -VMName $vmName | Remove-VMDvdDrive ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func RestartVirtualMachine(vmName string) error { var script = ` param([string]$vmName) Restart-VM $vmName -Force -Confirm:$false ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func SetNetworkAdapterVlanId(switchName string, vlanId string) error { var script = ` param([string]$networkAdapterName,[string]$vlanId) Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName $networkAdapterName -Access -VlanId $vlanId ` var ps powershell.PowerShellCmd err := ps.Run(script, switchName, vlanId) return err }
func ConnectVirtualMachineNetworkAdapterToSwitch(vmName string, switchName string) error { var script = ` param([string]$vmName,[string]$switchName) Get-VMNetworkAdapter -VMName $vmName | Connect-VMNetworkAdapter -SwitchName $switchName ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, switchName) return err }
func UnmountFloppyDrive(vmName string) error { var script = ` param([string]$vmName) Set-VMFloppyDiskDrive -VMName $vmName -Path $null ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func CompactDisks(expPath string, vhdDir string) error { var script = ` param([string]$srcPath, [string]$vhdDirName) Get-ChildItem "$srcPath/$vhdDirName" -Filter *.vhd* | %{ Optimize-VHD -Path $_.FullName -Mode Full } ` var ps powershell.PowerShellCmd err := ps.Run(script, expPath, vhdDir) return err }
func UntagVirtualMachineNetworkAdapterVlan(vmName string, switchName string) error { var script = ` param([string]$vmName,[string]$switchName) Set-VMNetworkAdapterVlan -VMName $vmName -Untagged Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName $switchName -Untagged ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, switchName) return err }
func DeleteDvdDrive(vmName string, controllerNumber uint, controllerLocation uint) error { var script = ` param([string]$vmName,[int]$controllerNumber,[int]$controllerLocation) $vmDvdDrive = Get-VMDvdDrive -VMName $vmName -ControllerNumber $controllerNumber -ControllerLocation $controllerLocation if (!$vmDvdDrive) {throw 'unable to find dvd drive'} Remove-VMDvdDrive -VMName $vmName -ControllerNumber $controllerNumber -ControllerLocation $controllerLocation ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName, strconv.FormatInt(int64(controllerNumber), 10), strconv.FormatInt(int64(controllerLocation), 10)) return err }
func CopyExportedVirtualMachine(expPath string, outputPath string, vhdDir string, vmDir string) error { var script = ` param([string]$srcPath, [string]$dstPath, [string]$vhdDirName, [string]$vmDir) Move-Item -Path $srcPath/*.* -Destination $dstPath Move-Item -Path $srcPath/$vhdDirName -Destination $dstPath Move-Item -Path $srcPath/$vmDir -Destination $dstPath ` var ps powershell.PowerShellCmd err := ps.Run(script, expPath, outputPath, vhdDir, vmDir) return err }
func DeleteVirtualSwitch(switchName string) error { var script = ` param([string]$switchName) $switch = Get-VMSwitch -Name $switchName -ErrorAction SilentlyContinue if ($switch -ne $null) { $switch | Remove-VMSwitch -Force -Confirm:$false } ` var ps powershell.PowerShellCmd err := ps.Run(script, switchName) return err }
func ShutDown(vmName string) error { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName -ErrorAction SilentlyContinue if ($vm.State -eq [Microsoft.HyperV.PowerShell.VMState]::Running) { Stop-VM -Name $vmName -Force -Confirm:$false } ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func StartVirtualMachine(vmName string) error { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName -ErrorAction SilentlyContinue if ($vm.State -eq [Microsoft.HyperV.PowerShell.VMState]::Off) { Start-VM -Name $vmName -Confirm:$false } ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func StopVirtualMachine(vmName string) error { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName if ($vm.State -eq [Microsoft.HyperV.PowerShell.VMState]::Running) { Stop-VM -VM $vm -Force -Confirm:$false } ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
func SetVirtualMachineVirtualizationExtensions(vmName string, enableVirtualizationExtensions bool) error { var script = ` param([string]$vmName, [string]$exposeVirtualizationExtensionsString) $exposeVirtualizationExtensions = [System.Boolean]::Parse($exposeVirtualizationExtensionsString) Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions $exposeVirtualizationExtensions ` exposeVirtualizationExtensionsString := "False" if enableVirtualizationExtensions { exposeVirtualizationExtensionsString = "True" } var ps powershell.PowerShellCmd err := ps.Run(script, vmName, exposeVirtualizationExtensionsString) return err }
func SetVirtualMachineDynamicMemory(vmName string, enableDynamicMemory bool) error { var script = ` param([string]$vmName, [string]$enableDynamicMemoryString) $enableDynamicMemory = [System.Boolean]::Parse($enableDynamicMemoryString) Set-VMMemory -VMName $vmName -DynamicMemoryEnabled $enableDynamicMemory ` enableDynamicMemoryString := "False" if enableDynamicMemory { enableDynamicMemoryString = "True" } var ps powershell.PowerShellCmd err := ps.Run(script, vmName, enableDynamicMemoryString) return err }
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 SetVirtualMachineMacSpoofing(vmName string, enableMacSpoofing bool) error { var script = ` param([string]$vmName, $enableMacSpoofing) Set-VMNetworkAdapter -VMName $vmName -MacAddressSpoofing $enableMacSpoofing ` var ps powershell.PowerShellCmd enableMacSpoofingString := "Off" if enableMacSpoofing { enableMacSpoofingString = "On" } err := ps.Run(script, vmName, enableMacSpoofingString) return err }
func SetVirtualMachineSecureBoot(vmName string, enableSecureBoot bool) error { var script = ` param([string]$vmName, $enableSecureBoot) Set-VMFirmware -VMName $vmName -EnableSecureBoot $enableSecureBoot ` var ps powershell.PowerShellCmd enableSecureBootString := "Off" if enableSecureBoot { enableSecureBootString = "On" } err := ps.Run(script, vmName, enableSecureBootString) return err }
func DeleteVirtualMachine(vmName string) error { var script = ` param([string]$vmName) $vm = Get-VM -Name $vmName if (($vm.State -ne [Microsoft.HyperV.PowerShell.VMState]::Off) -and ($vm.State -ne [Microsoft.HyperV.PowerShell.VMState]::OffCritical)) { Stop-VM -VM $vm -TurnOff -Force -Confirm:$false } Remove-VM -Name $vmName -Force -Confirm:$false ` var ps powershell.PowerShellCmd err := ps.Run(script, vmName) return err }
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 }