Как загрузить файл из сети во время установки Windows Server 2019 и записать это в журнал?

Вопрос или проблема

Мне нужно создать образ OVF Windows Server 2019 (не спрашивайте почему) с установленным Cloudbase-Init, и я пытаюсь скачать последний стабильный пакет во время автоматической установки на этапе specialize.

Я использую следующие инструкции в файле autounattend.xml:

<RunSynchronousCommand wcm:action="add">
  <Path>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "Invoke-WebRequest 'https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi' -OutFile '%SystemRoot%\Temp\cb-init.msi' -PassThru *>C:\log"</Path>
  <Order>1</Order>
  <Description>Download Cloudbase-Init Installer</Description>
</RunSynchronousCommand>

Когда я делал то же самое для Windows 10, все работало без проблем. Но в случае с Windows Server 2019 я вижу, что powershell выдает какую-то ошибку, и я даже не могу ее записать в лог.

Что еще более странно, после создания виртуальной машины из образа я могу выполнить ту же команду в командной строке, скачать установщик и записать результат в файл. Но для меня важно сделать это на этапе specialize.

Существует ли надежный способ записать ошибку для команды powershell Invoke-WebRequest?

Я предполагаю, что серверная версия Windows может иметь некоторые ограничения на доступ к интернету на некоторых этапах установки, но я не могу найти никакой информации об этом. Может кто-то помочь?

Ответ или решение

Чтобы скачать файл из сети во время установки Windows Server 2019 и вести лог этого процесса, важно учитывать несколько аспектов, связанных с автоматизацией установки и специфическими ограничениями серверной версии Windows. Давайте детально разберем, как это сделать на этапе specialize, используя параметры, указанные в autounattend.xml.

Теория

При автоматической установке Windows с использованием файла unattend.xml, этап specialize — это фаза, на которой конфигурируются установки, специфичные для устройства, включая изменения регистра и некоторые настройки сети. Это обычно происходит до того, как пользователь сможет получить доступ к системе. Почти все изменения, которые вызывают модификацию системных настроек, осуществляются в этот момент.

Invoke-WebRequest в PowerShell — это команда, которая используется для загрузки данных через URL. В случае автоматизированного развертывания, если что-то идет не так, вам необходимо отладочная информация, чтобы диагностировать проблему. PowerShell предоставляет возможности для управления ошибками и логирования.

Пример

Команда, предоставленная вами:

<RunSynchronousCommand wcm:action="add">
  <Path>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "Invoke-WebRequest 'https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi' -OutFile '%SystemRoot%\Temp\cb-init.msi' -PassThru *&gt;C:\log"</Path>
  <Order>1</Order>
  <Description>Download Cloudbase-Init Installer</Description>
</RunSynchronousCommand>

Этот фрагмент установленного XML исполняется во время процедуры specialize и пытается загрузить MSI-файл. Однако, без надлежащей обработки ошибок, вы можете упустить важные детали, почему PowerShell может терпеть неудачу.

Применение

Обработка ошибок и ведение логов

  1. Стандартизация вывода и ошибок. Для захвата ошибок при выполнении команды PowerShell и правильного логирования, воспользуйтесь следующими параметрами:

    <RunSynchronousCommand wcm:action="add">
     <Path>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command "& {try { Invoke-WebRequest 'https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi' -OutFile '%SystemRoot%\Temp\cb-init.msi' -ErrorAction Stop; } catch { $_ | Out-File -FilePath C:\log -Append; }}"</Path>
     <Order>1</Order>
     <Description>Download Cloudbase-Init Installer</Description>
    </RunSynchronousCommand>

    Здесь используется try-catch, чтобы ловить исключения и записывать их в лог. Выводить ошибки можно с помощью Out-File, который записывает текст ошибки в указанный вами файл.

  2. Ограничения сети. Windows Server 2019, в зависимости от конфигурации начальной установки, может иметь ограничения на доступ к сети во время этапа specialize. Убедитесь в следующем:

    • SSH ли политика «Secure Download» аналогично работает в вашем окружении (об этом может свидетельствовать, что команду можно выполнить после развертывания);
    • Проверьте наличие активного сетевого подключения и правильных сетевых конфигураций, если это возможно;
    • Проверьте настройку политики безопасности, связанную с блокировками сетевой активности.
  3. vSphere и ограничения подключения. Если вы работаете в среде виртуализации, такой как VMware vSphere, убедитесь, что политиками сети виртуальной машины разрешена исходящая связь на соответствующем этапе установки.

Этот метод обеспечит надежный процесс загрузки и ведения логов, что критически важно при развертывании через автоматизированные сценарии. Обработка ошибок с указанием их в лог-файле поможет в будущей диагностике и коррекции возможных проблем в сценарии автоматизации.

После развертывания убедитесь, что все вышеперечисленные аспекты учтены, и попробуйте проверить выполнение команды в интерактивном режиме с теми же параметрами, чтобы исключить ошибки конфигурации в autounattend.xml или другие окружения, отличные от инструмента автоматизации.

Системный подход и понимание теоретической базы, подкрепленной практическими примерами и применением, позволит достичь высокой надежности и минимизировать риск ошибок в столь критичных процессах, как автоматизированная установка серверных систем.

Оцените материал
Добавить комментарий

Капча загружается...