我有一个Windows Azure虚拟机,需要通过Powershell在管理模式下从本地计算机执行“%windir%\system32\sysprep”,然后执行“sysprep /generalize”。如何执行该操作?
ctrmrzij1#
对于您的要求,据我所知您可以使用PowerShell脚本来实现它。首先,您可以看一下Sysprep,它可以在PowerShell命令C:\WINDOWS\system32\sysprep\sysprep.exe /generalize /shutdown /oobe中运行。将此命令放在一个脚本内,然后您可以使用两种方法从您的本地机器在VM中运行此脚本。一种是使用Invoke命令。在Azure CLI中:
C:\WINDOWS\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
az vm run-command invoke --command-id RunPowerShellScript -g group_name -n vm_name --scripts @script.ps1
在PowerShell中:
Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RunPowerShellScript' -ScriptPath 'sample.ps1'
另一个是使用VM扩展。它有点复杂。你可以看看Azure PowerShell命令Set-AzVMCustomScriptExtension。运行后的输出:-
Set-AzVMCustomScriptExtension
Value[0] : Code : ComponentStatus/StdOut/succeeded Level : Info DisplayStatus : Provisioning succeeded Message : Value[1] : Code : ComponentStatus/StdErr/succeeded Level : Info DisplayStatus : Provisioning succeeded Message : Status : Succeeded Capacity : 0 Count : 0
i2loujxw2#
我无法使sysprep与Invoke-AzVMRunCommand一起工作,它以成功状态运行,但VM未关闭。最后找到了https://developercommunity.visualstudio.com/t/devops-sysprep-public-agents/1375989和它讲得通。因此,仅仅使用Invoke-AzVMRunCommand来运行sysprep是行不通的,我认为重置本地管理员用户密码并以本地管理员身份运行该进程可能是一种解决办法。
2条答案
按热度按时间ctrmrzij1#
对于您的要求,据我所知您可以使用PowerShell脚本来实现它。首先,您可以看一下Sysprep,它可以在PowerShell命令
C:\WINDOWS\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
中运行。将此命令放在一个脚本内,然后您可以使用两种方法从您的本地机器在VM中运行此脚本。一种是使用Invoke命令。在Azure CLI中:
在PowerShell中:
另一个是使用VM扩展。它有点复杂。你可以看看Azure PowerShell命令
Set-AzVMCustomScriptExtension
。运行后的输出:-
i2loujxw2#
我无法使sysprep与Invoke-AzVMRunCommand一起工作,它以成功状态运行,但VM未关闭。
最后找到了https://developercommunity.visualstudio.com/t/devops-sysprep-public-agents/1375989和它讲得通。
因此,仅仅使用Invoke-AzVMRunCommand来运行sysprep是行不通的,我认为重置本地管理员用户密码并以本地管理员身份运行该进程可能是一种解决办法。