我正在尝试运行 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 服务器对话。
我的一位同事找到了这个链接,解决了这对我们来说是个问题。
感谢大家的建议。