无法让pyad工作

时间:2017-04-19 00:27:14

标签: python-3.x pyad

我之前有过这个工作。现在,在压平和重建机器之后,我似乎无法让pyad工作。

我的脚本使用adquery来获取域的成员。

我已经使用正确的版本安装了pyad和pywin32。我使用的是Python 3.6。

我一直收到以下错误:

pywintypes.com_error :( -2147352567,'发生异常。',(0,' Active Directory','指定的域名不存在或无法使用联系。\ r \ n',无,0,-2147217865),无)

该脚本完美运行,因此我认为这是一个安装问题。

这是我写的函数:

pipeline {
  agent { label 'docker' }
  options {
    skipDefaultCheckout true
  }
  parameters {
    string(name: 'MY_MODULE', defaultValue: 'awesome_module', description: 'What subversion module to checkout?')
  }
  stages {
    stage('hot_stage') {
      steps {
        checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '196ff1ff-c481-4d2e-922b-e32410f8ee13', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: "https://svn/code/${params.MY_MODULE}/trunk"]], workspaceUpdater: [$class: 'UpdateUpdater']]
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

不知道为什么我会因为提问而被骗。也许这就是stackoverflow的工作原理。

我找到答案,并不像改变域名那么简单。安德鲁我非常感谢你的回应,因为它让我走上了正确的道路。

我花了很多时间调试这个。我甚至尝试使用ldap3 - 一个不同的python AD库。如果你的结果集小于1000,那一个就是错误但速度更快。我从来没有能够搜索超过1000条记录的页面 - AD限制。最后,我回到了pyad并找出了问题所在。 Pyad是一个更易于使用的模块 - 以我的拙见。

我了解了LDAP服务器和GC服务器之间的区别。 GC服务器能够为林中的所有域提供大多数属性。我能够使用powershell识别网络上的GC服务器:

> $GCs = Get-ADForest
> $GCs.GlobalCatalogs

有了这个,我在LDAP中设置了LDAP服务器:

z_obj.default_ldap_server='xxxx.corp.microsoft.com'  

我还从查询中删除了一些属性。不确定这是否是一个因素。

最终结果可以正常工作而无需向pyad发送用户名和密码。以下是有效的代码:

def call_adquery(domain, debug=False):
    df = pd.DataFrame()
    z_obj = adquery.ADQuery()
    i = 0
    wc = """
    objectClass='person'
    and SAMAccountType='805306368'
    and userAccountControl='512'
    """
    dn = 'OU=UserAccounts,DC={0},DC=corp,DC=microsoft,DC=com'.format(domain)
    att = ['givenName', 'mail', 'manager',
            'Name',
            'displayName','Title','mailNickName',
            'Department','Company',
            'userPrincipalName','sn','cn', 'DistinguishedName',
            'physicalDeliveryOfficeName']
    z_obj.default_ldap_server='<gc from powershell>' 
    z_obj.execute_query(attributes=att, where_clause=wc, base_dn=dn, type='GC')
    df = pd.DataFrame()
    for row in z_obj.get_results():
         i += 1
         if (debug==True) and (i == 10): 
            break
         if len(df)==0:
            df =pd.DataFrame(row, index=[0])
         else:
            df= df.append(row, ignore_index=True)
     return df

我的猜测是我的默认活动目录服务器已更改,因此导致我的脆弱代码失败。

希望这有助于其他人。