This page has been robot translated, sorry for typos if any. Original content here.

Scripts für Systemadministratoren, Nützliche Skripts für Win2003



  • So verbinden Sie ein Netzlaufwerk
  • Zum Anschließen des Druckers
  • Überprüfen Sie die Änderungen in den Parametern in AD und senden Sie sie an E-Mail oder Sharepoint-Liste
  • Skript zum Entfernen von Terminallizenzen auf Clients, alle 30 Tage
  • Scripting gegen mail.ru-agent
  • Das Skript macht eine Sicherung des Systems und gießt es in ftp
  • Blockiert / löscht Benutzer in AD und nimmt aus der angegebenen Datei eine Liste ihres Namens
  • Kopieren einer Datei in Benutzer-Roaming-Profile
  • Das Script sucht nach allen Controllern von Benutzern, die sich seit mehr als 90 Tagen nicht angemeldet haben und sie deaktivieren
  • Die Batchdatei (closefl.bat) schließt alle Dateien, die von Benutzern im Netzwerk auf Ihrem Computer geöffnet werden
  • Skript für die Benachrichtigung der Benutzer über den Ablauf der Buchhaltung in der Domäne für 10 Tage
  • Skript für die Suche im Benutzerverzeichnis mit einer begrenzten Gültigkeitsdauer des Kontos und Export in eine Datei
  • Skript yakii perevіryaєe novyh yuzerіv Ich bin in dem Text in der Text
  • Setzen oder deaktivieren Sie das Kontrollkästchen "Fernzugriff auf diesen Computer zulassen"
  • Schalten Sie den Adapter aus
  • Inventar alle Maschinen in der Domain
  • Bestimmen, wann ein Konto abläuft (gibt das Gültigkeitsdatum für ein Benutzerkonto zurück)
  • Ermittlung, wann ein Benutzerkonto abläuft
  • Rekursiv verteilt an alle Benutzer der Domain das Attribut "Benutzer muss Passwort bei der nächsten Anmeldung ändern"
  • Erhalten der SID (s) eines Computers von AD
  • Suche nach Konten in ActiveDirectory mit abgelaufenen Passwörtern
  • Abfragen von Computern, zu dem Thema, welcher Benutzer gerade angemeldet ist
  • Überwacht das Systemprotokoll und benachrichtigt Sie über die Änderung der Browsereinstellungen
  • Skript zum Neustart des ADSL-Moped-D-Link DSL-2640U
  • Ein Skript zum Erstellen von Benutzerkonten aus der Liste. (Txt, xls)
  • Neustart von apache, mysql, cron, sendmail services


  • Öffnen Sie den Notizblock, kopieren Sie den Code dort und speichern Sie das Dokument mit der Erweiterung .vbs. Als nächstes, wenn das Netzwerk ohne Domains diese Datei in den Start für jeden PC kopieren. Wenn das Netzwerk eine Domäne ist, dann erstellen Sie eine Gruppenrichtlinie (in AD), wobei der Parameter autoload diese Datei einfügt. Wenn Sie das Konto anschließen oder neu starten, wird das Skript ausgeführt






    So verbinden Sie ein Netzlaufwerk:
     Setzen Sie WshNetwork = CreateObject ("WScript.Network") 'Erstellen eines Objekts vom Typ Network Set Drives = WshNetwork.EnumNetworkDrives c = 0' Time-getestet für mindestens ein Netzlaufwerk!  I = 0 Während ich <= Drives.Count-1 'Check für Netzwerk-Wildcards c = 1' MsgBox "Du hast ein Netzlaufwerk" & Drives.Item (i) & "-" & Drives.Item (i + 1) I = i + 2 Wend if c = 0 dann 'MsgBox' Es gibt kein einzelnes Laufwerk '' MsgBox "Versuche, ein Netzlaufwerk zu installieren" 'Set WshNetwork = CreateObject ("WScript.Network") WshNetwork.MapNetworkDrive "Z:", "\ \ Servername \ Ordnername "End if 





    Zum Anschluss des Druckers:
     Set WshNetwork = WScript.CreateObject ("WScript.Network")
     WshNetwork.AddWindowsPrinterConnection "\\ Servername \ Druckername"
    
    





    Überprüfen der Änderungen der Parameter in AD und Senden der Benachrichtigung an E-Mail oder an die Sharepoint-Liste:


    Deutsch - Übersetzung - ========
    "
    'Script Information: Senden Sie eine Nachricht an den Administrator
    'Wenn Sie die Daten in AD ändern, können Sie eine Nachricht senden
    'E-Mail oder erstellen Sie eine Aufgabe in MOSS 2007
    "
    'Autor: Korotenko Vladimir SDC 2008 Voronezh
    'Erstellt von: 15.04.2008 - 11:01:47
    "Ursprünglicher Weg: untitled.vbs
    'Beschreibung: Erstellen Sie eine Domain-Schema-Dump und vergleichen Sie
    'Mit der vorherigen Kopie, um die Änderungen zu erhalten und die nachfolgenden
    'Benachrichtigung
    "
    '================================================= =======
    * /




    // Abschnitt der Scripteinstellungen
    Var SmtpHost, SmtpPort, MailSubject, MailTo, MailFrom, TextBody;
    Var DumpCmdLine, WinDiff, DumpFile, DumpFileOld, WorkingFolder;
    Var DiffFile, DiffMessage;
    Var SpListGuid, SpHost, UseSp;

    SmtpHost = "comp1"; // Mail-Server zum Senden von Nachrichten
    SmtpPort = 25; // der Port des Mail-Servers
    MailSubject = "Änderungen an der Organigramm vornehmen"; // der Titel der Briefnachricht
    MailTo = "vkoroten@ot.comch.ru"; // Adresse des Empfängers
    MailFrom = "vkoroten@ot.comch.ru"; // Absenderadresse
    DumpCmdLine = "c: \\ windows \\ system32 \\ ldifde.exe"; // Befehlszeile zum Dumping ihrer AD-Daten
    WinDiff = "c: \\ temp \\ windiff.exe"; // Programm zum Vergleich 2
    DumpFile = "schema.ldf"; // Name der zu speichernden Datei
    DumpFileOld = "schemaOld.ldf"; // Name 2 Dateien zum Vergleich
    WorkingFolder = "c: \\ temp \\"; // Arbeitsordner für temporäre Dateien

    DiffFile = "diff.log"; // Servicedatei für Vergleichsergebnisse
    DiffMessage = "1 Dateien aufgeführt"; // die Zeile, die wir suchen, wenn es keine Dateien gibt

    SpListGuid = "{3D9B5EFB-C0C5-434C-B1DA-61FEA6E9D63B}";
    SpHost = "http: // portal4";
    UseSp = true; // Nachrichten an die Share Point-Liste senden

    // Ende des Einstellungsbereichs

    / ****************************************** *********************
    Code, um sich nur im Falle des tiefen Verständnisses zu ändern, was tun
    Und am wichtigsten, wie du tust !!!!!!!!!
    ************************************************ ******************** /

    Var-Datei, wsh;
    // Objekt für Arbeit erstellen

    Datei = WScript.CreateObject ("Scripting.FileSystemObject");

    Wenn (file.FileExists (WorkingFolder + DumpFileOld))
    File.DeleteFile (WorkingFolder + DumpFileOld);

    Wenn (file.FileExists (WorkingFolder + DumpFile))
    File.MoveFile (WorkingFolder + DumpFile, WorkingFolder + DumpFileOld)

    Wsh = WScript.CreateObject ("WScript.Shell");

    Wsh.Run (DumpCmdLine + "-f" + WorkingFolder + DumpFile, 1,1);
    TrimUnused (WorkingFolder + DumpFile);

    Wenn (file.FileExists (WorkingFolder + DumpFileOld))
    CheckChanges (WorkingFolder + DumpFile, WorkingFolder + DumpFileOld);




    // Überprüfen Sie auf einen Unterschied von 2 Dateien
    Funktion CheckChanges (pathFrom, pathTo)
    {
    Var cmd;
    // WinDiff.Exe output.ldf schemaOld.ldf -Sx logcmd
    Cmd = WinDiff + "" + PfadFrom + "" + PfadTo + "-Sx" + WorkingFolder + DiffFile;
    Wsh.Run (cmd, 1,1);
    ObjFile = file.OpenTextFile (WorkingFolder + DiffFile, 1);
    Var buff = new String ();
    Buff = objFile.ReadAll ();
    ObjFile.Close ();
    Var arr = new Array ();
    Arr = buff.split ("\ r \ n");

    Für (var i = 0; i <arr.length; i ++)
    {
    // Prüfen Sie, ob die Dateien unterschiedlich sind, wenn ja eine Nachricht senden

    Wenn (arr [i] .indexOf (DiffMessage)> - 1)
    {
    Var d = neu Datum ();
    TextBody = "Im Schema erkannte Änderungen" Vergleichszeit: "+ d.toString ();
    SendMessage ();
    }
    }
    }



    // Zeilen mit häufig veränderten Attributen entfernen
    Funktion TrimUnused (Name)
    {
    Var forReading = 1;
    Var Forwriting = 2;
    Var objFSo, objFile;


    ObjFSo = neues ActiveXObject ("Scripting.FileSystemObject");
    ObjFile = objFSo.OpenTextFile (name, ForReading);
    Var strContents = new String ();
    StrContents = objFile.ReadAll ();
    ObjFile.Close ();

    Var arr = new Array ();
    Arr = strContents.split ("\ r \ n");

    ObjFile = objFSo.OpenTextFile (Name, ForWriting);

    Für (var i = 0; i <arr.length; i ++)
    {
    Wenn (arr [i] .indexOf ("lastLogon") == -1) {
    ObjFile.WriteLine (arr [i]);
    }
    }
    ObjFile.Close ();
    }



    // Senden einer Nachricht an eine Adresse Alle Parameter müssen im Abschnitt globale Variablen angegeben werden

    Funktion SendMessage () {

    Wenn (UseSp)
    {
    NewMessage (SpListGuid, SpHost, TextBody);
    Rückkehr;
    }
    Var objEmail = neues ActiveXObject ("CDO.Message");
    ObjEmail.From = MailFrom;
    ObjEmail.To = MailTo;

    ObjEmail.Subject = MailSubject;
    ObjEmail.Textbody = TextBody;
    ObjEmail.MimeFormatted = true;
    ObjEmail.BodyPart.Charset = "windows-1251";
    ObjEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
    ObjEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpHost;
    ObjEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort;
    ObjEmail.Configuration.Fields.Update ();
    ObjEmail.Send ();

    }

    // eine neue Nachricht in der Sharepoint-Liste erstellen
    Funktion NewMessage (list, hostName, message)
    {
    Var Web, req, Batch;
    Web = neues ActiveXObject ("MSXML2.XMLHTTP.3.0");

    Batch = "<Batch ListVersion = '0'> <Methode ID = '1' Cmd = 'Neu'> <Feldname = 'Titel'>" + Nachricht + "</ Feld> </ Methode> </ Batch>" ;

    Var </ ½:::::::::::::::::::::::::::::::::::::::::::::::::::::::: 'Http://www.w3.org/2001/XMLSchema' xmlns: soap = 'http: //schemas.xmlsoap.org/soap/envelope/'> <seife: Körper> <UpdateListItems xmlns = 'http: // Schemas.microsoft.com/sharepoint/soap / '> ";
    Req + = "<listName>" + list + "</ listName>";
    Req + = "<Updates>" + Batch + "</ updates> </ september> </ soap: Körper> </ soap: Envelope>";


    Var r = hostName + "/_vti_bin/Lists.asmx?op=UpdateListItems";
    Web.Open ("POST", r, False);
    Web.setRequestHeader ("Content-Type", "text / xml; charset = utf-8");
    Web.setRequestHeader ("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
    Web.send (req);

    //'WScript.Echo req
    //'WScript.Echo Chr (13) & Chr (10)
    //'WScript.Echo web.responseText

    }





    Skript zum Entfernen von Terminallizenzen auf Kunden, alle 30 Tage:

    'Löscht ggf. den Registrierungsschlüssel, in dem temporäre Lizenzen gespeichert sind, wenn 30 Tage verstrichen sind.
    Option explizit
    Dim iCount, dDat, dReadDat, strPath, strRegKey 'Deklaration von Variablen
    Dim fso, fLogFile, wshSysEnv, wshShell 'Deklaration von Objekten

    DDat = Datum 'das aktuelle Datum erhalten
    Err.clear 'yf nur für den Fall, dass wir den Fehler Stack zu reinigen

    Bei fehleranfälliger nächster 'Nach dieser Fehlermeldung wird nicht angezeigt

    'Erstellen Sie das Shell-Objekt
    Setze wshShell = WScript.CreateObject ("WScript.Shell")
    'Erstellen eines Umgebungsobjekts, das die erforderliche Systemvariable enthält
    Set wshSysEnv = WshShell.Environment ("PROCESS")
    'Wir ziehen die Systemvariable (den Pfad zum Windows-Ordner) und legen sie in eine String-Variable für spätere Verwendung
    StrPath = wshSysEnv ("WINDIR")

    'Erstellen Sie ein Zugriffsobjekt auf das Dateisystem und ein Objekt, um auf die erforderliche Datei zum Lesen zuzugreifen
    Set fso = CreateObject ("Scripting.FileSystemObject")
    Setze fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 1, false)

    'Die Hauptbedingung für das Entfernen oder Deinstallieren des Registrierungszweigs
    If err.number <> 0 dann
    'Durchführen der Prozedur zum Löschen des Registrierungszweigs
    Rufen Sie DelLicense an

    'Geben Sie das letzte Datum für das Löschen der Lizenz in der Protokolldatei ein und löschen Sie den Eintrag darin
    Rufen Sie WriteToLog an
    Sonst
    'Lesen Sie aus der Datei und vergleichen Sie das Datum, an dem die Lizenz zuletzt mit dem aktuellen Datum gelöscht wurde
    DReadDat = CDate (fLogFile.ReadLine ())

    'Muss sein (dDat - dReadDat)
    Wenn (dDat - dReadDat)> 29 Dann
    'Durchführen der Prozedur zum Löschen des Registrierungszweigs
    Rufen Sie DelLicense an

    'Geben Sie das letzte Datum für das Löschen der Lizenz in der Protokolldatei ein und löschen Sie den Eintrag darin
    Rufen Sie WriteToLog an
    Ende Wenn
    Ende Wenn

    "Wir zerstören alle unnötigen mehr Gegenstände
    Set WshShell = Nichts
    Setze wshSysEnv = Nichts
    Set fso = Nichts

    '******************************************* ***********
    "Verfahren
    '******************************************* ***********
    "Lizenzentnahmeverfahren
    Sub DelLicense ()
    'Entfernen Sie das Lizenz-Plug-in zu einem Zeitpunkt
    Bei fehlersuchlauf als nächstes
    Err.clear

    Für iCount = 0 bis 9
    StrRegKey = "HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store \ LICENSE00" & iCount & "\"
    WshShell.RegDelete (strRegKey)

    If err.number <> 0 dann
    Err.clear
    Ende Wenn
    Weiter

    'Löschen der Unterschlüssel der Hauptpartition
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store")
    If err.number <> 0 dann err.clear

    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ HardwareID")
    If err.number <> 0 dann err.clear

    'Löschen Sie die Hauptpartition
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing")
    If err.number <> 0 dann err.clear

    End Sub

    'Die Prozedur zum Aufzeichnen des Datums, zu dem die Lizenz zuletzt in eine Datei gelöscht wurde
    Sub WriteToLog ()
    Err.clear

    'Erstellen eines Objekts zum Zugriff auf die gewünschte Datei zum Schreiben mit Überschreiben früherer Einträge
    Set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 2, true)

    "Wir notieren das Datum der Reinigung der Registrierung
    FLogFile.Write (Datum)

    Setze fLogFile = nichts 'zerstöre das Objekt
    End Sub





    Das Skript zur Bekämpfung von mail.ru-agent:

    Const DeleteReadOnly = TRUE

    Set WshShell = WScript.CreateObject ("Wscript.Shell")
    Set WshSysEnv = WshShell.Environment ("Prozess")

    Setze objFSO = CreateObject ("Scripting.FileSystemObject")
    AgentFile = WshSysEnv ("userprofile") + "\ Anwendungsdaten \ Mail.Ru \ Agent \ magent.exe"


    Wenn objFSO.FileExists (agentFile) Dann

    ObjFSO.DeleteFile (agentFile), DeleteReadOnly


    If err.number = 0 dann
    Set objEmail = CreateObject ("CDO.Message")

    ObjEmail.From = "killer@kontora.ru"
    ObjEmail.To = "admin@kontora.ru"
    ObjEmail.Subject = "Mail.ru-Agent"
    ObjEmail.Textbody = "Sehr geehrte Sir-System-Administratoren, ich informiere Sie, dass der Feind mail.ru Agent aus" + WshSysEnv ("userprofile") zerstört wird
    ObjEmail.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    ObjEmail.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
    "Ip Mail Server"
    ObjEmail.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    ObjEmail.Configuration.Fields.Update
    ObjEmail.Send

    Beenden, wenn

    Beenden, wenn





    Das Skript macht eine Sicherung des Systems und gießt es in das ftp:

    StrComputer = "."
    Set WshShell = WScript.CreateObject ("WScript.Shell")
    StrCommand = "C: \ WINDOWS \ system32 \ ntbackup.exe backup @C: \ cmd \ Back-UP-Drive-C.bks / a / v: nein / r: nein / rs: nein / hc: aus / m normal / J Back-UP-Drive-C / l: s / f D: \ Back-Up \ Backup-Laufwerk-c.bkf "
    WshShell.Run Strcommand, 1, true

    Set objWMIService = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
    Setze colItems = objWMIService.ExecQuery ("Select * from Win32_LocalTime")

    Für jedes objItem in colItems
    StrCommand = "C: \ Arch \ 7z.exe ein D: \ Back-Up \ Backup-dc-srv-01-DayOf-Woche -" & objItem.DayOfWeek & "7z D: \ Back-Up \ * Bkf -t7z -m0 = BCJ2 -m1 = LZMA: d23 -m2 = LZMA: d19 -m3 = LZMA: d10M -m0: 1 -1002: 2 -1062: 3 "
    Weiter
    WshShell.Run Strcommand, 1, true
    StrCommand = "ftp -s: C: \ CMD \ ctp-command.txt"
    WshShell.Run Strcommand, 1, true





    Das Skript blockiert / löscht Benutzer in AD, nimmt eine Liste ihres Namens aus der angegebenen Datei und benachrichtigt den Administrator per Post über die Ergebnisse:

    Dim Mlogins (9000), MAdspath (9000), MFullName (9000)
    Dim objFileSystem, objInputFileFromKardy, strData
    Setze objFSO = CreateObject ("Scripting.FileSystemObject")
    Const OPEN_FILE_FOR_READING = 1

    'Domäne angeben
    Const strDomainName = "<Domainname zB domain.com>"
    "Wir geben OU in AD an, in dem wir suchen werden
    Const strStartOU = "Domänenbenutzer"
    StrDomainDN = "DC =" & Ersetzen (strDomainName, ".", ", DC =")

    '--------------------- Daten abrufen ---------------------
    Set objConnection = CreateObject ("ADODB.Connection")
    ObjConnection.Open "Provider = ADsDSOObject;"
    Set objCommand = CreateObject ("ADODB.Command")
    ObjCommand.ActiveConnection = objConnection
    ObjCommand.CommandText = "<LDAP: // OU =" & strStartOU & "," & strDomainDN & ">; (& (objectCategory = person) (objectClass = user)); ADsPath; subtree"
    ObjCommand.Properties ("Seitengröße") = 4000

    Set objRecordSet = objCommand.Execute


    '------ Indexierung --------
    Index = 0
    Während nicht objRecordset.EOF
    StrADsPath = objRecordset.Fields ("ADsPath")
    Set objUser = GetObject (strADsPath)
    MFullName (index) = objUser.DisplayName & ""
    Mlogins (Index) = objUser.sAMAccountName
    MAdspath (index) = strADsPath
    Index = Index + 1
    ObjRecordset.MoveNext

    Wend
    ObjConnection.Schließen

    Index = index-1
    Maxindex = Index

    'Der Pfad zu der Datei, in der die Liste der Namen der Personen gespeichert ist. Kontoaufzeichnungen, die Sie öffnen / schließen müssen
    StrFileOfFiried = "d: \ file_of_firied.txt"

    Set objFileSystem = CreateObject ("Scripting.fileSystemObject")
    Set objInputFileFromKardy = objFileSystem.OpenTextFile (strFileOfFiried, OPEN_FILE_FOR_READING)
    "Wir fahren den Inhalt der Datei in ein Array
    InputDataFromFiried = Split (objInputFileFromKardy.ReadAll, vbNewline)
    'Sende die Ergebnislisten zurück
    UserDisables = ""
    UserUpdated = ""
    UserNoFound = ""
    UserDuplicated = ""
    Ii = 0


    Für jede strFULL In inputDataFromFiried
    Wenn Len (strFULL)> 5 dann ist
    'Reset der Zähler gefunden Matching
    E = 0
    '1. Feld: aus der Zeile auswählen
    StrFIO = links (strFULL, InStr (strFULL, ";") - 1)
    "Wir brechen auseinander?
    Familia = Left (strFIO, (Instr (strFIO, "") -1))
    N = Trim (mid (strFIO, Instr (strFIO, ""))))
    Imya = Links (N, (Instr (N, ") -1))
    Otchestvo = Trim (Mitte (N, Instr (N, ""))))
    "Wir sammeln nach Teilen Name
    StrFIO = Familia & "" & Imya & "" & Otchestvo

    Index = maxindex
    Während Index> 1

    "Wir teilen uns auf Teile den Namen in AD

    AdFamilia = ""
    AdImya = ""
    AdOtchestvo = ""
    AdFamilia = Left (MFullName (Index), (Instr (MFullName (Index), "") -1))
    Wenn Len (Trim (mid (MFullName (Index), Instr (MFullName (Index), "")))))> 1 dann
    AdN = Trim (Mitte (MFullName (Index), Instr (MFullName (Index), ""))))
    Wenn Len (links (AdN, (Instr (AdN, "))))> 1 dann
    AdImya = Left (AdN, (Instr (AdN, "") -1))
    Wenn Len (Trim (Mitte (AdN, Instr (AdN, "))))> 1 dann
    AdOtchestvo = Trim (Mitte (AdN, Instr (AdN, ""))))
    Beenden, wenn
    Beenden, wenn

    Beenden, wenn


    "Wir sammeln nach Teilen Name
    AdstrFIO = AdFamilia & "" & AdImya & "" & AdOtchestvo
    AdstrFIO1 = AdImya & "" & AdOtchestvo & "" & AdFamilia
    AdstrFIO2 = AdImya & "" & AdFamilia & "" & AdOtchestvo
    'Wscript.Echo AdstrFIO

    Wenn (StrFIO = AdstrFIO) oder (StrFIO = AdstrFIO1) oder (StrFIO = AdstrFIO2) dann
    E = e + 1
    Mindex = index
    Beenden, wenn
    Index = index-1
    Wend


    Wenn e = 1 dann
    "Wir blockieren das Login im AD
    LockUser (Mlogins (Mindex))
    UserDisables = UserDisables & "User:" & strFIO & "ist deaktiviert" & vbCrLf
    Beenden, wenn
    Nicht blockieren / öffnen, weil. Wir fanden mehrere identische Namen
    Wenn e> 1 dann
    UserNoFound = UserNoFound & "User:" & StrFIO & "wird mehr als 1 Mal gefunden" & vbCrLf
    Beenden, wenn
    Nicht blockieren / öffnen, weil. Benutzer nicht gefunden
    Ist e = 0 dann
    UserDuplicated = UserDuplicated & "User:" & strFIO & "wird nicht gefunden" & vbCrLf
    Beenden, wenn

    Beenden, wenn


    Weiter






    "Wenn es irgendein Ergebnis gibt, dann
    Wenn (len (UserDisables) + len (UserNoFound) + len (UserDuplicated)> 10) dann
    "Post senden

    Set objNetwork = CreateObject ("Wscript.Network")
    ObjComputerName = objNetwork.ComputerName
    ObjUserName = objNetwork.UserName
    Set objMessage = CreateObject ("CDO.Message")
    ObjMessage.From = "<E-Mail, von wem die Mail gesendet wird>"
    ObjMessage.To = "<E-Mail an wen die Mail gesendet wird>"
    ObjMessage.Subject = "Gegenstand des Briefes"

    "Wir setzen die Kodierung
    ObjMessage.bodypart.charset = "koi8-r"
    ObjMessage.TextBody = UserDisables & vbCrLf & UserNoFound & vbCrLf & UserDuplicated
    ObjMessage.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Name oder IP von Remote SMTP Server
    ObjMessage.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<smtp server address>"
    'Server-Port (typischerweise 25)
    ObjMessage.Configuration.Fields.Item _
    ("Http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    ObjMessage.Configuration.Fields.Update
    '== Remote-SMTP-Server-Konfigurationsabschnitt beenden ==

    Objemessage.Send


    Beenden, wenn



    ObjInputFileFromKardy.Schließen
    Set objFileSystem = Nichts
    Sub LockUser (strText)
    'In dieser Zeile, TRUE ist der Benutzer deaktiviert, FALSE - öffnet den Benutzer
    StrDisableAccount = TRUE

    StrUserLogin = strText
    Set objUser = GetObject ("WinNT: // <Domain> /" & strUserLogin & ", Benutzer")


    Wenn strDisableAccount = TRUE dann ist
    ObjUser.AccountDisabled = strDisableAccount
    ObjUser.Description = "Account ist deaktiviert wegen des Brennens" & "at" & "" & Date ()
    ObjUser.SetInfo
    Beenden, wenn

    Wenn strDisableAccount = FALSE dann ist
    ObjUser.AccountDisabled = strDisableAccount
    ObjUser.Description = "Account wird durch Skript geöffnet" & "at" & "" & Date ()
    ObjUser.SetInfo
    Beenden, wenn


    End Sub





    Dieses Skript wurde entwickelt, um eine Datei in benutzerdefinierte Roaming-Profile zu kopieren:

    // ******************************************* *****************************
    // JScript 2004 Shs
    // Dieses Skript dient zum Kopieren einer Datei in Benutzer-Roaming-Profile
    // (Verknüpfung im Benutzermenü hinzufügen)
    // ******************************************* ********************************
    //
    //
    // ******************************************* *****************************
    // Die rekursive Funktion des Übergangs über alle Unterverzeichnisse ausgehend von dem gegebenen (PolFldr)
    // und kopiere die angegebene Datei (ScriptName) in die angegebenen Ordner (FldrName)
    // ******************************************* ********************************
    Funktion LoopSubFolders (PolFldr, DeepCount)
    {
    Var SubFolders, // Sammlung von Systemrichtlinien-Podcastern
    FsoPolFldr, // Objekt für den Zugriff auf den Ordner
    CurFldr; // Der aktuelle Ordner

    DeepCount ++;
    //WScript.Echo(DeepCount);
    Wenn (DeepCount <DeepLimit)
    {
    FsoPolFldr = FSO.GetFolder (PolFldr);
    // Holen Sie sich die Sammlung von Unterverzeichnissen des Systemrichtlinienkatalogs
    SubFolders = neuer Enumerator (fsoPolFldr.SubFolders);
    //
    Für (;! SubFolders.atEnd (); SubFolders.moveNext ())
    {
    CurFldr = SubFolders.item ();
    Wenn (CurFldr.Name == FldrName)
    {
    Versuche {
    WScript.Echo (CurFldr.Path + "\\" + ScriptName);
    //WScript.Echo(Path2Scripts + "\\" + ScriptName);
    FSO.CopyFile (Path2Scripts + "\\" + ScriptName, CurFldr.Path + "\\" + ScriptName, true)
    }
    Fang (e)
    {Umgehen mögliche Fehler
    Var Msg;
    Wenn (e! = 0) Msg = "Error -" + e.description
    Else Msg = "Ok";
    WScript.Echo (Msg);
    }
    }
    // rekursiver Anruf
    LoopSubFolders (CurFldr, DeepCount);
    } // Ende für
    } // Ende if
    }
    // ******************************************* *********************************

    //
    //


    // ******************************************* *********************************

    // Stopper
    // ******************************************* *********************************

    // Hier ist der Code, der von den Kommandozeilenparametern kommt
    // 1) der Name der verteilten Datei
    // 2) der Name des Verzeichnisses in jedem Profil, auf das die verteilte Datei kopiert wird
    // ******************************************* *********************************

    Var ScriptName = "Aktualisieren der Arbeitsmenü.lnk",
    FldrName = "Hauptmenü"; // Der Name des gewünschten Unterordners im Profil (wir kopieren die Shortcut-Datei hinein)
    // ******************************************* *********************************
    **




    // ******************************************* *********************************
    *
    // Globale Variablen deklarieren
    // ******************************************* *********************************
    *
    Var FSO, // FileSystemObject
    Path2Scripts, // Der Pfad zu der zu verteilenden Datei (es wird davon ausgegangen, dass sich die Dateien im selben Ordner befinden wie diese Datei)
    DeepCount, // Tiefe des Rekursionszählers
    DeepLimit, // Begrenzung der Tiefe der Rekursion
    PolF; // Root, aus dem die Suche und Verteilung von Dateien auf den zugrunde liegenden Ordnern beginnt
    // ******************************************* *********************************
    *
    PolF = "\\\\ DC \\ UserFolders \\ OZI"; ////
    // Erstellen Sie das FileSystemObject;
    FSO = WScript.CreateObject ("Scripting.FileSystemObject");
    DeepCount = 0;
    Path2Scripts = FSO.GetParentFolderName (FSO.GetFile (WScript.ScriptFullName));
    // Begrenzt die Tiefe der rekursiven Anrufe
    DeepLimit = 4;
    LoopSubFolders (PolF, DeepCount);





    Inventar alle Maschinen in der Domain:

    Dim strclass, objAD, obj
    Dim invdate
    Dim constmb, constgb, sizegb
    Dim compname, temp, compad
    Constmb = 1048576
    Constgb = 1073741824
    Strclass = array ("win32_ComputerSystem", "win32_bios", "win32_processor", _
    "Win32_diskdrive", "win32_videocontroller", "win32_NetworkAdapter", _
    "Win32_sounddevice", "win32_SCSIController", "win32_printer")

    Set objAD = getobject ("LDAP: // CN = Computer, DC = aaa, DC = bbb, DC = ccc")
    ObjAD.filter = array ("computer")
    Bei fehlersuchlauf als nächstes
    Für jeden obj in objAD
    CompAD = rechts (obj.name, len (obj.name) -3)
    Invdate = Datum
    Temp = "<html>" + chr (10) + "Aufnahmedatum:" & invdate & "<table>" + chr (10)
    Compname = ""
    'Bei fehlerfortfuhr als nächstes
    Set objWMIService = GetObject ("winmgmts: //" & CompAD & "/ root \ cimv2")
    I = 0
    S = 0
    D = 0
    Q = 0
    'Sizegb = ""
    Für a = 0 bis 8
    Set colitems = objwmiservice.instanzen von (strclass (a))
    Für jedes objitem in colitems
    Wählen Sie den Fall a
    Fall 0
    Temp = temp + "<tr> <td>"
    Temp = temp + "Computername" + "</ td> <td>" + objitem.name + "</ td>" + chr (10)
    Temp = temp + "</ tr>" + chr (10)
    Temp = temp + "<tr> <td>"
    Temp + temp + "RAM +" </ td> <td> "+ cstr (runde (objitem.totalphysicalmemory / constmb)) +" MB </ td> "+ chr (10)
    Temp = temp + "</ tr>" + chr (10)
    Temp = temp + "<tr> <td>"
    Temp = temp + "Computermodell" + "</ td> <td>" + objitem.model + "</ td>" + chr (10)
    Temp = temp + "</ tr>" + chr (10)
    Compname = objitem.name
    Fall 1
    Temp = temp + "<tr> <td>"
    Temp = Temp + "</ td>" + chr (10)
    Temp = temp + "</ tr>" + chr (10)
    Temp = temp + "<tr> <td>"
    Tempo + temp + "BIOS" + "</ td> <td>" + objitem.caption + "</ td>" + chr (10) + "<td>" + chr (10) + "</ td>"
    Temp = temp + "</ tr>" + chr (10)
    Fall 2
    S = s + 1
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp. + + + </ Td> "+ chr (10) +" <td> "+ objitem.name +" Frequenz "+ cstr (objitem.CurrentClockSpeed) + chr (10) +" </ Td> "
    Temp = temp + "</ tr>" + chr (10)
    Fall 3
    I = i + 1
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Wenn objitem.size> 0 dann '= nill dann
    Sizegb = cstr (runde (objitem.size / constgb, 2))
    Sonst
    Sizegb = cstr (0)
    Beenden, wenn
    Temp = temp + "Festplatte" + cstr (i) + "</ td>" + chr (10) + "<td>" + objitem.model + "" sizegb + "GB </ td>" + chr 10)
    Temp = temp + "</ tr>" + chr (10)
    Fall 4
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp = temp + "Video-Controller" + "</ td>" + chr (10) + "<td>" + objitem.caption + chr (10) + "</ td>"
    Temp = temp + "</ tr>" + chr (10)
    Fall 5
    Wenn objitem.adaptertypeid = 0 und objitem.netconnectionstatus = 2 dann
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp = temp + "Netzwerkadapter" + "</ td>" + chr (10)
    Temp = temp + "<td>" + objitem.name + chr (10) + "</ td>"
    Temp = temp + "</ tr>" + chr (10)
    Beenden, wenn
    Fall 6
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp = Temp + "Soundkarte" + "</ td>" + chr (10)
    Temp = temp + "<td>" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
    Fall 7
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp = temp + "SCSI-Adapter" + "</ td>" + chr (10)
    Temp = temp + "<td>" + objitem.manufacturer + "" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
    Fall 8
    D = d + 1
    Temp = temp + "<tr>" + chr (10) + "<td>"
    Temp = temp + "drucker" + cstr (d) + "</ td>" + chr (10) + "<td>" + objitem.name + chr (10) + "</ td>"
    Temp = temp + "</ tr>" + chr (10)
    Ende wählen
    Weiter
    Weiter
    "Der letzte Teil
    Temp = temp + "</ table> </ html>"
    'Eine Datei schreiben
    Dim fso, tf
    Set fso = CreateObject ("Scripting.FileSystemObject")
    Setze tf = fso.CreateTextFile ("\\ servak ​​\ comp" & compname & "Htm", True)
    Tf.Write (temp)
    Tf.Close
    Weiter





    Bestimmen, wann ein Konto abläuft (gibt das Gültigkeitsdatum für ein Benutzerkonto zurück):

    Auf Fehler Wiederaufnahme Weiter
    Set objUser = GetObject _
    ("LDAP: // cn = myerken, ou = Management, dc = fabrikam, dc = com")

    DtmAccountExpiration = objUser.AccountExpirationDate

    Wenn err.number = -2147467259 Oder _
    DtmAccountExpiration = "1/1/1970" Dann
    WScript.echo "Kein Kontoablauf angegeben"
    Sonst
    WScript.echo "Kontoablauf:" & _
    ObjUser.AccountExpirationDate
    Ende Wenn





    Ermitteln, wann ein Benutzerkonto abläuft (Berichtet das Datum, an dem das MyerKen Active Directory-Benutzerkonto abgelaufen ist):
      Auf Fehler Wiederaufnahme Weiter 
    Set objUser = GetObject _
    ("LDAP: // cn = MyerKen, ou = Management, dc = NA, dc = fabrikam, dc = com")
    DtmAccountExpiration = objUser.AccountExpirationDate

    Wenn Err.Number = -2147467259 Oder dtmAccountExpiration = "1/1/1970" Dann
    WScript.Echo "Kein Kontoablauf angegeben"
    Sonst
    WScript.Echo "Kontoablauf:" & objUser.AccountExpirationDate
    Ende Wenn





    Das Skript rekursiv stellt das Attribut "Benutzer muss das Passwort bei der nächsten Anmeldung ändern" für alle Benutzer der Domain: PS Für die korrekte Operation ist es notwendig, den Domainnamen in der Variablen strMyDomain aus der LDAP-Sicht zu definieren - d.h. Ersetzen Sie alle Punkte durch "DC =". So wird die Domain argo.com in DC = argo, DC = com in die Variable strMyOU umgewandelt. Es ist notwendig, den Namen Organization Unit zu setzen, dessen Benutzer der Prozedur zum Ändern des Passworts unterzogen werden müssen.

    Dim strMyOU
    Dim strMyDomain

    Dim objOU, objUser
    Dim strContainer, strLastUser

    StrMyOU = "argo"
    StrMyDomain = "DC = argo, DC = com"

    Sub recurs (ou)
    StrContainer = "OU =" + ou + "," + strMyDomain "
    Set objOU = GetObject ("LDAP: //" & strContainer)
    Für jeden objUser in objOU
    StrLastUser = objUser.Get ("name")
    Wenn objUser.Class = "organizationalUnit" Dann
    Recurs (strLastUser + ", OU =" + ou)
    Elseif objUser.Class = "user" Dann
    ObjUser.Put "pwdLastSet", 0
    ObjUser.SetInfo
    Beenden, wenn
    Weiter
    End Sub

    Wiederholt strMyOU

    WScript.Quit





    Erhalten der SID (s) eines Computers von AD:

    Auf Fehler Wiederaufnahme Weiter
    Dim Tmp, x, b, Sid
    Set objSysInfo = CreateObject ("ADSystemInfo")
    StrComputerDN = objSysInfo.ComputerName
    Set objCmp = GetObject ("LDAP: //" & strComputerDN)
    Sid = objCmp.objectSID
    GSID = "S-1-5 -" & Konvertieren (16,19) & "-" & Konvertieren (12,15) & "-" & Konvertieren (8,11) & "-" & Konvertieren (4,7) & "-" & Konvertieren (0,3)
    Set objGroup = Nichts

    Funktion konvertieren (u, l)
    Tmp = ""
    Für x = UBound (Sid) -u zu UBound (Sid) -l Schritt -1
    B = AscB (MidB (SID, x + 1))
    Tmp = Tmp & Hex (b \ 16) & Hex (b und 15)
    Weiter
    Convert = Clng ("& H" & Tmp)
    Endfunktion
    Wscript.echo (gSID)





    Suchen nach Konten in ActiveDirectory mit abgelaufenen Passwörtern: Wenn sich der NetBIOS-Domänenname von DNS zum ersten Punkt unterscheidet, setzen Sie statt des Strings dom = getObject ("LDAP: //" & DC) .get ("Name") den gewünschten Wert

    Ein Fehler wird als nächstes fortgesetzt

    DC = getObject ("LDAP: // RootDSE") .get ("defaultNamingContext")
    Dom = getObject ("LDAP: //" & DC) .get ("Name")
    PwAge = getObject ("WinNT: //" & dom) .get ("MaxPasswordAge") / 86400

    Set objConnection = createObject ("ADODB.Connection")
    ObjConnection.open "Provider = ADsDSOObject;"

    Set objCmd = createObject ("ADODB.Command")
    ObjCmd.ActiveConnection = objConnection

    '- Befehl zum Suchen von Computerkonten
    'Cmd = "<LDAP: //" & DC & ">; (objectClass = Computer); distinguishedName, samAccountName; Teilbaum"

    '- Befehl für die Suche nach Benutzerkonten
    Cmd = "<LDAP: //" & DC & ">; (objectCategory = Person); distinguishedName, samAccountName; subtree"

    ObjCmd.CommandText = cmd

    set col=objCmd.execute

    if col.recordCount>0 then
    col.moveFirst
    while not col.EOF
    dn=col.fields(0).value
    acc=col.fields(1).value

    set obj=getObject("LDAP://" & dn)
    accCtrl=obj.get("userAccountControl")

    if (accCtrl and &h10000)=0 then
    pwChg=obj.PasswordLastChanged
    if (Err.Number<>0) then
    E=CStr(Err.Number) & " " & Err.Description
    ' WScript.echo acc & space(16-len(acc)) & " - Error : " & E
    Err.clear
    else
    if (now-pwChg)>pwAge then
    WScript.echo acc & space(16-len(acc)) & " - Expired : " & (pwChg+pwAge)
    else
    ' WScript.echo acc & space(16-len(acc)) & " - Expire on : " & (pwChg+pwAge)
    end if
    end if
    else
    ' WScript.echo acc & space(16-len(acc)) & " - Never Expire"
    end if
    col.moveNext
    wend
    end If

    objConnection.close





    Скрипт опрашивает компьютеры домена на предмет того, какой пользователь залогинен в данный момент на каждом компьютере :

    On Error Resume Next

    Const ADS_SCOPE_SUBTREE = 2

    Set objRoot = GetObject("LDAP://RootDSE")
    strDomainName = objRoot.Get("DefaultNamingContext")
    Set objRoot = Nothing

    strComputer = ""
    Dim fso
    Dim file

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.OpenTextFile ("logged_user_list.txt", 2, True)
    Set objShell = CreateObject("WScript.Shell")

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://" & strDomainName & "'" _
    & "Where objectClass ='computer'"
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute

    & #39;****************************************************************************
    ******

    objRecordSet.MoveFirst

    Wscript.Echo "Processing information. This might take several minutes."

    Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value

    ' Проверяем доступность компьютера с помощью команды PING
    ' и анализа выходного потока

    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strComputer)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)

    ' Если компьютер отвечает, подключаемся к его WMI

    If InStr(strPingResults, "ttl=") Then
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colComputer = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")

    ' Выводим список залогиненных пользователей в файл и на экран

    For Each objComputer in colComputer
    Wscript.Echo "Logged-on " &strComputer & " user: " & objComputer.UserName
    file.WriteLine("Logged-on " &strComputer & " user: " & objComputer.UserName)
    Weiter
    objRecordSet.MoveNext

    ' Если компьютер не отвечает - выводим сообщение и перемещаемся к следующему

    Else
    WScript.Echo(strComputer & ": Не отвечает...")
    objRecordSet.MoveNext
    End If
    Loop





    Этот скрипт просматривает системный журнал Безопасность и если обнаружит в нём запись об изменении настроек браузера, то уведомит об этом :

    On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{"{impersonationLevel=impersonate,(Security)}!\\" & strComputer & _
    "\root\cimv2")
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA " _
    & "'Win32_NTLogEvent' AND TargetInstance.EventCode = '560' AND " _
    & "TargetInstance.Logfile = 'Security' GROUP WITHIN 2")
    Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    strAlertToSend = "Internet Explorer security settings have been " & _
    "changed."
    Wscript.Echo strAlertToSend
    Loop





    Скрипт ищет по всем контроллерам пользователей, которые не логинились уже более 90 дней и дизейблит их. После чего скидывает в файл их имена в форме Distinguished Name:

    Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery
    Dim adoRecordset, objDC
    Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()
    Dim strDN, dtmDate, objDate, lngDate, objList, strUser
    Dim strBase, strFilter, strAttributes, lngHigh, lngLow
    Dim intUAC, objCurrentUser

    ' Использование объектов словаря чтоб потом узнать последние логоны пользователя.
    Set objList = CreateObject("Scripting.Dictionary")
    objList.CompareMode = vbTextCompare

    ' Получение местного времени с реестра.
    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)
    Weiter
    End If

    ' Получение конфигурациы и доменов из объектов RootDSE.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strConfig = objRootDSE.Get("configurationNamingContext")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")

    ' Использование ADO чтобы искать в Active Directory ObjectClass nTDSDSA.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection

    strBase = "<LDAP://" & strConfig & ">"
    strFilter = "(objectClass=nTDSDSA)"
    strAttributes = "AdsPath"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 60
    adoCommand.Properties("Cache Results") = False

    Set adoRecordset = adoCommand.Execute


    k = 0
    Do Until adoRecordset.EOF
    Set objDC = _
    GetObject(GetObject(adoRecordset.Fields("AdsPath")).Parent)
    ReDim Preserve arrstrDCs(k)
    arrstrDCs(k) = objDC.DNSHostName
    k = k + 1
    adoRecordset.MoveNext
    Loop
    adoRecordset.Close

    ' Получение атрибута последнего логона для каждого пользователя в контроллерах домена.
    For k = 0 To Ubound(arrstrDCs)
    strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"
    strFilter = "(&(objectCategory=person)(objectClass=user))"
    strAttributes = "distinguishedName,lastLogon"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes _
    & ";subtree"
    adoCommand.CommandText = strQuery
    On Error Resume Next
    Set adoRecordset = adoCommand.Execute
    If (Err.Number <> 0) Then
    On Error GoTo 0
    Wscript.Echo "Контроллер домена MGSM.RU не найден: " & arrstrDCs(k)
    Else
    On Error GoTo 0
    Do Until adoRecordset.EOF
    strDN = adoRecordset.Fields("distinguishedName")
    lngDate = adoRecordset.Fields("lastLogon")
    On Error Resume Next
    Set objDate = lngDate
    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
    If (objList.Exists(strDN) = True) Then
    If (dtmDate > objList(strDN)) Then
    objList.Item(strDN) = dtmDate
    End If
    Else
    objList.Add strDN, dtmDate
    End If
    adoRecordset.MoveNext
    Loop
    adoRecordset.Close
    End If
    Weiter

    ' Создание логов
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objScriptFile = objFSO.OpenTextFile("c:\scripts\Account_lockout.vbs", _
    ForReading)
    Set objCommentFile = objFSO.OpenTextFile("c:\scripts\Lockedout_users.txt", _
    ForWriting, TRUE)

    'Сравнение дат

    dblCurrentdate = Cdbl(date)
    Const ADS_UF_ACCOUNTDISABLE = 2
    Const ForReading = 1
    Const ForWriting = 2

    For Each strUser In objList.Keys

    dblUserdate = Cdbl(objList.Item(strUser))

    If (dblCurrentdate - dblUserdate > 90) Then



    Set objCurrentUser = GetObject ("LDAP://" & strUser & "")
    intUAC = objCurrentUser.Get("userAccountControl")

    objCurrentUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
    objCurrentUser.SetInfo

    objCommentFile.Write strUser & VbCrLf

    ' Wscript.Echo strUser & " заблокирован"



    Else

    ' Wscript.Echo strUser & " недавно логинился"



    End if


    Weiter

    'Закрытие логов
    objScriptFile.Close
    objCommentFile.Close


    ' Очистка.
    adoConnection.Close
    Set objRootDSE = Nothing
    Set adoConnection = Nothing
    Set adoCommand = Nothing
    Set adoRecordset = Nothing
    Set objDC = Nothing
    Set objDate = Nothing
    Set objList = Nothing
    Set objShell = Nothing
    Set objCurrentUser = Nothing





    командный файл (closefl.bat ) закрывает все файлы, открытые пользователями в сети на вашем компьютере:
    if exist d:\files.txt del d:\files.txt
    net file > d:\files.txt
    for /f "skip=5 tokens=1" %%i in (d:\files.txt) do net file %%i /close
    del d:\files.txt
    
    





    Скрипт для уведомления пользователя об окончании действия учетки в домене за 10 дней: строке - dtmDaysToExpire > 10 ). Бросать в логон. В 5-й и 7-й строке подставить свои значения для домена и подразделения.

    ' Script name: WarnUserAboutAccountExpiration.vbs
    ' Created by Alex_GR - 26/05/2008

    'Указываем домен
    Const strDomainName="domen.com"
    'Указываем OU в AD, внутри которой мы будем искать
    Const strStartOU="Domain Users"
    strDomainDN="DC="&Replace(strDomainName,".",",DC=")

    On Error Resume Next
    'Option Explicit
    Dim strUserName, oNetwork, aConnection, aCommand, aResult, strDN, dtmAccountExpiration, dtmDaysToExpire, oShell
    Set oNetwork = CreateObject("Wscript.network")
    Set oShell = CreateObject("Wscript.shell")
    strUserName = oNetwork.UserName
    Set aConnection = CreateObject("ADODB.Connection")
    Set aCommand = CreateObject("ADODB.Command")
    aConnection.Provider = "ADsDSOObject"
    aConnection.Open
    aCommand.ActiveConnection = aConnection
    aCommand.CommandText="<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=User)(samAccountName=" & strUserName & "));distinguishedName;subTree"
    Set aResult = aCommand.Execute()
    strDN = aResult.Fields("distinguishedName")
    Set objUser = GetObject("LDAP://" & strDN)
    dtmAccountExpiration = objUser.AccountExpirationDate
    dtmDaysToExpire = DateDiff("d", Now, dtmAccountExpiration)
    If Err.Number = -2147467259 Or dtmAccountExpiration = "1/1/1970" Or dtmAccountExpiration = "01/01/1601 03:00:00" Or dtmAccountExpiration = "01.01.1601 03:00:00" Or dtmAccountExpiration = "1.1.1970" Or dtmDaysToExpire > 10 Then
    ' Можно выводить другое сообщение, если найдено соответствие условию
    ' MsgBox "Всe good "
    Else
    oShell.Popup "До окончания испытательного срока осталось " & dtmDaysToExpire & " дней!" & vbCrLf & _
    "Учётная запись действительна до " & dtmAccountExpiration & vbCrLf & _
    "Просьба об этом уведомить Вашего руководителя.", 60, "Уведомление от ИТ Департамента", 48+0
    End If





    Скрипт для поиска в активном каталоге пользователей с ограниченым сроком действия учётки и экспорта в файл: В 5-й и 7-й строке подставить свои значения для домена и подразделения.

    ' Script name: UserAccountExpirationDate.vbs
    ' Created by Alex_GR - 12/05/2008

    'Указываем домен
    Const strDomainName="domen.com"
    'Указываем OU в AD, внутри которой мы будем искать
    Const strStartOU="Domain Users"
    strDomainDN="DC="&Replace(strDomainName,".",",DC=")

    ---------------------Получение данных--------------------
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
    objCommand.Properties("Page Size")=9000

    Set objRecordSet = objCommand.Execute

    Const ForAppending = 2
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile ("c:\UserAccountExpirationDate.txt", ForAppending, True)

    '------Индексирование --------
    While Not objRecordset.EOF
    strADsPath = objRecordset.Fields("ADsPath")
    Set objUser = GetObject(strADsPath)

    dtmAccountExpiration = objUser.AccountExpirationDate

    If err.number = -2147467259 Or dtmAccountExpiration = "01/01/1970" Or dtmAccountExpiration = "01/01/1601 03:00:00" Or dtmAccountExpiration = "01.01.1601 03:00:00" Or dtmAccountExpiration = "01.01.1970" Then
    'Вывод сообщением
    'WScript.echo ""

    'запись в файл пустого значения
    objTextFile.Write ""
    objRecordset.MoveNext

    Else
    'Вывод сообщением
    ' WScript.echo objUser.displayName & " - учётка действительна до: " & objUser.AccountExpirationDate

    'Запись в файл
    objTextFile.WriteLine objUser.displayName & " - учётка действительна до: " & objUser.AccountExpirationDate
    objRecordset.MoveNext
    End If

    Wend
    objConnection.Close
    WScript.echo "Экспорт закончен, файл создан - C:\UserAccountExpirationDate.txt"





    Скрипт який перевіряеє нових юзерів і відсилає ім лист з вказаним текстом: (переверяє з тією ж періодичністю з якою виконуеться скрипт тобто та яка вказана в Scheduled Tasks)

    'Created by Mike Ruman 8/13/05
    'Sends an email to accounts created today.

    Dim StrDate, CurrentUTC

    'Create the current date and time stamp for query for day before last
    CurrentUTC = DatePart("yyyy", Date)
    'now add Month in mm if only M add leading 0
    if DatePart("m" , Now) < 10 then
    CurrentUTC = CurrentUTC & 0 & DatePart("m" , Now)
    else
    CurrentUTC = CurrentUTC & DatePart("m" , Now)
    end if
    'now add Day in dd if only d add leading 0
    if DatePart("d" , Now) < 10 then
    'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now - X) where X = # of days

    CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now)
    else
    'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & DatePart("d" , Now - X) where X = # of days
    CurrentUTC = CurrentUTC & DatePart("d" , Now)
    end if
    ' Tag hour, minute, second on
    strDate = CurrentUTC&"000001.0Z"

    'Create AD Connection
    Set oConnection1 = CreateObject("ADODB.Connection")
    Set oCommand1 = CreateObject("ADODB.Command")
    oConnection1.Provider = "ADsDSOObject" ' This is the ADSI OLE-DB provider name
    oConnection1.Open "Active Directory Provider"
    ' Create a command object for this connection.
    Set oCommand1.ActiveConnection = oConnection1
    'Set Query definition
    ' тут задаем доменные параметры берем из AD
    oCommand1.CommandText = "select mail from 'LDAP://DC=it, DC=local' WHERE objectCategory='Person' AND objectClass='user'AND msExchHideFromAddressLists<>'True' AND whenCreated>='" & strDate & "'"

    oCommand1.Properties("Page Size") = 30000
    ' Execute the query.
    Set rs = oCommand1.Execute


    rs.movefirst
    'Create the loop of results
    Do Until rs.EOF = True


    'Create Email
    ' настройки письма для пользователя
    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "Admin@mycantora.ua"
    objEmail.To = rs.Fields("mail")
    'Optional BCC field
    'objEmail.BCC = "Admin@mycantora.ua"
    objMessage.BodyPart.CharSet = "windows-1251"
    objEmail.Subject = "A welcome message from Exchange"
    objEmail.Textbody = "Добро пожаловать в ........."
    'Optional Add an attachment
    'objEmail.AddAttachment "C:\new_hire_audio_message.wav"
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
    "ExchangeServer" 'Replace ExchangeServer with server IP or name
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objEmail.Configuration.Fields.Update
    'Optional - Read the message before it's sent
    'MsgBox objEmail.GetStream.ReadText
    objEmail.Send
    rs.movenext
    Loop

    'Close AD Connection
    oConnection1.close





    Этот скрипт vbs, написанный мной спонтанно, позволяет устанавливать или сбрасывать флажок «разрешить удалённый доступ к этому компьютеру» на вкладке удалённые сеансы в свойствах системы! Теперь вы сможете подключаться к удалённому рабочему столу любой машины в вашей сети…: Переписать скрипт на любой язык программирования, включая мой любимый С++ не составит труда даже для самых юных кодеров! VBS выбран мной только из соображений лени, если так можно выразиться (под руками был генератор скриптов именно vbs) правда править его ручками пришлось всё равно!

    1. подставьте нужные значения
    strComputer = "ИмяУдалённогоКомпьютера"
    strDomain = "ИмяДомена"
    2. подставьте имя машины на которой запускаете скрипт
    ServerName='ИмяКомпьютера'
    3. параметр = 1 установит флажок параметр = 0 сбросит его
    objInParam.Properties_.Item("AllowTSConnections") = 1

    Запустить скрипт легко по контекстному меню смотрите рисунки.

    PS Проверено на 32 битных и 64 битных системах (WindowsServer2003, WindowsXP)

    strComputer = "ИмяУдалённогоКомпьютера"
    strDomain = "ИмяДомена"
    Wscript.StdOut.Write "Please enter your user name:"
    strUser = Wscript.StdIn.ReadLine
    Set objPassword = CreateObject("ScriptPW.Password")
    Wscript.StdOut.Write "Please enter your password:"
    strPassword = objPassword.GetPassword()
    Wscript.Echo

    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
    "root\CIMV2", _
    strUser, _
    strPassword, _
    "MS_409", _
    "ntlmdomain:" + strDomain)
    ' Obtain an instance of the the class
    ' using a key property value.
    Set objShare = objWMIService.Get("Win32_TerminalServiceSetting.ServerName='ИмяКомпьютера'")

    ' Obtain an InParameters object specific
    ' to the method.
    Set objInParam = objShare.Methods_("SetAllowTSConnections"). _
    inParameters.SpawnInstance_()


    ' Add the input parameters.
    objInParam.Properties_.Item("AllowTSConnections") = 1

    ' Execute the method and obtain the return status.
    ' The OutParameters object in objOutParams
    ' is created by the provider.
    Set objOutParams = objWMIService.ExecMethod("Win32_TerminalServiceSetting.ServerName='ИмяКомпьютера'", "SetAllowTSConnections", objInParam)

    ' List OutParams
    Wscript.Echo "Out Parameters: "
    Wscript.echo "ReturnValue: " & objOutParams.ReturnValue






    выключить--включить адаптер:

    strNetConn = "Сетевые подключения" ' Network Connections для англ. версии ОС
    strConn = "Подключение по локальной сети" ' имя или часть имени подключения
    strEnable = "&Включить" ' En&able для англ. версии ОС
    strDisable = "&Отключить" ' Disa&ble для англ. версии ОС

    Set objShell = CreateObject("Shell.Application")
    Set objCP = objShell.Namespace(3) ' Панель управления
    For Each elem in objCP.Items
    If elem.Name = strNetConn Then
    ' получение папки "Сетевые подключения"
    Set colNetwork = elem.GetFolder
    Exit For
    End If
    Weiter

    Set Conn = Nothing
    For Each clsConn in colNetwork.Items
    If Instr(LCase(clsConn.name), LCase(strConn)) Then
    ' получение указанного подключения
    Set Conn = clsConn
    Exit For
    End If
    Weiter
    If Conn Is Nothing Then
    WScript.Echo "Network Connection not found"
    WScript.Quit
    End If

    bEnabled = True
    Set objEnable = Nothing
    Set objDisable = Nothing
    For Each clsVerb in Conn.verbs
    ' если доступен глагол "Enable", подключение отключено
    If clsVerb.Name = strEnable Then
    Set objEnable = clsVerb
    bEnabled = False
    End If
    ' если доступен глагол "Disable", подключение подключено
    If clsVerb.name = strDisable Then
    Set objDisable = clsVerb
    End If
    Weiter

    If bEnabled Then
    objDisable.DoIt
    strStatus = "disabled."
    Else
    objEnable.DoIt
    strStatus = "enabled."
    End If
    WScript.Sleep 1000

    WScript.Echo Conn.Name & " " & strStatus





    Скрипт для перезапуска ADSL мопеда D-link DSL-2640U: "telnet.exe 192.168.1.1" - или другой IP на котором сидит модем Будет работать и на других моделях но возможно придется посмотреть в телнете что писать в oShell.SendKeys "??" & chr(13) после того как залогинишся
     rem Заходим на мопед 
    Set oShell = WScript.CreateObject("WScript.Shell")
    oShell.Run "telnet.exe 192.168.1.1"
    WScript.Sleep 1000
    oShell.SendKeys "Имя" & chr(13)
    WScript.Sleep 1000
    oShell.SendKeys "Пароль" & chr(13)
    rem Перезапускаем
    WScript.Sleep 1000
    oShell.SendKeys "13" & chr(13)
    WScript.Sleep 1000
    oShell.SendKeys "1" & chr(13)





    скрипт для создания учеток пользователей из списка. (txt, xls): где файл users.csv должен содержать информацию о юзерах в следующем формате.
    Import-CSV users.csv | ForEach-Object { New-QADUser -ParentContainer scorpio.local/users -Name ($_.Familia + ', ' + $_.Imya) -samAccountName ($_.Imya[0] + $_.Familia) -Department $_.Department -Title $_.Title}
    
    





    Перезапуск служб apache , mysql , cron , sendmail :
    #!/bin/bash
    echo "Services restart: ";
    
    cd /etc/rc.d/init.d/
    ./httpd restart
    ./mysqld restart
    ./crond restart
    ./sendmail restart