Я когда-то разрабатывал скрипт на 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
```
Чтобы разобраться с проблемой, давайте рассмотрим возможные причины, по которым ваш скрипт для запуска виртуальной машины перестал работать, а также попробуем дать несколько рекомендаций. 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. кайфую с современного ИИ, который это сумел разобрать и по полочкам разложить этот кошмар