Вот что я пытаюсь сделать ... если это можно сделать с помощью только партии ... на данный момент?

Вместо фактического переименования клиента здесь из оператора netdom, я хочу вставить переменную% strComputer% в файл xml или, по крайней мере, заменить текст этой же переменной. XML-файл будет файлом unattend.xml, используемым для SysPrepping клиента Windows 7.

Это раздел, который я хотел бы изменить:

% StrComputername%

В сущности, оператор insert_name будет для нового имени, которое будет вставлено в файл xml вместо команды netdom.exe.

Размещенный код работает чертовски хорошо в моем процессе автоматического переименования! Шаги описывают, как работает скрипт.

Обратите внимание на операторы for /f и метку:insert_name. Все остальное можно игнорировать.

  1. Получает MAC-адрес, используя WMIC
  2. Сравнивает этот MAC-адрес с файлом pdqmac2pcname.txt для совпадения или несоответствия MAC-адреса.
  3. Когда MAC-адрес совпадает, имя передается в оператор netdom как переменная newname% strComputername%
  4. тогда скрипт перейдет к insert_name и
  5. Если MAC-адрес обнаружен с именем компьютера, сценарий переходит на метку kill_autologon, чтобы принудительно отключить компьютер. Эта процедура предотвращает присоединение неправильно переименованного компьютера к домену под случайно сгенерированным именем SysPreped.
  6. Если имя не найдено или MAC-адрес не совпадает, компьютер не присоединится к домену и
  7. компьютер перезагружается к экрану входа в систему, чтобы его можно было переименовать вручную и присоединить к домену.

setlocal enabledelayedexpansion


FOR /F "skip=1 tokens=*" %%I IN ('WMIC Path Win32_NetworkAdapter Where "NetConnectionID='Local Area Connection'" Get MACAddress') DO IF NOT DEFINED MACAddress SET MACAddress=%%I
    FOR /F "usebackq delims=, tokens=1,2" %%J IN (`type C:\rename_computer\pdqmac2pcname.txt`) DO IF %MACAddress% EQU %%J SET strComputername=%%K && GOTO insert_name
)

goto kill_autologon


:insert_name
C:\windows\system32\netdom.exe renamecomputer %COMPUTERNAME% /NewName:%strComputername% /FORCE

goto shutdown


:kill_autologon
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /f

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f


:shutdown
shutdown -r -t 0


exit

1 ответ1

0

Во-первых, enabledelayedexpansion выполняется с!, А не с% Так!вар! вместо% var%

Если известно, что этот XML-код является непротиворечивым, все, что вам нужно сделать, это разделить его и объединить позже с пропущенными битами:

XML
бла бла
strComputername
бла бла
/ XML

Разделите это так:

file1:
XML
бла блаЭол

file3:
бла бла
/ XML

не помещайте strComputername в file2 и выполняйте двоичное слияние: copy /b file1+file2+file3 unattend.xml

Обратите внимание, что каждый файл будет иметь EOL, в основном в file2 вам нужно будет поместить всю строку xml, содержащую strComputername.

Выполнимо?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .