如何导出 Samba Active Directory 中的完整用户列表?

如何导出 Samba Active Directory 中的完整用户列表?

我有一个 Active Directory 运行在Samba 4.6.3带有Debian Jessie.在 Windows 7 PC(AD 客户端)上,我安装了卫星天线从那里我使用管理员帐户管理服务器,但现在我需要以可读格式导出完整的用户列表,最好是.csv

使用卫星天线(从 Windows 中的客户端)到目前为止,我只能一次导出一个OU(组织单位)内的所有对象,OU无论是OU用户容器还是 PC 容器,也就是说,我可以做我想做的事情(通过对每个用户容器重复该过程来导出完整的用户列表OU,但我有很多OU用户容器。

问题:有什么方法可以OU快速导出完整的用户列表(包括名字和姓氏及其对应项),而无需进行这种迭代工作?

PD:答案不必局限于带有 RSAT 的 Windows 客户端,也可以在 Samba 服务器中

答案1

Bash 解决方案..部分...

首先提取 AD 内容:

ldapsearch -s -h <ADHOST> -P <ADPORT> -D <USERDN WITH RIGHTS TO READ AD> -W -E pr-1000/noprompt -b <BASEDN FOR SEARCH> > ad_extract_tmp.ldif

“-W”强制交互式提示输入用户密码。你不希望它出现在命令历史记录中。如果您将其组合到脚本中,则可以使用“-w”并保护密码访问。

现在内容已提取到文本文件中,我们可以使用文本处理将其转换为 CSV 或任何其他我们想要的格式。

ldif 文件已包装,因此第一步是解开它

awk ' BEGIN (RS="\n\n"; FS="\n "} {for (i=1,i<=NF;i++) printf $i; printf "\n\n"}' ad_extract_tmp.ldif > ad_extract_tmp.ldif.unwrapped

在这里,我们将记录重新定义为由具有两个行结尾的文本块组成,并将字段重新定义为由仅一个行结尾和一个空格的文本块组成。接下来,我们将每一行作为一个字段进行处理,将 ldif 包裹的类似内容(“\n”)连接到单个字段中。现在我们有了一个未包装的 ldif,最后一步是将 ldif 转换为 csv。

awk ' Begin {
             record = "false";
             print "\x22uid\x22,\x22dn\x22";
  }
  { if ( record = "true") {

       if ( $0 ~ /~sAMAccountName./) {
         uid = $0;
         sub (/^.*: /,"",uid);
        }

       if ( $0 ~ /^\s*$/) {
           print "\x22" uid "\x22,\x22" dn "\x22";
           dn = "";  record = "false";
         }
      }
  }
  {
    if ($0 ~ /^dn:./) {
       record = "true";
       dn = $0;
     }
  }' ad_extract_tmp.ldif.unwrapped > ad_extract.csv

这是一个显着简化的 awk 转换脚本,可将未包装的 ldif 转换为 csv。

可以将 dn 提取到用户 ou 并跟踪所需的其他字段。只需扩展最终的 awk 脚本即可。

相关内容