ansible win_command 失败,但在手动运行命令时有效

ansible win_command 失败,但在手动运行命令时有效

我正在尝试运行 New-WdsClient PowerShell cmdlet 或 wdsutil /add-device,我并不关心最终使用哪一个,只要它能工作就行。

当我运行“wdsutil.exe /add-device /device:new_client /id:aabbccddeeff /BootImagePath:"Boot\x64\Images\boot-(6).wim"”时,它可以工作,当我从 Ansible 运行相同命令时,我得到 "stdout_lines": [ "", "Windows Deployment Services Management Utility [Version 10.0.14393.0]", "© 2016 Microsoft Corporation. All rights reserved.", "", "", "An error occurred while trying to execute the command.", "Error Code: 0xC103013A", "Error Description: The specified server name is invalid or does not exist in the directory service.", ""

我完全不知所措。

Ansible 角色只是: - name: Pre Stage WDS Client win_command: powershell.exe - args: stdin: 'wdsutil.exe /add-device /device:{{ var_wds_client_name }} /id:{{ var_wds_client_mac }} /BootImagePath:"Boot\x64\Images\boot-(6).wim"'

使用 New-WdsClient 我甚至还没有走到这一步......

有任何想法吗?

-- 编辑 1 --

当我临时运行 win_whoami 时,它起作用了: ansible wds-server --become --become-method runas --become-user DOMAIN\Administrator --module-name win_whoami 2> /dev/null| egrep "SeDebug|High" "account_name": "High Mandatory Level", "account_name": "High Mandatory Level", "SeDebugPrivilege": "enabled"

当我以临时方式运行 wdsutil 时: ansible wds-server --become --become-method runas --become-user DOMAIN\Administrator --module-name win_command -a "wdsutil.exe /add-device /device:client /id:0001a5a0c267 /BootImagePath:Boot\x64\Images\boot-(6).wim"我得到:

Windows Deployment Services Management Utility [Version 10.0.14393.0] © 2016 Microsoft Corporation. All rights reserved.

An error occurred while trying to execute the command. Error Code: 0xC103013A Error Description: The specified server name is invalid or does not exist in the directory service.

non-zero return code

答案1

这是一个猜测,因为我手边没有 Windows WDS 部署来执行测试。

我认为该任务没有通过 Ansible 运行,因为缺乏提升的权限wdsutil,根据微软文档。您可能需要使用become关键字才能完成任务:

- name: Pre Stage WDS Client
  win_command: powershell.exe -
  args:
    stdin: 'wdsutil.exe /add-device /device:{{ var_wds_client_name }} /id:{{ var_wds_client_mac }} /BootImagePath:"Boot\x64\Images\boot-(6).wim"'
  become: yes
  become_method: runas

或者,直接调用wdsutil

- name: Pre Stage WDS Client
  win_command: 'wdsutil.exe /add-device /device:{{ var_wds_client_name }} /id:{{ var_wds_client_mac }} /BootImagePath:"Boot\x64\Images\boot-(6).wim"'
  become: yes
  become_method: runas

使用以下临时调用检查是否授予 Ansible 管理权限:

$ ansible windows_wds_server --become --become-method runas --module-name win_whoami 

返回的 JSON 对象应该将privileges.SeDebugPrivilege属性设置为enabled

参考:https://docs.ansible.com/ansible/latest/user_guide/become.html#administrative-rights

答案2

首先,向大家致歉。

Ansible 服务器是一个 RHEL 盒,它实际上正在与一个中间 Windows 盒对话,然后后者再与 WDS 服务器对话。

我的一位同事找到了这个链接,解决了对我们来说是个问题。

感谢大家的建议。

相关内容