Ansible调用Powershell获取Active Directory OU无返回值问题求助
问题根因
你遇到的两个报错均源于Ansible Windows提权的默认登录令牌限制:默认runas方式生成的是无网络访问权限的本地交互登录上下文,无法访问域控资源,也无权限读取计算机级别的组策略信息。
修复方案
方案1:调整提权配置(可正常执行你原有的两个命令)
修改Ansible任务配置,指定提权时生成带网络凭据的登录令牌,同时注意powershell变量转义避免被Ansible提前解析:
# 用adsisearcher查询OU的任务 - name: Get Active Directory OU from Instance via adsisearcher ansible.windows.win_powershell: script: | ([adsisearcher]'(&(name={{ ansible_hostname }})(objectClass=computer))').findall().path become_method: runas become: yes become_user: Administrator become_flags: logon_type=interactive logon_flags=netcredentials_only register: active_directory_ou # 用gpresult查询OU的任务 - name: Get Active Directory OU from Instance via gpresult ansible.windows.win_powershell: script: gpresult /r /scope computer /f become_method: runas become: yes become_user: Administrator become_flags: logon_type=interactive logon_flags=netcredentials_only register: active_directory_ou
方案2:读取本地注册表(更稳定,无需访问域控)
加域的Windows设备会在本地注册表存储当前计算机的完整OU路径,无需访问域控即可直接读取,避免网络和权限问题:
- name: Get Active Directory OU from local registry ansible.windows.win_reg_stat: path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine name: Distinguished-Name register: ad_ou_reg - name: set OU fact set_fact: active_directory_ou: "{{ ad_ou_reg.value }}"
验证方式
执行任务后可通过{{ active_directory_ou }}直接获取完整的计算机对象DN路径,其中包含OU层级信息。
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

