簡體   English   中英

在管道中使用 PowerShell 任務 Sysprep 一個 Azure VM

[英]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-a​​fter-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

確保不使用 Azure 自定義腳本擴展來運行 sysprep。

Azure 腳本在 LocalSystem 用戶上下文下運行:

自定義腳本擴展將在 LocalSystem 帳戶下運行

這是有問題的,因為 sysprep 不支持在系統用戶上下文下運行:

Sysprep 不能在系統帳戶的上下文中運行。 例如,不支持使用任務計划程序或 PSExec 在系統帳戶的上下文中運行 Sysprep。

提供這個以便人們避免我的錯誤:)

因此,您不必手動配置 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/jlong​​o62/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM