我的(dotNET)应用程序是通过构建管道构建的(使用Windows Hosted代理),在随后的Release管道中,我预配置了16GB-Win2016 VM(启用RDP,HTTP,HTTPS,WinRM和SSH),我将其手动放入RDP中(这里有一个手动干预任务),并配置WinRM(本文之后:https://docs.microsoft.com/en-us/azure/marketplace/cloud-partner-portal/virtual-machine/cpp-configure-winrm-after-vm-creation#configure-vm-to-enable-winrm)。一切都很好,直到这里。下一个任务是Azure文件复制任务,该任务实质上是复制Build构件(来自$(System.DefaultWorkingDirectory)
)并粘贴到我指定的目录中。奇迹般有效。我的下一个任务是创建整个VM的VHD(基本上是在复制完成之后)。
我知道我可以再次手动将RDP导入VM和sysprep
(使用oobe / generalize / shutdown),然后也许返回Azure门户并磁盘导出OS磁盘(指定SAS URL到期时间如何(每篇文章36000条),但是这一切可以自动化吗?
长话短说-我想知道sysprep oobe/generalize/shutdown
是否可以最好通过PS任务远程执行。我知道它的另一部分(导出磁盘和全部磁盘)可以,但是如果sysprep可以远程完成,那么就什么也没有。
答案 0 :(得分:1)
我尝试了这个,然后得到了我想要的东西:
$sysprep= 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg1 = '/generalize'
$arg2 = '/oobe'
$arg3 = '/shutdown'
$arg4 = '/quiet'
& $sysprep $arg1 $arg2 $arg3 $arg4 -Wait
答案 1 :(得分:0)
因此,您不必手动配置winrm,可以在配置虚拟机时对其进行脚本\配置。并且,如果\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
Invoke-Command -ComputerName dnsname\ipaddress_goes_hehe
-ScriptBlock { sysprep /shutdown /generalise}
https://github.com/Azure/azure-quickstart-templates/tree/master/201-vm-winrm-windows
答案 2 :(得分:0)
您可以使用Azure自定义脚本扩展来实现此目的。有一个github项目: https://github.com/jlongo62/AzureVMToImage包含用于镜像VM的powershell脚本。这些脚本旨在在创建映像时保留VM,而不是销毁原始VM。可以从Azure Devops调用脚本。无需针对VM进行身份验证。
您所需要的是:
1-创建一个包含以下脚本的storageaccount blob(-Wait非常重要):
Start-Process -FilePath C:\Windows\System32\Sysprep\Sysprep.exe -ArgumentList '/generalize /oobe /quiet /quit' -Wait
2-在VM上调用它:
$response = Set-AzureRmVMCustomScriptExtension `
-ResourceGroupName $vm.ResourceGroupName `
-VMName $vm.Name `
-Location $vm.Location `
-Name $ExtensionName `
-FileUri $blobUri `
-Run $FileName
答案 3 :(得分:0)