You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过vmware_vm_shell以管理员身份运行PowerShell?

问题
  • 想了解Ansible模块vmware_vm_shell是否可以以管理员身份运行PowerShell?因为部分需要在PowerShell中执行的命令必须提升至管理员权限。
  • 不使用win_shell或win_psexec的原因:希望在Windows虚拟机客户机中执行命令,且不依赖WinRM,无需通过IP地址访问虚拟机,而是借助vmtools进行连接。

用户提供的Playbook代码:

- name: Initiate New Disk
    vmware_vm_shell:
      hostname: "{{ lookup ('env', 'VMWARE_HOST' )}}"
      username: "{{ lookup ('env', 'VMWARE_USER' )}}"
      password: "{{ lookup ('env', 'VMWARE_PASSWORD' )}}"
      vm_id: "{{ vmname }}"
      vm_username: "administrator"
      vm_password: "password123"
      vm_shell: 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe'
      vm_shell_args: '-ExecutionPolicy Bypass -command "Initialize-Disk -Number {{newdisk_osnum}}"'
      vm_shell_cwd: 'C:\Users\administrator\Desktop'
      wait_for_process: yes
      validate_certs: no
    delegate_to: localhost
    register: initdisk_shell
回答

vmware_vm_shell默认会用你指定的vm_username启动进程,但即使账号属于管理员组,普通启动的PowerShell也不会自动获得管理员权限。要实现管理员权限运行,有两种可靠方式:

方法1:用Start-Process强制提升权限

修改vm_shell_args,通过PowerShell的Start-Process参数触发UAC提升,同时保证进程等待逻辑正常。

修改后的Playbook片段:

- name: Initiate New Disk with Admin Privilege
    vmware_vm_shell:
      hostname: "{{ lookup ('env', 'VMWARE_HOST' )}}"
      username: "{{ lookup ('env', 'VMWARE_USER' )}}"
      password: "{{ lookup ('env', 'VMWARE_PASSWORD' )}}"
      vm_id: "{{ vmname }}"
      vm_username: "administrator"
      vm_password: "password123"
      vm_shell: 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe'
      vm_shell_args: >
        -ExecutionPolicy Bypass -command "
        Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Bypass -command \"Initialize-Disk -Number {{newdisk_osnum}}\"' -Verb RunAs -Wait
        "
      vm_shell_cwd: 'C:\Users\administrator\Desktop'
      wait_for_process: yes
      validate_certs: no
    delegate_to: localhost
    register: initdisk_shell

关键说明:

  • -Verb RunAs:触发UAC提升,以管理员身份启动新PowerShell进程
  • -Wait:让主进程等待管理员进程执行完成,配合wait_for_process: yes确保Ansible等待整个命令结束
  • 嵌套引号用\"转义,避免语法错误

额外注意事项

如果虚拟机UAC设置为最高级别,非交互式执行可能会被拦截。需要提前调整虚拟机UAC策略(比如通过组策略或注册表将UAC级别设为"不通知"),确保无交互提升权限生效。

内容的提问来源于stack exchange,提问作者anonimus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:50:47