我正在编写云编排工具和Azure REST API(资源管理器)之间的接口,但我遇到了测试Windows additionalUnattendContent功能以使Unattend.xml注入工作的问题。
为什么以下代码不被API服务接受?文档显示了作为KV对对象的additionalUnattendContent的示例,但我发现(通过搜索实际的ARM规范)它实际上是一个对象列表。它还指定内容部分应为base64编码且大小不超过4KiB,并包含功能或设置的根元素(不完全确定这意味着什么)。我编写了我认为有效的XML组件,但它会引发错误(下面提到的代码和错误)。我使用API版本2016-03-30和2015-05-01-preview尝试了相同的结果。
这是我对API服务请求的osProfile摘录。
"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": "MyW1nP@ssw0rd"
},
base64 XML additionalUnattendContent [0] .content解码为此( note :我也做了相同的测试但是在根设置节点中包含了内容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."
}
}
答案 0 :(得分:2)
我的经验是:
这是一个有效的例子:
"additionalUnattendContent": [
{
"passName": "oobesystem",
"componentName": "Microsoft-Windows-Shell-Setup",
"settingName": "FirstLogonCommands",
"content": "<FirstLogonCommands><SynchronousCommand><CommandLine>shutdown /r /t 0 /c \"initial reboot\"</CommandLine><Description>reboot</Description><Order>1</Order></SynchronousCommand></FirstLogonCommands>"
}
]
以下是对该主题的讨论: https://github.com/Azure/azure-quickstart-templates/issues/1407