Merge pull request #9588 from blueelvis/task/dont-autoselect-hyperv
Do not auto-select Hyper-V driver if session has no privilegepull/9723/head
commit
97c4856e13
|
@ -232,6 +232,7 @@ var (
|
|||
DrvNotDetected = Kind{ID: "DRV_NOT_DETECTED", ExitCode: ExDriverNotFound}
|
||||
DrvAsRoot = Kind{ID: "DRV_AS_ROOT", ExitCode: ExDriverPermission}
|
||||
DrvNeedsRoot = Kind{ID: "DRV_NEEDS_ROOT", ExitCode: ExDriverPermission}
|
||||
DrvNeedsAdministrator = Kind{ID: "DRV_NEEDS_ADMINISTRATOR", ExitCode: ExDriverPermission}
|
||||
|
||||
GuestCacheLoad = Kind{ID: "GUEST_CACHE_LOAD", ExitCode: ExGuestError}
|
||||
GuestCert = Kind{ID: "GUEST_CERT", ExitCode: ExGuestError}
|
||||
|
|
|
@ -89,7 +89,7 @@ func status() registry.State {
|
|||
ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
|
||||
defer cancel()
|
||||
|
||||
cmd := exec.CommandContext(ctx, path, "@(Get-Wmiobject Win32_ComputerSystem).HypervisorPresent")
|
||||
cmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive","@(Get-Wmiobject Win32_ComputerSystem).HypervisorPresent")
|
||||
out, err := cmd.CombinedOutput()
|
||||
|
||||
if err != nil {
|
||||
|
@ -105,5 +105,32 @@ func status() registry.State {
|
|||
return registry.State{Installed: false, Running: false, Error: errorMessage, Fix: fixMessage, Doc: docURL}
|
||||
}
|
||||
|
||||
// Ensure user is either a Windows Administrator or a Hyper-V Administrator.
|
||||
adminCheckCmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive",`@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")`)
|
||||
adminCheckOut, adminCheckErr := adminCheckCmd.CombinedOutput()
|
||||
|
||||
if adminCheckErr != nil {
|
||||
errorMessage := fmt.Errorf("%s returned %q", strings.Join(adminCheckCmd.Args, " "), adminCheckOut)
|
||||
fixMessage := "Unable to determine current user's administrator privileges"
|
||||
return registry.State{Installed: true, Running: false, Error: errorMessage, Fix: fixMessage}
|
||||
}
|
||||
|
||||
hypervAdminCheckCmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive", `@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(([System.Security.Principal.SecurityIdentifier]::new("S-1-5-32-578")))`)
|
||||
hypervAdminCheckOut, hypervAdminCheckErr := hypervAdminCheckCmd.CombinedOutput()
|
||||
|
||||
if hypervAdminCheckErr != nil {
|
||||
errorMessage := fmt.Errorf("%s returned %q", strings.Join(hypervAdminCheckCmd.Args, " "), hypervAdminCheckOut)
|
||||
fixMessage := "Unable to determine current user's Hyper-V administrator privileges."
|
||||
return registry.State{Installed: true, Running: false, Error: errorMessage, Fix: fixMessage}
|
||||
}
|
||||
|
||||
|
||||
if (strings.TrimSpace(string(adminCheckOut)) != "True") && (strings.TrimSpace(string(hypervAdminCheckOut)) != "True") {
|
||||
err := fmt.Errorf("Hyper-V requires Administrator privileges")
|
||||
fixMessage := "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode."
|
||||
return registry.State{Installed: true, Running: false, Error: err, Fix: fixMessage}
|
||||
}
|
||||
|
||||
|
||||
return registry.State{Installed: true, Healthy: true}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue