[英]Sysprep an Azure VM using PowerShell task in a pipeline
我的 (dotNET) 應用程序是從構建管道構建的(使用 Windows 托管代理),在隨后的發布管道中,我提供了一個 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 文件復制任務,它實質上復制構建工件(來自$(System.DefaultWorkingDirectory)
)並粘貼到我指定的目錄中。 奇跡般有效。 我的下一個任務是創建整個 VM 的 VHD(基本上是在復制完成之后)。
我知道我可以手動 RDP 進入 VM(再次)和sysprep
(使用 oobe/generalize/shutdown),然后可能返回到 Azure 門戶和磁盤導出 OS 磁盤(指定 SAS URL 過期時間(每次 36000)文章)) 但是這一切都可以自動化嗎?
所以,長話短說 - 我想知道是否可以通過 PS 任務遠程執行sysprep oobe/generalize/shutdown
。 我知道它的另一部分(導出磁盤和所有內容)可以,但是如果 sysprep 可以遠程完成,那就沒有了。
我試過了,得到了我想要的:
$sysprep= 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg1 = '/generalize'
$arg2 = '/oobe'
$arg3 = '/shutdown'
$arg4 = '/quiet'
& $sysprep $arg1 $arg2 $arg3 $arg4 -Wait
因此,您不必手動配置 winrm,您可以在配置 vm 時對其編寫腳本\\配置它。 如果\\當 winrm 正在工作時,您可以使用 powershell 遠程處理對 vm 發出命令:
Invoke-Command -ComputerName dnsname\ipaddress_goes_hehe
-ScriptBlock { sysprep /shutdown /generalise}
https://github.com/Azure/azure-quickstart-templates/tree/master/201-vm-winrm-windows
您可以使用 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 - 在虛擬機上調用它:
$response = Set-AzureRmVMCustomScriptExtension `
-ResourceGroupName $vm.ResourceGroupName `
-VMName $vm.Name `
-Location $vm.Location `
-Name $ExtensionName `
-FileUri $blobUri `
-Run $FileName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.