Что могло вызвать сбой в работе скрипта для запуска виртуальной машины?

Я когда-то разрабатывал скрипт на PowerShell для того, чтобы установить время BIOS на виртуальной машине на более раннюю дату. Скрипт был собран из различных фрагментов и должен был вычислить разницу во времени, чтобы запустить виртуальную машину "в прошлом". Однако в последнее время он перестал работать и теперь запускает машину в текущее время. Я обрамил код сверху и снизу с помощью jscript для эстетики. Можете помочь разобраться, в чем может быть проблема? 

```powershell
@set @x=0; /*
@echo off
ver |>NUL find /v "5." && if "%~1"=="" cscript.exe //nologo //e:jscript "%~f0"& exit /b


;@echo off
;@Findstr -bv ;@ "%~f0" | powershell -noprofile -command - & goto:eof
# All except ;@ is a powershell script!
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
# Config parameters #
# Path of the VBoxManage executable.
$VB_MANAGE ='C:\Program Files\Oracle\VirtualBox\VBoxManage'

# Name or uuid of the virtualbox to start.
$vmname ='server'

# Default BIOS time dd/mm/yyyy
$BIOStime = '08/01/2023'

function CustomInputBox([string] $title, [string] $message, [string] $defaultText) {
  [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
  [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

 $userForm = New-Object System.Windows.Forms.Form
  $userForm.Text = "$title"
  $userForm.Size = New-Object System.Drawing.Size(400,150)
  $userForm.StartPosition = "CenterScreen"
      $userForm.AutoSize = $False
      $userForm.MinimizeBox = $False
      $userForm.MaximizeBox = $False
      $userForm.SizeGripStyle= "Hide"
      $userForm.WindowState = "Normal"
      $userForm.FormBorderStyle="Fixed3D"  
      $userForm.ShowInTaskBar = $False
     
  $OKButton = New-Object System.Windows.Forms.Button
  $OKButton.Location = New-Object System.Drawi
```
  • 15 февраля 2025 г. 19:04
Ответы на вопрос 2
Чтобы разобраться с проблемой, давайте рассмотрим возможные причины, по которым ваш скрипт для запуска виртуальной машины перестал работать, а также попробуем дать несколько рекомендаций.

1. **Изменения в конфигурации VirtualBox**:
   - Убедитесь, что путь к `VBoxManage` правильный и файл действительно существует по указанному пути.
   - Если версия VirtualBox была обновлена, возможно, изменился формат команд или параметры. Проверьте документацию для вашей версии VirtualBox.

2. **Изменение времени BIOS**:
   - Виртуальные машины, как правило, синхронизируются со временем хоста. Проверьте настройки виртуальной машины и убедитесь, что опция синхронизации времени выключена. Это можно сделать в настройках VirtualBox.
   
3. **Логика вычисления времени**:
   - Проверьте ваши вычисления времени в PowerShell. Возможно, они зависят от каких-то внешних факторов (например, системы времени на хосте), что может приводить к неправильным результатам.
   - Убедитесь, что формат даты, который вы используете, совпадает с ожидаемым форматом, особенно если ваша локализация отличается от англоязычной.

4. **Ошибки в самом скрипте**:
   - Проверьте также наличие логических ошибок в коде. Возможно, часть кода, которая вычисляет и устанавливает дату, была модифицирована или нарушена.
   - Обратите внимание на любые исключения или сообщения об ошибках, которые могут выдаваться при выполнении скрипта. Это может дать ключ к пониманию проблемы.

5. **Основной код**:
   - Существует риск, что часть вашего кода не была полностью представлена. Следите за тем, чтобы все функции, которые вы используете (включая `CustomInputBox` и другие), были корректно завершены.
   - Убедитесь, что вы включили все нужные команды для установки времени BIOS до момента запуска виртуальной машины.

6. **Ошибка в JScript**:
   - Убедитесь, что ваш JScript корректен. Его работа может влиять на выполнение PowerShell кода.

### Рекомендации
1. Изолируйте части кода и протестируйте их отдельно, чтобы убедиться, что они работают как нужно.
2. Добавьте больше отладочной информации, чтобы видеть, в каких местах скрипт может не выполнять ожидаемые действия (например, выводите время перед его установкой).
3. Попробуйте временно убрать JScript обертку, чтобы понять, как скрипт работает в чистом PowerShell режиме.

Если есть возможность, можете предоставить дополнительные детали или код, чтобы мы могли глубже разобраться и помочь вам.
какое красивое садамаза, скрипт запускает сам себя на javascript являясь bat, да еще и внутри powershell, как это читать и отлаживать, известно только его разработчику :) 

И самое главное, вам точно нужно GUI для смены даты? И уж точно для этого не требуется ни powershell ни повышение прав доступа (хотя может у вас там так настроено)

У virtualbox есть соответствующие команды VBoxManage, которые можно было просто прописать в текстовом файлике, назвать blablabla.bat и запускать

p.s. кайфую с современного ИИ, который это сумел разобрать и по полочкам разложить этот кошмар
Похожие вопросы