สำหรับผู้ที่อาจประสบปัญหานี้จากการเปลี่ยนแปลงล่าสุดในคอมพิวเตอร์ของคุณที่เกี่ยวข้องกับ Hyper-V คุณจะต้องปิดการใช้งานขณะใช้ VMWare หรือ VirtualBox พวกเขาไม่ทำงานร่วมกัน Windows Sandbox และ WSL 2 จำเป็นต้องใช้ Hyper-V Hypervisor ซึ่งปัจจุบันทำให้ VMWare หยุดทำงาน โดยทั่วไปคุณจะต้องเรียกใช้คำสั่งต่อไปนี้เพื่อเปิด / ปิดบริการ Hyper-V ในการรีบูตครั้งถัดไป
หากต้องการปิดใช้งาน Hyper-V และทำให้ VMWare ทำงานใน PowerShell ในฐานะผู้ดูแลระบบ:
bcdedit /set hypervisorlaunchtype off
ในการเปิดใช้งาน Hyper-V อีกครั้งและหยุด VMWare ในตอนนี้ใน PowerShell ในฐานะผู้ดูแลระบบ:
bcdedit /set hypervisorlaunchtype auto
คุณจะต้องรีบูตหลังจากนั้น ฉันได้เขียนสคริปต์ PowerShell ที่จะสลับสิ่งนี้ให้คุณและยืนยันด้วยกล่องโต้ตอบ มันยังยกระดับตนเองเป็นผู้ดูแลระบบโดยใช้เทคนิคนี้เพื่อให้คุณสามารถคลิกขวาและเรียกใช้สคริปต์เพื่อเปลี่ยนโหมด Hyper-V ของคุณได้อย่างรวดเร็ว สามารถแก้ไขได้อย่างง่ายดายเพื่อรีบูตให้คุณเช่นกัน แต่โดยส่วนตัวแล้วฉันไม่ต้องการให้เกิดขึ้น บันทึกเป็น hypervisor.ps1 และตรวจสอบให้แน่ใจว่าคุณได้รันSet-ExecutionPolicy RemoteSigned
เพื่อให้คุณสามารถเรียกใช้สคริปต์ PowerShell ได้
# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);
# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;
# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
# We are running as an administrator, so change the title and background colour to indicate this
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
$Host.UI.RawUI.BackgroundColor = "DarkBlue";
Clear-Host;
}
else {
# We are not running as an administrator, so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";
# Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
$newProcess.Arguments = "-windowstyle hidden & '" + $script:MyInvocation.MyCommand.Path + "'"
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
Exit;
}
Add-Type -AssemblyName System.Windows.Forms
$state = bcdedit /enum | Select-String -Pattern 'hypervisorlaunchtype\s*(\w+)\s*'
if ($state.matches.groups[1].ToString() -eq "Off"){
$UserResponse= [System.Windows.Forms.MessageBox]::Show("Enable Hyper-V?" , "Hypervisor" , 4)
if ($UserResponse -eq "YES" )
{
bcdedit /set hypervisorlaunchtype auto
[System.Windows.Forms.MessageBox]::Show("Enabled Hyper-V. Reboot to apply." , "Hypervisor")
}
else
{
[System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
exit
}
} else {
$UserResponse= [System.Windows.Forms.MessageBox]::Show("Disable Hyper-V?" , "Hypervisor" , 4)
if ($UserResponse -eq "YES" )
{
bcdedit /set hypervisorlaunchtype off
[System.Windows.Forms.MessageBox]::Show("Disabled Hyper-V. Reboot to apply." , "Hypervisor")
}
else
{
[System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
exit
}
}