使用perl通过adsi接口导出AD帐户列
来源:互联网 发布:淘宝公益宝贝有什么好处 编辑:程序博客网 时间:2024/06/03 19:51
开始是luoluo做的一个vbs脚本,实现从AD导出用户名的功能。脚本方面我偏爱perl,因此用perl重做了一个,顺便修复了luoluo脚本中的一个小bug,加了一行使脚本能够导出1000个以上的账号。
perl脚本很简单,主要注意几点,首先是adsi的属性使用hash表的方式来设置或者获取;另外一个是注意有的属性有点不一样,需要设置hash的hash,例如$objCommand -> Properties -> {"Page Size"} = 1000;这里。假设域为microsoft,完整的代码如下:
代码:
perl脚本很简单,主要注意几点,首先是adsi的属性使用hash表的方式来设置或者获取;另外一个是注意有的属性有点不一样,需要设置hash的hash,例如$objCommand -> Properties -> {"Page Size"} = 1000;这里。假设域为microsoft,完整的代码如下:
代码:
use warnings;
use strict;
use Win32::OLE;
use constant ADS_UF_ACCOUNTDISABLE => 2;
use constant ADS_SCOPE_SUBTREE => 2;
my $objConnection = Win32::OLE->new( "ADODB.Connection" );
my $objCommand = Win32::OLE->new( "ADODB.Command" );
# open ad
$objConnection -> open( "Provider=ADsDSOObject;" );
$objCommand -> = $objConnection;
# search what and how
$objCommand -> = "select userAccountControl,distinguishedName from 'GC://dc=china,dc=microsoft,dc=com' where objectCategory='user'";
# import all users
$objCommand -> Properties -> {"Page Size"} = 1000;
# search all subtree
$objCommand -> Properties -> = ADS_SCOPE_SUBTREE;
my $objRecordSet = Win32::OLE->new( "ADODB.Recordset" );
$objRecordSet = $objCommand->Execute( ) || die "query data from active directory error,exit/n";
while( not $objRecordSet -> eof )
{
my $intUAC = $objRecordSet -> Fields("userAccountControl") -> value;
# remove diable account
if( not ( $intUAC & ADS_UF_ACCOUNTDISABLE ) )
{
my $longName = $objRecordSet -> Fields("distinguishedName") -> value;
if( $longName =~ /^CN=([/w/./-/_]+),/ )
{
print ."/n";
}
}
$objRecordSet -> MoveNext();
}
use strict;
use Win32::OLE;
use constant ADS_UF_ACCOUNTDISABLE => 2;
use constant ADS_SCOPE_SUBTREE => 2;
my $objConnection = Win32::OLE->new( "ADODB.Connection" );
my $objCommand = Win32::OLE->new( "ADODB.Command" );
# open ad
$objConnection -> open( "Provider=ADsDSOObject;" );
$objCommand -> = $objConnection;
# search what and how
$objCommand -> = "select userAccountControl,distinguishedName from 'GC://dc=china,dc=microsoft,dc=com' where objectCategory='user'";
# import all users
$objCommand -> Properties -> {"Page Size"} = 1000;
# search all subtree
$objCommand -> Properties -> = ADS_SCOPE_SUBTREE;
my $objRecordSet = Win32::OLE->new( "ADODB.Recordset" );
$objRecordSet = $objCommand->Execute( ) || die "query data from active directory error,exit/n";
while( not $objRecordSet -> eof )
{
my $intUAC = $objRecordSet -> Fields("userAccountControl") -> value;
# remove diable account
if( not ( $intUAC & ADS_UF_ACCOUNTDISABLE ) )
{
my $longName = $objRecordSet -> Fields("distinguishedName") -> value;
if( $longName =~ /^CN=([/w/./-/_]+),/ )
{
print ."/n";
}
}
$objRecordSet -> MoveNext();
}
- 使用perl通过adsi接口导出AD帐户列
- AD&ADSI
- ADSI接口获取AD域服务器账户列表[VC++]
- AD & ADSI入门
- AD 和 ADSI 入门知识
- 通过ADSI管理 IIS
- ADSI 接口操作IIS
- 清除过期AD帐户
- 用ADSI开发验证用户帐户的程序段
- PIC通过AD使用光敏电阻
- 使用LDAP接口获取AD域用户
- 使用ADSI获取IIS版本
- 通过ADSI管理 Internet Information Server
- 通过ADSI管理 Internet Information Server
- 误删除AD帐户导致邮箱帐户丢失
- 清除AD过期的帐户和计算机
- AD中用户帐户属性userAccountControl
- AD中查找锁定状态的帐户
- SqlServer2000中用户自定义数据类型的使用
- 终于可以不用任何控件作出XP风格的程序了
- .Net数据库相关操作
- ATAPI(磁盘端口驱动)级文件保护简单实现
- CSS语法手册(三)文本填充,边框,边界和位置属性(一)
- 使用perl通过adsi接口导出AD帐户列
- 教你如何在Linux/Unix平台安装MySQL
- 判断Windows系统补丁
- Delphi 6 XML映象工具
- C++中有了malloc/free,为什么还要用new/delete
- CSS语法手册(四)文本填充,边框,边界和位置属性(二)
- SAP 中如何取得当月的第一天和最后一天的日期值?
- IPC空连接测试代码
- 浅谈怎样在UNIX系统下安装MySQL数据库