1

VB を使用して AD で無効なアカウントを検索したい (90 日以上経過し、ホーム ディレクトリを削除する)。次のスクリプトは正常に機能しますが、再帰的には機能しません:(

誰でもこれを機能させるのを助けることができますか? どんな助けでも彼は高く​​評価します:)

Option Explicit

Dim objOU, objUser, objFSO, strHomeDirectory, objTextFile

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOU = GetObject("LDAP://OU=users,DC=corp,DC=contoso,DC=com")

objOU.Filter = Array("user")

For Each objUser In objOU
if ( objuser.useraccountcontrol = 514 Or objuser.useraccountcontrol = 66050 ) And DateDiff("d", objUser.WhenChanged, Now) > 90 Then 
    ' Retrieve home directory.
    strHomeDirectory = objUser.homeDirectory
    ' Replace %username% with value of sAMAccountName attribute.
     strHomeDirectory = Replace(strHomeDirectory, "%username%", objUser.sAMAccountName)
    ' Delete the folder.
     objFSO.DeleteFolder strHomeDirectory
else
wscript.sleep 100
End If
Next
4

1 に答える 1

1

通常、これはLDAP クエリで行います。恥知らずなプラグインを許していただけるなら、この種のタスクを簡素化するために、AD クエリのクラスを少し前に書きました。コードをコピーしてスクリプトに貼り付け、次のように使用できます。

Set fso = CreateObject("Scripting.FileSystemObject")

Set qry = New ADQuery
qry.Filter = "(&(objectClass=User)(objectCategory=Person)" & _
             "(userAccountControl:1.2.840.113556.1.4.803:=2))"
qry.Attributes = Array("sAMAccountName", "homeDirectory", "whenChanged")

Set rs = qry.Execute

If Not rs Is Nothing Then
  Do Until rs.EOF
    If DateDiff("d", rs.Fields("whenChanged").Value, Now) > 90 Then
      homedir = rs.Fields("homeDirectory").Value
      homedir = Replace(homedir, "%username%", rs.Fields("sAMAccountName").Value)
      If fso.FolderExists(homedir) Then fso.DeleteFolder homedir
    End If
    rs.MoveNext
  Loop
  rs.Close
End If
于 2013-02-25T17:44:13.247 に答える