Изменение конфигурации сети для всех виртуальных машин в VirtualBox - PullRequest
0 голосов
/ 04 мая 2020

У меня проблема с включением режима NAT на сетевых картах на всех машинах VirtualBox. Единственное решение, которое я нашел, - заменить код в файле конфигурации, расположенном в C: \ Users \ USER \ VirtualBoxVMs \ VirtualMachineName \ VirtualMachineName.vbox.

К сожалению, я не могу просто заменить эти файлы, потому что У каждого пользователя свои настройки (например, имя виртуальной машины)

Я должен заменить текст в теге <Adapter>...<Adapter>. Делать это на одном компьютере для одного пользователя - не проблема. Я не могу смириться с тем, что мне приходится делать это с помощью скрипта на нескольких компьютерах для всех пользователей. До сих пор мне удалось сделать что-то подобное, и я не знаю, что делать дальше.

$InputFiles = Get-Item "C:\Users\*\VirtualBox VMs\*\*.vbox"

$OldString  = '<Adapter ...various computer-dependent variables...>
        ...
        ...
        </Adapter>'

$NewString  = '<Adapter ...various computer-dependent variables...>
          <NAT/>
        </Adapter>'

$InputFiles | ForEach {
    (Get-Content -Path $_.FullName).Replace($OldString,$NewString) | Set-Content -Path $_.FullName
}

Еще одно осложнение заключается в том, что при сохранении изменений все сохраняется в одном файле для всех пользователей. , т.е. все настройки со всех машин на данном компьютере в виде одного файла.

К сожалению, VB не сохраняет такие значения в регистре, что делает его очень сложным. Может быть, есть другой, более простой способ?

РЕДАКТИРОВАТЬ: Пример файла конфигурации VBox

<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.15-windows">
  <Machine uuid="{1d96510c-97ce-4671-a1df-3f08c7d2b2c7}" name="TEST" OSType="Windows7_64" snapshotFolder="Snapshots" lastStateChange="2020-05-04T09:56:34Z">
    <MediaRegistry>
      <HardDisks>
        <HardDisk uuid="{eab23143-54ec-4f7d-822d-a56bf90a58bb}" location="TEST.vdi" format="VDI" type="Normal"/>
      </HardDisks>
    </MediaRegistry>
    <ExtraData>
      <ExtraDataItem name="GUI/FirstRun" value="yes"/>
    </ExtraData>
    <Hardware>
      <CPU>
        <PAE enabled="false"/>
        <LongMode enabled="true"/>
        <HardwareVirtExLargePages enabled="true"/>
      </CPU>
      <Memory RAMSize="2048"/>
      <HID Pointing="USBTablet"/>
      <Paravirt provider="Default"/>
      <Display VRAMSize="18"/>
      <VideoCapture fps="25" options="ac_enabled=false"/>
      <RemoteDisplay enabled="false"/>
      <BIOS>
        <IOAPIC enabled="true"/>
      </BIOS>
      <USB>
        <Controllers>
          <Controller name="OHCI" type="OHCI"/>
          <Controller name="EHCI" type="EHCI"/>
        </Controllers>
      </USB>
      <Network>
        <Adapter slot="0" enabled="true" MACAddress="MACAddress" cable="true" type="82540EM">
          <NAT/>
        </Adapter>
      </Network>
      <AudioAdapter controller="HDA" driver="DirectSound" enabled="true" enabledIn="false"/>
    </Hardware>
    <StorageControllers>
      <StorageController name="SATA" type="AHCI" PortCount="2" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
        <AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
          <Image uuid="{eab23143-54ec-4f7d-822d-a56bf90a58bb}"/>
        </AttachedDevice>
        <AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="1" device="0"/>
      </StorageController>
    </StorageControllers>
  </Machine>
</VirtualBox>

1 Ответ

0 голосов
/ 04 мая 2020

Вот пример того, как вы можете сделать это, импортировав файл XML.

Rename-Item -Path ./Desktop/vmconfig.vbox -NewName vmconfig.vbox.xml # Change the file extension so we can import the xml.
$VMConfig = [System.Xml.XmlDocument](Get-Content ./Desktop/vmconfig.vbox.xml)
$adapter = $VMConfig.VirtualBox.Machine.Hardware.Network.Adapter
$adapter

slot       : 0
enabled    : true
MACAddress : MACAddress
cable      : true
type       : 82540EM
NAT        : 

$adapter.slot = 1
$VMConfig.Save('./Desktop/vmconfig.vbox.xml')
Rename-Item -Path ./Desktop/vmconfig.vbox.xml -NewName vmconfig.vbox # Set the filename back to the original extension.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...