From 3f4d0f60caf477317411461b4e27db884489a385 Mon Sep 17 00:00:00 2001 From: John Bowdre Date: Thu, 16 Jun 2022 13:33:57 -0500 Subject: [PATCH] new action: enableVBS.js --- .../com.virtuallypotato.utility/enableVBS.js | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Orchestrator/Actions/com.virtuallypotato.utility/enableVBS.js diff --git a/Orchestrator/Actions/com.virtuallypotato.utility/enableVBS.js b/Orchestrator/Actions/com.virtuallypotato.utility/enableVBS.js new file mode 100644 index 0000000..20280f8 --- /dev/null +++ b/Orchestrator/Actions/com.virtuallypotato.utility/enableVBS.js @@ -0,0 +1,48 @@ +/* JavaScript: enableVBS + Modifies a VM to enable Virtualization Based Security. + Inputs: vmName (string) + Return type: string +*/ +var vm = VcPlugin.getAllVirtualMachines(null, vmName)[0]; + +// Power off VM if it's running +var originalState = vm.state; +if (originalState === "poweredOn") { + System.log("VM is running running. Stopping VM...") + function sleep(milliseconds) { + var timeStart = new Date().getTime(); + while (true) { + var elapsedTime = new Date().getTime() - timeStart; + if (elapsedTime > milliseconds) { + break; + } + } + } + vm.shutdownGuest(); + while (vm.state != "poweredOff") { + System.debug("VM is stopping...") + sleep(4000); + vm = VcPlugin.getAllVirtualMachines(null, vmName)[0]; + } + System.log("VM is stopped."); +} + +// Enable VBS +var bootOpts = new VcVirtualMachineBootOptions(); +var flags = new VcVirtualMachineFlagInfo(); +var spec = new VcVirtualMachineConfigSpec(); +bootOpts.efiSecureBootEnabled = true; +flags.vbsEnabled = true; +flags.vvtdEnabled = true; +spec.firmware = VcGuestOsDescriptorFirmwareType.efi; +spec.nestedHVEnabled = true; +spec.bootOptions = bootOpts; +spec.flags = flags; +System.log("Reconfiguring VM...") +vm.reconfigVM_Task(spec); + +// Start VM if it was running. +if (originalState === "poweredOn") { + System.log("VM is starting...") + vm.powerOnVM_Task(); +}