[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
В чате камрады bighead и goga8686 задались таким вопросом: "Как можно изменить имя компьютера в заливке на этапе разворачивания образа"?-Меня этот вопрос тоже заинтересовал, вот решил попробовать выложить своё решение. ab
Наваял батник _RenamePC.cmd для интеграции скрипта изменения имени компьютера в образ zalivka.wim
Идея такая.
Кладём свой образ заливки (zalivka.wim) рядом с _RenamePC.cmd и запускаем последний.
Монтируется образ и добавляется в реестр запись (в RunOnce) на запуск скрипта RPC.cmd, который копируется в образ.
При первом входе пользователя в систему отрабатывается из RunOnce скрипт "\Windows\RPC.cmd" и генерируется рандомное имя компьютера вида: VEQJWEK25860-PC
Значения при каждой "заливке" генерируются новые, из переменной %NewPCNAME%
setlocal EnableDelayedExpansion
for /l %%i in (1,1,7) do (
set /a d=!random!*26/32768+65
cmd /c exit !d!
set name=!name!!=exitcodeAscii!
)
set "NewPCNAME=%name%%random%-PC"
wmic computersystem where name="%computername%" call rename name="%NewPCNAME%"
После отработки скрипта запись из RunOnce соответственно удаляется и также удаляется и сам скрипт "\Windows\RPC.cmd"
Ну в общем идея как то такая... af
Проверил разворачивание образа с помощью WInst от Ander_73 (через wimlib), работает.


Последний раз редактировалось: sergeysvirid (2023-10-08 10:04), всего редактировалось 5 раз(а)

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
goga8686,
Вычитал:
Имена в сети NetBIOS имеют ограничение в 15 символов
Код в батнике RPC.cmd генерирует имя в 18 символов (переменные %name%%random% с приставкой -PC)
Наверное тогда убрать из имени компьютера (в конце) приставку -PC ?
Ander_73,
Или как можно сгенерировать имя (в переменные %name%%random%), к примеру, из 12-ти символов?

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
sergeysvirid, саму переменную random трогать не хочется и она до 5-ти символов, значит надо сокращать цикл for с 10 до 7. Тогда у нас будет 7 случайных букв в начале и до 5 случайных цифр в конце.

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
Ander_73,
Спасибо, понял. bs
Да, да, именно так и хотел.
Сейчас подправлю батник.-goga8686,
Подправил. Попробуйте сейчас.

[Цитировать]

    goga8686
  • 15240
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 889
  • Репутация:73

    [+] [-]
sergeysvirid, Проверил. не меняется, но нашёл почему. у батника bighead, есть параметр создающий в реестре запись HKLM\TMP\ControlSet001\Control\ComputerName\ActiveComputerName вот пока я не удалил в реестре "ActiveComputerName" ничего не менялось, после перезагрузки всё хорошо, параметр в реестре создался вновь,но теперь он меняется автоматически ))
Всем огромное спасибо az

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
101364
параметр в реестре создался вновь,но теперь он меняется автоматически ))
Всем огромное спасибо
goga8686,
Ну Вот и ладушки. Вопрос по теме можно считать: "Решено!" az

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
goga8686, я ничего не понял.
При использовании команды:
wmic computersystem where name="%computername%" call rename name="%NewPCNAME%"
в живой ОС-и (и после обязательной перезагрузки) имя NetBIOS меняется?
---
Какие ещё нафиг "батники bighead " aq

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
101366
При использовании команды:
wmic computersystem where name="%computername%" call rename name="%NewPCNAME%"
Ander_73,
Создал заливку.
Интегрировал в неё RPC.cmd (запуск через RunOnce) скриптом _RenamePC.cmd из архива в первом сообщении.
Развернул заливку через WInst (wimlib метод).
Имя NetBIOS меняется (впрочем как и всё остальное).

[Цитировать]

    bighead
  • 29484
  • Стаж: 3 года
  • Сообщений: 386
  • Репутация:24

    [+] [-]
goga8686, значит ActiveComputerName при новой системе лучше не трогать)
Ander_73, видимо это для того, чтобы понятнее было откуда ноги растут ag

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
bighead, я без претензий. Просто обсуждаем одно, а goga8686 тестирует не пойми что.
sergeysvirid, thx

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
101366(и после обязательной перезагрузки)
Ander_73,
Я вот тут подумал, так может тогда в конце батника (RPC.cmd) прописать перезагрузку:
%SystemRoot%\System32\shutdown.exe -r -t 1 -f
...ну чтобы всё по фэншую было?
Или плохая идея в плане того, что если у кого в RunOnce прописан запуск ещё чего либо (а последовательность запуска разных команд из RunOnce может быть непредсказуемой), то после этой перезагрузки может случиться так, что что-нибудь не отработает как надо?

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
sergeysvirid, плохая идея. Сама по себе неожиданная перезагрузка вызовет панику af
Как вариант, вывести диалоговое окно со стандартной надписью "Для завершения изменений необходима перезагрузка" или чо там Винда в таких случаях пишет...

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
101371Как вариант, вывести диалоговое окно со стандартной надписью "Для завершения изменений необходима перезагрузка"
Ander_73,
Как вывести тогда это диалоговое окно? У меня что-то с этим "трудности" в познаниях. ah af

[Цитировать]

    bighead
  • 29484
  • Стаж: 3 года
  • Сообщений: 386
  • Репутация:24

    [+] [-]
sergeysvirid,
@Echo Off
For /F "tokens=2 Delims==" %%A In ('WMIC Bios Get SerialNumber /Value') Do (
    For /F "Delims=" %%B In ("%%A") Do (
        Call :RenamePC "%%B"
        Call :Ask4Reboot
    )
)
::**********************************************************************
:RenamePC
WMIC ComputerSystem where Name="%ComputerName%" call Rename Name="%~1"
Exit /B
::***********************************************************************
:Ask4Reboot
(
    echo    Set Ws = CreateObject("wscript.shell"^)
    echo    Answ = MsgBox("Вы хотите перезагрузить компьюте сейчас ?"_
    echo ,VbYesNo+VbQuestion,"Имя компьютера изменится после перезагрузки "^)
    echo    If Answ = VbYes then
    echo        Return = Ws.Run("cmd /c shutdown -r -t 60 -c ""Компьютер перезагрузится через 1 минуту."" -f",0,True^)
    echo    Else
    echo        wscript.Quit(1^)
    echo    End If
)>"%tmp%\%~n0.vbs"
Start "" "%tmp%\%~n0.vbs"

[Цитировать]

    sergeysvirid
  • 104
  • Стаж: 9 лет
  • Сообщений: 2582
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
bighead,
Приветствую! aa
Здорово ay , спасибо большое! az

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
sergeysvirid, например так (кодовая страница 866 (ОЕМ))
start mshta vbscript:Execute("msgbox ""Для завершения работы сделайте Кю!"",0,""Заголовок"":close")
Я не уверен, что надо самому перегружать комп по нажатию кнопки. Мне кажется, достаточно просто уведомить, что надо.

Страница 2 из 3


Показать сообщения:    

Текущее время: 21-Ноя 15:13

Часовой пояс: UTC + 3


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