Задать вопрос
  • Почему скрипт запуска виртуальной машины перестал работать?

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

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

    У virtualbox есть соответствующие команды VBoxManage, которые можно было просто прописать в текстовом файлике, назвать blablabla.bat и запускать
    upd. нужно считать разницу в миллисекундах между текущим временим и целевым, на bat это сложно, поэтому лучше сразу писать на чем то типа javascript, не изобретая паровоза (и от туда же запускать vboxmanage)

    p.s. кайфую с современного ИИ, который это сумел разобрать и по полочкам разложить этот кошмар
    anthropic:claude sonnet 3.5
    ...
    проанализируй этот скрипт для windows, почему тут сместь cmd и javascript, и начни описание, что именно делают первые строчки
    Давайте разберем этот интересный гибридный скрипт:

    Первые строки скрипта представляют собой "полиглот" - код, который может быть интерпретирован несколькими языками программирования:

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

    Это хитрая конструкция, которая:
    1. Начинается как cmd-скрипт (`@set @x=0;`)
    2. Открывает многострочный комментарий в JavaScript (`/*`)
    3. Выключает вывод команд в cmd (`@echo off`)
    4. Проверяет версию Windows и если скрипт запущен без параметров, перезапускает сам себя через cscript.exe в режиме JavaScript

    Последняя строка скрипта:
    ```javascript
    */new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);
    ```
    закрывает JavaScript-комментарий и содержит код для повышения привилегий - перезапуска скрипта с правами администратора.

    Это техника самоповышения привилегий (UAC bypass), которая позволяет скрипту перезапустить себя с правами администратора, если он был запущен от обычного пользователя.

    Основная часть скрипта написана на PowerShell и использует Windows Forms для создания графического интерфейса. Согласно документации [learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/syste...), скрипт создает форму для ввода даты, которая будет использоваться для настройки BIOS времени виртуальной машины VirtualBox.

    Такая сложная структура используется для:
    1. Обеспечения запуска с правами администратора
    2. Совместимости с разными версиями Windows
    3. Комбинирования возможностей разных языков скриптования Windows

    продолжай дальше анализ, почему там еще и powershell?
    PowerShell используется в этом скрипте для основной функциональности, и его часть начинается после строк:

    ```
    ;@echo off
    ;@Findstr -bv ;@ "%~f0" | powershell -noprofile -command - & goto:eof
    ```

    Эта конструкция особенно интересна, потому что:
    1. Использует Findstr для фильтрации содержимого файла, пропуская строки, начинающиеся с `;@`
    2. Передает отфильтрованное содержимое в PowerShell через пайп (`|`)
    3. Запускает PowerShell без профиля (`-noprofile`) для ускорения загрузки

    PowerShell был выбран для основной части скрипта по нескольким причинам:

    1. **Объектная модель**: Как отмечается в [thenewandshiny.com](https://thenewandshiny.com/powershell-everywhere/), PowerShell работает с объектами, а не с текстом, что делает его более надежным для работы с системными компонентами.

    2. **Удобство работы с GUI**: PowerShell позволяет легко создавать Windows Forms для пользовательского интерфейса, что используется в функции `CustomInputBox`

    3. **Управление VirtualBox**: PowerShell предоставляет удобные средства для запуска процессов и управления VirtualBox через `VBoxManage`

    4. **Работа с датами**: PowerShell имеет мощные средства для работы с датами и временем, что критично для этого скрипта

    Важно отметить, что в скрипте используется разделение на Windows PowerShell и PowerShell Core. Как упоминается в [get-powershellblog.blogspot.com](https://get-powershellblog.blogspot.com/2017/10/wh...), это важно учитывать при работе с разными версиями PowerShell.

    Скрипт использует стандартный формат командлетов PowerShell `Verb-Noun`, хотя, как отмечается в [scoop-docs.vercel.app](https://scoop-docs.vercel.app/docs/misc/Why-PowerS...), такой формат может казаться излишне многословным, но он обеспечивает четкую структуру и понятность команд.

    Основная функциональность скрипта:
    1. Создает GUI для ввода даты
    2. Проверяет корректность введенной даты
    3. Настраивает время BIOS для виртуальной машины VirtualBox
    4. Запускает виртуальную машину с модифицированными настройками времени

    какими строчками настраивается время
    В скрипте время настраивается несколькими ключевыми командами:

    1. Сначала отключается синхронизация времени с хостом:
    ```powershell
    start-process $VB_MANAGE 'setextradata', $vmname, 'VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled 1' -NoNewWindow
    ```

    2. Затем вычисляется смещение времени в миллисекундах:
    ```powershell
    $timeoffset_milliseconds='{0:0}' -f ([datetime]$date - [datetime]::Now).TotalMilliseconds
    ```

    3. И наконец, применяется смещение времени BIOS:
    ```powershell
    start-process $VB_MANAGE 'modifyvm', $vmname, '--biossystemtimeoffset', $timeoffset_milliseconds -NoNewWindow
    ```

    Здесь важно отметить несколько моментов:
    - Используется VBoxManage - утилита командной строки VirtualBox (путь хранится в переменной `$VB_MANAGE`)
    - Смещение вычисляется как разница между желаемым временем (`$date`) и текущим системным временем
    - Параметр `--biossystemtimeoffset` устанавливает смещение времени BIOS в миллисекундах

    После установки времени виртуальная машина запускается командой:
    ```powershell
    start-process $VB_MANAGE startvm, $vmname
    ```

    Похожий подход используется в проекте [github.com/bitbank2/rtc_setter](https://github.com..., где также реализована настройка времени, но для реального RTC (часов реального времени), а не виртуальной машины.

    Важно понимать, что этот скрипт не просто устанавливает время, а именно смещение относительно системного времени хоста, что позволяет виртуальной машине работать с другой датой, но сохранять корректный ход времени.

    Ответ написан
    5 комментариев
  • Возвращает ли Asterisk какие-либо переменные с номером парковочного места?

    Похоже что нет, не возвращает.
    Лучшим вариантом вижу задать парковочное место через (например) параметр parking_lot_name для Park(), таким образом оно будет известно заблаговременно.
    Так же можно получить событие парковки через ami
    https://docs.asterisk.org/Latest_API/API_Documenta...
    Ответ написан
  • Asterisk. Организация конференц связи. Готовые решения?

    gbg
    @gbg
    Любые ответы на любые вопросы
    openmcu-ru - свободная реализация MCU. При наличии прямых рук и видеокарты с аппаратным кодером, может работать очень шустро.
    Ответ написан
    Комментировать
  • Кто как конвертирует аудио для автоинформатора в Asterisk?

    для АА попробуй так в консоли линукса:
    sox in.wav -r 8000 -c 1 out.wav
    и не используй ulaw, у нас стандарт alaw...
    Ответ написан
    1 комментарий
  • Как добавить SIPAddHeader для АОНа провайдера?

    @dronmaxman
    VoIP Administrator
    В настройках маршрута указать в поле Route CID номер линии и добавить в /etc/asterisk/extensions_custom.conf
    [macro-dialout-trunk-predial-hook]
    exten => s,1,SIPAddHeader(P-Asserted-Identity:${CALLERID(num)}@111.222.333.444:1234)
    exten => s,n,MacroExit()
    Ответ написан
  • Как добавить префикс в экстеншен?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - exten => _7[77]XXXXXXXXX,n,Dial(SIP/trunk_zebra/${EXTEN:0},60)
    + exten => _7[77]XXXXXXXXX,n,Dial(SIP/trunk_zebra/810${EXTEN},60)
    Ответ написан
    Комментировать
  • Как централизовано управлять запуском скриптов на виртуальных машинах?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Ansible
    Ответ написан
    Комментировать
  • Как в ubuntu с двумя ip, указать для приложения ip с которым оно должно выходит в сеть?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    Обычно у приложений, слушающих адрес, есть опция, какой именно адрес слушать. Либо в конфиге, либо ключом к команде.
    Ответ написан
    1 комментарий
  • Копирование одного диска на несколько, как ускорить?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Лучшее решение, к которому мы пришли - размечать диски parted, форматировать нужные разделы, заливать tar.gz-архив, ставить загрузчик EFI. Ускорение в 10-20 раз.
    Еще, как вариант - ужать файловую систему до размера данных и делать resizefs на весь раздел.
    Рещается простым скриптом со всеми нужными командами.
    Копируем за раз по 10-12 дисков.
    Кстати, через resizefs обычно делаются флешки для всяких rasberry/orange
    Ответ написан
    5 комментариев
  • Почему не работает вирт. машина?

    @Drno
    в ошибке же написано. VTx включите в BIOS
    Ответ написан
    Комментировать
  • Почему не могу зайти на сайт по ip, только по имени?

    @Drno
    значит на веб сервере запретили обращаться по IP
    Ответ написан
    4 комментария
  • Чем отличаются любительские МК от промышленных?

    @pfg21
    ex-турист
    промышленным диапазоном рабочих температур :)

    надежный контроллер дублируется или троируется + плюс ставится схема отслеживания сдыхания одного из контроллеров.
    ну и вся остальная обвязка делается с требованиям соответвующих гостов снипов

    аурдины для бытовой теплицы хватит за глаза :)
    ибо при сдыхании контроллера вышедший из под контроля тех.процесс не взорвет твою теплицу.
    просто сделай и отладь сразу несколько штук, чтобы быстро поменять при сдыхании одной.
    Ответ написан
    Комментировать
  • Копирование одного диска на несколько, как ускорить?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    попробуйте для начала dd if=/dev/sda | tee /dev/sdb /dev/sdc /dev/sdd > /dev/sdc
    сходу проверить негде, но не вижу причин почему бы это не работало.

    можно так
    dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null

    чтобы был доступ к привычным опциям dd
    Ответ написан
    4 комментария
  • Неправильная сортировка PHP, как исправить?

    toxa82
    @toxa82
    Ох и дичь. Еще и на php 15-тилетней давности. Подозреваю что у вас может меняться массив с разрешенными кодеками, та и непонятно откуда берется $arr->allow. Ну и список кодеков которых нет в списке он будет пихать в самый вверх или самый низ.
    А проблема с числом больше 10 в том что нужно заменить "return strcmp($a_ord_seq_ind, $b_ord_seq_ind);" на "return $a_ord_seq_ind - $b_ord_seq_ind;", у вас же тут индексы из массива, зачем вы их как строки сравниваете.
    Ответ написан
    1 комментарий