导出加入域的计算机脚本

通过下边脚本可以把当前加入域某OU下的计算机导出到“计算机列表.csv ”文件中,导出的计算机信息包括机器名,dNSHostName,最后登录时间等属性。

' Define constants
'
CONST ForReading                    = 1    
CONST  ForWriting                     =   2     
CONST  ForAppending                     =   8  
CONST  CONST_ERROR                    =   0
CONST  CONST_WSCRIPT                  =   1
CONST  CONST_CSCRIPT                  =   2
CONST  CONST_SHOW_USAGE               =   3
CONST  CONST_LIST                     =   4
Const  ADS_SCOPE_SUBTREE                 =   2
Const  ADS_UF_DONT_EXPIRE_PASSWD         =   65536
Const  ADS_UF_PASSWORD_EXPIRED         =   8388608  
Const  E_ADS_PROPERTY_NOT_FOUND   =   & h8000500D
Const  ONE_HUNDRED_NANOSECOND     =  . 000000100
Const  SECONDS_IN_DAY             =   86400

Dim  lastLogin
' ''''''''''''''''''''''''
Set  objShell  =   CreateObject ( " Wscript.Shell " )
lngBiasKey 
=  objShell.RegRead( " HKLM\System\CurrentControlSet\Control\ "  _
    
&   " TimeZoneInformation\ActiveTimeBias " )
If  ( UCase ( TypeName (lngBiasKey))  =   " LONG " Then
    lngBias 
=  lngBiasKey
ElseIf  ( UCase ( TypeName (lngBiasKey))  =   " VARIANT() " Then
    lngBias 
=   0
    
For  k  =   0   To   UBound (lngBiasKey)
        lngBias 
=  lngBias  +  (lngBiasKey(k)  *   256 ^ k)
    
Next
End   If
Set  objShell  =   Nothing

' ''''''''''''''''''''''''

inputOU
= inputbox ( " 请输入所需查询计算机的OU,该OU必须位于Machines的下一层,不输入为查询所有计算机 " , " 输入信息 " )
Outputfile
=  strDCName1  &   " 计算机列表 "
Set  FSO  =   CreateObject ( " Scripting.FileSystemObject " )
Set  fLog  =  fso.OpenTextFile(Outputfile  &  inputOU  &   " .csv " , ForWriting, TRUE )
fLog.WriteLine 
" 机器名,dNSHostName,最后登录时间 "

Set  rootDSE  =   GetObject ( " LDAP://rootDSE " )
BaseDN 
=  rootDSE.Get( " defaultNamingContext " )
DC
=   replace (BaseDN, " DC= " , " , " )
DC
=   replace (DC, " ,, " , " . " )
DC
= right (DC, len (DC) - 1 )

TARGET_OU
=   " Machines "

if  inputOU <> ""   then
    TARGET_OU
=  inputOU  &   " ,OU= "   &  TARGET_OU
end   if

inputdate
= 0        

Set  objConnection  =   CreateObject ( " ADODB.Connection " )

objConnection.Provider 
=   " ADsDSOObject "  
objConnection.Open 
" Active Directory Provider "
Set  objCommand  =   CreateObject ( " ADODB.Command " )
Set  objCommand.ActiveConnection  =  objConnection
Set  objCommand1  =   CreateObject ( " ADODB.Command " )
Set  objCommand1.ActiveConnection  =  objConnection
' on error resume next
 
    objCommand.CommandText 
=   " <LDAP:// "   &  DC  &   " /OU= "   &  TARGET_OU  &   " , "   &  BaseDN  &   " >;(&(objectclass=Computer));cn,ADsPath;subtree "
    
Set  objRecordSet  =  objCommand.Execute
    
if  err.number <> 0   then  
        
msgbox   " 无法找到: "   &  TARGET_OU 
    
end   if
    wscript.echo 
" Begin: "
    
If  objRecordSet.RecordCount > 0   Then
        objRecordSet.MoveFirst
        
Do  Until objRecordSet.EOF                    
                               
                                    
On   Error   Resume   Next
                                    adspath
= objRecordSet.Fields( " adspath " )
                                    ShowMSG  adspath
                    
Set  objComputer  =   GetObject (adspath)
                    lastName
= objComputer.dNSHostName
                                computername
= objComputer.Name
                    computername
= replace (computername, " CN= " , "" )  
                    
Set  objDate  =  objComputer.lastLogonTimeStamp
                                    
If  (Err.Number  <>   0 Then
                                        
On   Error   GoTo   0
                                        dtmDate 
=  # 1 / 1 / 1601 #
                                    
Else
                                        
On   Error   GoTo   0
                                        lngHigh 
=  objDate.HighPart
                                        lngLow 
=  objDate.LowPart
                                        
If  (lngLow  <   0 Then
                                            lngHigh 
=  lngHigh  +   1
                                        
End   If
                                        
If  (lngHigh  =   0 And  (lngLow  =   0  )  Then
                                            dtmDate 
=  # 1 / 1 / 1601 #
                                        
Else
                                            dtmDate 
=  # 1 / 1 / 1601 +  (((lngHigh  *  ( 2   ^   32 )) _
                                                
+  lngLow) / 600000000   -  lngBias) / 1440
                                        
End   If
                                    
End   If
                                    lastLogin
= dtmDate
                                    fLog.WriteLine computername 
&   " , "    &  lastName  &   " , "    &  lastLogin
                                     
                                    
            objRecordSet.MoveNext
        
Loop
    
End   If
 
wscript.echo 
" Count: "   &  i 

Sub  ShowMSG(strSubMSG)
    Wscript.Echo 
Time   &  vbTab  &  strSubMSG     
end sub

 

转载于:https://www.cnblogs.com/alronzhang/archive/2010/06/09/1754640.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值