2

我的 (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-配置-winrm-a​​fter-vm-creation#configure-vm-to-enable-winrm)。一切都很好,直到这里。下一个任务是 Azure 文件复制任务,它实质上是复制构建工件(从$(System.DefaultWorkingDirectory))并粘贴到我指定的目录中。奇迹般有效。我的下一个任务是创建整个 VM 的 VHD(基本上是在复制完成之后)。

我知道我可以手动 RDP 进入 VM(再次)和sysprep(使用 oobe/generalize/shutdown),然后可能返回 Azure 门户和磁盘导出操作系统磁盘(指定 SAS URL 过期时间(每篇文章 36000) )) 但是这一切都可以自动化吗?

所以,长话短说 - 我想知道是否sysprep oobe/generalize/shutdown可以通过 PS 任务远程执行。我知道它的另一部分(导出磁盘和所有)可以,但是如果 sysprep 可以远程完成,那就没有了。

4

4 回答 4

1

我试过了,得到了我想要的:

$sysprep= 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg1 = '/generalize'
$arg2 = '/oobe'
$arg3 = '/shutdown'
$arg4 = '/quiet'

& $sysprep $arg1 $arg2 $arg3 $arg4 -Wait
于 2020-02-04T02:57:54.780 回答
1

确保不使用 Azure 自定义脚本扩展来运行 sysprep。

Azure 脚本在 LocalSystem 用户上下文下运行:source

自定义脚本扩展将在 LocalSystem 帐户下运行

这是有问题的,因为 sysprep 不支持在系统用户上下文下运行:source

Sysprep 不能在系统帐户的上下文中运行。例如,不支持使用任务计划程序或 PSExec 在系统帐户的上下文中运行 Sysprep。

提供这个以便人们避免我的错误:)

于 2020-03-03T12:56:48.693 回答
0

因此,您不必手动配置 winrm,您可以在配置 vm 时编写脚本\配置它。如果\当 winrm 工作时,您可以使用 powershell remoting 向 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

于 2020-01-25T10:16:22.117 回答
0

您可以使用 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 
于 2020-01-25T18:27:09.643 回答