да, вот сделал пример для функции ProcessExecGetOutput:
если в конфиге много комманд, строку нужно добавлять где-то в середину конфига.
вторую строчку лучше ближе в конец конфига
# Получение версии ОС с помощью командной строки Windows
ProcessExecGetOutput OSVER %COMSPEC% '/c ver'
# Создание переменной содержащей версию Windows
SetEnv /EV COMMANDER_OSVER "%OSVER%"
Loopback писал(а):Это может быть связано, например, с командой получения SID, поскольку скрипт выполняется достаточно медленно. Попробуй ее перенести в самый конец секции загрузки.
Лучше просто как следует передавать поток, не давая скрипту пройти весь цикл. Делается либо указанием возвращаемых атрибутов вместо * и выходом из цикла Exit For
For Each Item In GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT SID FROM Win32_UserAccount where" &_
" Name='" & CreateObject("WScript.Network").UserName & "'") : WScript.Stdout.Write Item.SID : Exit For : Next
либо (что ещё лучше) напрямую с получением сида из дочернего объекта WMI:
With CreateObject("WScript.Network")
WScript.Stdout.Write GetObject("winmgmts:\\.\root\CIMV2:Win32_UserAccount.Domain='" & .UserDomain & "',Name='" & .UserName & "'").SID
End With
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
KopBuH писал(а):да, вот сделал пример для функции ProcessExecGetOutput:
Ок, можно будет добавить, но все что касается плагинов - только в закомментированном виде.
Flasher
Твой вариант, теоретически, более оптимален. Но ты пробовал сравнивать время отработки скрипта? Уверен, что на десятке учетных записей это будут миллисекунды. Я же при вызове cscript наблюдаю задержку минимум полсекунды. Визуально разницы между двумя вариантами не заметил. Так что скорее всего это издержки именно cscript.
Loopback
10 учёток и 16 атрибутов - миллисекунды? Ну, не знаю. WMI сам по себе долго свою базу загружает. К тому же текущая учётка может оказаться в конце списка, как у меня, например. Мой опыт подсказывает, что это могут быть и доли секунды, при большом списке - секунда и более. Могу, конечно, накидать отладочный скрипт - проверить, но у меня нет и 10-ти учёток.
А полсекунды (да ещё и минимум) - это уже не мало, с учётом того, сколько всего в autorun-е другого вызывается. И это уже не теория.
А два варианта - какие имеешь в виду? Оба - мои? Или твой и какой-то из моих?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Да я, собственно, и не спорю, что оптимизированные решения лучше. Просто это тот случай, когда оптимизация незаметна. Может быть на сотне учеток будет заметнее, не знаю.
Кстати, для сравнения, команда ver отрабатывает значительно быстрее. Но все равно с заметной задержкой.
слушай, Loopback
а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а ?
и еще сделать бы переменную с языком текущей ОС, например %AUTORUN_OSLANG%, хотя бы русский и английский?
KopBuH писал(а):а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а ?
Если это можно определить программно. Я поискал - что-то не нашел ничего полезного.
KopBuH писал(а):сейчас я делаю это так:
И чем же плох способ? Вполне корректно и надежно. Ну я понимаю еще, если бы способа не было или он был запредельно сложный.
Если я сделаю такую переменную, то язык она будет содержать только в виде, который можно получить напрямую: либо код языка (en, ru), либо его LSID (00000419). Потому что
Лучше код. Его же сразу задействовать можно. LSID ни к селу, ни к городу.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Да, прямой код лучше.
но всё дело в том, что в XP код языка в реестре еще не придумали, и там есть только параметр Locale, содержащий числовой код.
вот именно поэтому я сделал универсальный вариант с числовым значением.
в Win7/8 есть параметр LocaleName содержащий строковой код, типа "ru-RU" Loopback, глянь его здесь:
HKCU\Control Panel\International
Не знаю точно, что там в реестре XP, но никто не пишет про получение данных из него, есть же API типа GetCPInfo, GetLocaleInfo и т.п. И никто не мешает автору программно сопоставить с ID коды языков.
Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher писал(а):
Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\
такие ветки есть. и да, по второй ветке указана локализация при установке системы.
но про выше упомянутому мной ключу реестра, а именно HKCU\Control Panel\International находится код локализации именно текущего пользователя. дело в том, что сам Windows может быть английским, но локализация пользовательской среды - русской. имхо, тогда лучше определять значение из HKCU, ведь именно под ним и будет запускаться ТС.
Читать реестр я, разумеется, не буду. Для этого есть функция GetLocaleInfo. В висте и выше есть ее расширенный вариант, но ограничивать использование этими системами преждевременно.
Функция возвращает много разных значений, но здесь применимы только два: LCID (0419) или трехбуквенная аббревиатура языка (RUS). Не исключено, что последняя будет коррелировать с именами языков TC.
Loopback
Сойдёмся на алфавитных кодах языков по ISO 639-3?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Зачем встраивать то, что элементарно реализуется 5 строчками Autorun-скрипта (благодаря функциям чтения из реестра) и за несколько лет существования плагина понадобилось 1 раз?