使用远程 PowerShell 的 Sysprep Azure VM

Sysprep Azure VM with Remote PowerShell

我正在尝试通过 Azure DevOps YAML 管道在 Azure 中对 VM 进行 SysPrep。在同一管道(前一阶段)中,我通过 Azure 资源管理器 (ARM) 模板部署 VM,并将脚本和文件复制到计算机。我想使整个过程自动化,所以 RDP 进入机器不是一种选择。当我在 VM 上 运行 SysPrep 时,收到以下错误消息:

##[error]The remote session query failed for <insertMyFQDN>.eastus.cloudapp.azure.com with the following error message: Access is denied.

从我的存储库中,我有几个文件,包括一个 PowerShell 脚本,该脚本用于对机器进行 SysPreps (sysPrepvm.ps1) - 取自 。该脚本在我登录机器并手动 运行 时工作。

sysPrepvm.ps1

$sysPrepPath = 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arguments = '/generalize /oobe /shutdown /quiet'
Invoke-Command -ScriptBlock {param($sysPrepPath,$arguments) Start-Process -FilePath $sysPrepPath -ArgumentList $arguments} -ArgumentList $sysPrepPath,$arguments

我正在使用 Azure DevOps 中的内置任务“目标机器上的 Powershell”,我可以通过它调用其他命令或脚本,所以我相信该任务可以正常工作。

我在 YAML 管道中的阶段如下所示:

- stage: 
  displayName: SysPrep
  variables: 
   azFQDN: $[stageDependencies.Connect.connect.outputs['SetEnvVars.azFQDN']]
  jobs:
  - job: SysPrepVhD
    steps:
    - task: PowerShellOnTargetMachines@3
      inputs:
        Machines: '$(azFQDN)' # FQDN on the machine
        UserName: '$(adminUser)'
        UserPassword: '$(adminPw)'
        ScriptType: 'FilePath'
        ScriptPath: 'C:\Windows\System32\Sysprep\fishtank\sysPrepvm.ps1'

远程 运行 是否有限制?我还没有找到解决方法,所以非常感谢任何答案。

编辑

我也尝试过 运行使用 -Verb RunAs 将脚本作为内联脚本而不是文件,并尝试了上一个 post 中接受的答案:

在管道中使用 PowerShell 任务对 Azure VM 进行 Sysprep

我设法找到了一种使用自定义脚本扩展的方法。我一开始并没有想到这样做,因为我使用的ARM模板已经在机器上有一个Custom Script Extension来启用WinRM,并且不能同时安装多个Custom Script Extension。此外,我不想在机器启动后立即执行 SysPrep,因为它必须先 运行 其他脚本和设置。在我的 YAML 管道中,我设法删除了现有管道以重新部署包含脚本的新自定义脚本扩展。

我将整个解决方案发布在 GitHub - https://github.com/Crytlig/azsysprep - 以供感兴趣的任何人使用。它显然需要一些清洁,但它可以正常工作。