Я пишу интерфейс между инструментом облачной оркестровки и API-интерфейсом Azure REST (диспетчер ресурсов), но у меня возникает проблема с тестированием дополнительных функций WindowsUnattendContent для получения Unattend.xml инъекции.Дополнительная информацияUnattendContent, отбрасываемая Azure Virtual Machines REST API
Почему код ниже не принимается службой API? В документации показан пример дополнительногоUnattendContent как объекта пары KV, но я обнаружил (путем поиска по фактической спецификации ARM), что это фактически список объектов. Он также указывает, что часть контента должна быть закодирована base64 и не более 4KiB и включать корневой элемент для функций или настроек (не совсем уверен, что это означает). Я закодировал то, что, по моему мнению, является действительным компонентом XML, но он выдает ошибку (код и ошибка отмечены ниже). Я пробовал это, используя оба варианта API версии 2016-03-30 и 2015-05-01 с такими же результатами.
Это отрывок osProfile из моего запроса на службу API.
"osProfile": {
"adminUsername": "winuxadmin",
"computername": "vm331d4bwx",
"windowsConfiguration": {
"additionalUnattendContent": [{
"content": "PFN5bmNocm9ub3VzQ29tbWFuZCB3Y206YWN0aW9uPSJhZGQiPjxDb21tYW5kTGluZT4lU3lzdGVtUm9vdCVcc3lzdGVtMzJcbmV0c2ggYWR2ZmlyZXdhbGwgYWRkIHJ1bGUgbmFtZT0iV2luUk0gSFRUUCA1OTg1IiBwcm90b2NvbD0iVENQIiBkaXI9ImluIiBsb2NhbHBvcnQ9IjU5ODUiIGFjdGlvbj0iYWxsb3ciPC9Db21tYW5kTGluZT48T3JkZXI+MTwvT3JkZXI+PERlc2NyaXB0aW9uPk9wZW4gV2luUk0gSFRUUCBwb3J0PC9EZXNjcmlwdGlvbj48L1N5bmNocm9ub3VzQ29tbWFuZD4=",
"componentName": "Microsoft-Windows-Shell-Setup",
"settingName": "FirstLogonCommands",
"passName": "oobeSystem"
}],
"winRM": {
"listeners": [{
"protocol": "http",
"certificateUrl": null
}]
},
"provisionVMAgent": true
},
"adminPassword": "[email protected]"
},
в base64 XML additionalUnattendContent [0] .content декодирует до этого (примечания: Я также сделал тот же тест, но с содержанием XML-оберткой в узле настройки корневой - <FirstLogonCommands>...</FirstLogonCommands>
- но результат та же). Фактическая команда Windows, здесь не очень важна, и более вероятно, должны были бы быть команда WinRM, чтобы разрешить незашифрованные соединения, но этот вопрос не является на самом деле команда связанных -
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\system32\netsh advfirewall add rule name="WinRM HTTP 5985" protocol="TCP" dir="in" localport="5985" action="allow"</CommandLine>
<Order>1</Order>
<Description>Enable QuickEdit mode</Description>
</SynchronousCommand>
После того, как я понял, что официальные документы были неправы о формате additionalUnattendContent (он должен быть список объектов, а не только объект), я был в состоянии добраться до следующей ошибки из службы API -
statusCode:BadRequest serviceRequestId:<req-id> statusMessage:
{
"error":
{
"code": "InvalidParameter",
"target": "windowsConfiguration.additionalUnattendContent.content",
"message": "The value of parameter windowsConfiguration.additionalUnattendContent.content is invalid."
}
}
Спасибо за это. Кажется, это работает! – 01000101
+1 Q & A Благодарим вас за пометы! Пришлось бороться со вторым вопросом тоже! Интересно, может ли на самом деле включить информацию о пространстве имен xmlns (xmlns: wcm = "http://schemas.microsoft.com/WMIConfig/2002/State"), также может исправить эту проблему? Но пока не попробовать. –