У меня есть скрипт
import random
import string
import re
import uuid
import os

Константы для генерации серийного номера и MAC-адреса
BASE_CODE = "C02"
MODEL_CODE = "41"
LOCATION_CODES = ["KY", "KX", "KW", "KV", "KU", "KT"]
WEEK_CODES = ["Y", "X", "W", "V", "U", "T"]

Функция генерации серийного номера для iMacPro1,1
def generate_serial_number():
week_code = random.choice(WEEK_CODES)
location_code = random.choice(LOCATION_CODES)
unique_id = ''.join(random.choices('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', k=4))
serial = BASE_CODE + week_code + MODEL_CODE + location_code + unique_id
return serial

Функция генерации последних 3 октетов MAC-адреса
def generate_mac_suffix():
return ':'.join(['{:02X}'.format(random.randint(0, 255)) for _ in range(3)])

Функция генерации полного MAC-адреса с заданными первыми 3 октетами
def generate_mac_address(oui="98:9e:63"):
mac_suffix = generate_mac_suffix()
mac_address = f"{oui}:{mac_suffix}"
return mac_address

Функция генерации ROM на основе MAC-адреса
def generate_rom(mac_address):

Удаляем двоеточия из MAC-адреса и переводим в верхний регистр
rom = mac_address.replace(':', '').upper()
return rom

Функция генерации MLB (Main Logic Board Serial Number)
def generate_mlb(serial_number):

Дополняем серийный номер до 17 символов случайными символами
mlb_suffix = ''.join(random.choices('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', k=5))
mlb = serial_number + mlb_suffix
return mlb

Функция генерации UUID в формате VMware с пробелами и маленькими буквами
def generate_vmware_uuid():

Генерируем новый UUID
new_uuid = uuid.uuid4()

Форматируем UUID в нужный вид
new_uuid = ' '.join(new_uuid.hex[i:i+2] for i in range(0, 32, 2)).lower()
return new_uuid

Функция обновления конфигурационного файла виртуальной машины
def update_config_file(file_path):
if not os.path.isfile(file_path):
raise FileNotFoundError(f"Файл не найден: {file_path}")

with open(file_path, 'r', encoding='windows-1251') as file:
config_lines = file.readlines()

Генерация новых значений
new_serial_number = generate_serial_number()
new_mac_address = generate_mac_address()
new_uuid = generate_vmware_uuid()
new_mlb = generate_mlb(new_serial_number)
new_rom = generate_rom(new_mac_address)

Создание нового списка строк конфигурационного файла
new_config_lines = []
rom_line_found = False
mlb_line_found = False
serial_line_found = False
mac_line_found = False
uuid_bios_line_found = False
uuid_location_line_found = False

for line in config_lines:
# Обновление серийного номера
if line.strip().startswith('serialNumber = '):
line = f'serialNumber = "{new_serial_number}"\n'
serial_line_found = True
# Обновление MAC-адреса
elif line.strip().startswith('ethernet0.Address = ') or line.strip().startswith('ethernet0.address = '):
line = f'ethernet0.Address = "{new_mac_address}"\n'
mac_line_found = True
# Обновление uuid.bios
elif line.strip().startswith('uuid.bios = '):
line = f'uuid.bios = "{new_uuid}"\n'
uuid_bios_line_found = True
# Обновление uuid.location
elif line.strip().startswith('uuid.location = '):
line = f'uuid.location = "{new_uuid}"\n'
uuid_location_line_found = True
# Обновление ROM
elif line.strip().startswith('efi.nvram.var.ROM = '):
line = f'efi.nvram.var.ROM = "{new_rom}"\n'
rom_line_found = True
# Обновление MLB
elif line.strip().startswith('efi.nvram.var.MLB = '):
line = f'efi.nvram.var.MLB = "{new_mlb}"\n'
mlb_line_found = True
new_config_lines.append(line)

Если строки не найдены, добавляем их в конец файла
if not serial_line_found:
new_config_lines.append(f'serialNumber = "{new_serial_number}"\n')
if not mac_line_found:
new_config_lines.append(f'ethernet0.Address = "{new_mac_address}"\n')
if not uuid_bios_line_found:
new_config_lines.append(f'uuid.bios = "{new_uuid}"\n')
if not uuid_location_line_found:
new_config_lines.append(f'uuid.location = "{new_uuid}"\n')
if not rom_line_found:
new_config_lines.append(f'efi.nvram.var.ROM = "{new_rom}"\n')
if not mlb_line_found:
new_config_lines.append(f'efi.nvram.var.MLB = "{new_mlb}"\n')

with open(file_path, 'w', encoding='windows-1251') as file:
file.writelines(new_config_lines)

print("Конфигурационный файл успешно обновлен.")
print(f"Product Name: iMacPro1,1")
print(f"Serial Number: {new_serial_number}")
print(f"MLB: {new_mlb}")
print(f"ROM: {new_rom}")
print(f"MAC-адрес: {new_mac_address}")
print(f"UUID: {new_uuid}")
if name == "main":

Укажите путь к конфигурационному файлу виртуальной машины
config_file_path = r'C:\Users\Admin\Documents\Virtual Machines\1\1.vmx'
update_config_file(config_file_path)

Мне нужно его дополнить таким функционалом
Чтобы была строчка в конфиге
smc.version = "0" и если ее нет то добавлял ее
Чтобы он проверял строчку в файле
ethernet0.addressType = "generated" и если она есть менял ее на ethernet0.addressType = "static"
Искал строчку ethernet0.generatedAddressOffset = "0" и если она есть менял ее на ethernet0.checkMACAddress = "FALSE"
Искал строку ethernet0.generatedAddress и менял на ethernet0.Address и соотвественно ставл сгенерированный параметр мак адреса
Чтобы параметр hw.model.reflectHost = "FALSE" был всегда в файле
Чтобы параметр serialNumber.reflectHost = "FALSE" был всегда в файле
Чтобы параметр smbios.reflectHost = "FALSE" был всегда в файле
Чтобы параметр efi.nvram.var.ROM.reflectHost = "FALSE" был всегда в файле
Чтобы параметр efi.nvram.var.MLB.reflectHost = "FALSE" был всегда в файле