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

Skripte für Systemadministratoren, Nützliche Skripte für Win2003



  • So verbinden Sie ein Netzlaufwerk
  • So schließen Sie einen Drucker an
  • Überprüfen von Parameteränderungen in AD und Senden an E-Mail oder an die Sharepoint-Liste
  • Skript zum Entfernen von Terminallizenzen auf Clients alle 30 Tage
  • Das Skript zur Bekämpfung des mail.ru-Agenten
  • Das Skript erstellt eine Sicherungskopie des Systems und lädt es auf FTP hoch
  • Blockiert / entsperrt Benutzer in AD und nimmt eine Liste ihres Namens aus einer bestimmten Datei
  • Datei in Benutzer-Roaming-Profile kopieren
  • Das Skript sucht nach allen Benutzern, die sich seit mehr als 90 Tagen nicht mehr angemeldet haben, und deaktiviert sie
  • Batch-Datei (closefl.bat) schließt alle Dateien, die von Benutzern im Netzwerk auf Ihrem Computer geöffnet wurden
  • Das Skript, mit dem der Benutzer 10 Tage lang über den Ablauf des Kontos in der Domäne informiert wird
  • Ein Skript zum Durchsuchen eines Benutzerverzeichnisses mit einer begrenzten Gültigkeitsdauer für die Abrechnung und den Export in eine Datei
  • Das Skript yakiy perevіreayє neue Benutzer und vіdsilaє ist Blatt mit dem eingegebenen Text
  • Aktivieren oder deaktivieren Sie das Kontrollkästchen "Remotezugriff auf diesen Computer zulassen"
  • ausschalten - Adapter einschalten
  • Inventar aller Maschinen in einer Domäne
  • Festlegen, wann ein Konto abläuft (Gibt das Ablaufdatum für ein Benutzerkonto zurück)
  • Festlegen, wann ein Benutzerkonto abläuft
  • Setzt alle Domänenbenutzer rekursiv auf das Attribut "Benutzer muss Kennwort bei der nächsten Anmeldung ändern".
  • Abrufen der SID (a) eines Computers von AD
  • Durchsuchen Sie ActiveDirectory-Konten mit abgelaufenen Kennwörtern
  • Befragt Computer, für die der Benutzer derzeit angemeldet ist
  • Überwachen Sie das Systemprotokoll und benachrichtigen Sie über eine Änderung der Browsereinstellungen
  • Skript zum Neustart des ADSL-Moped-D-Link DSL-2640U
  • Skript zum Erstellen von Benutzerkonten aus der Liste. (txt, xls)
  • Neustart der Dienste Apache, MySQL, Cron, Sendmail


  • Sie öffnen das Notizbuch, kopieren den Code dort und speichern das Dokument mit der Erweiterung .vbs. Wenn das Netzwerk keine Domänen enthält, kopieren Sie diese Datei zum Start jedes PCs. Wenn sich das Netzwerk in einer Domäne befindet, erstellen wir eine Gruppenrichtlinie (in AD), in die Sie diese Datei in die Startparameter einfügen. Als nächstes wird beim Verbinden oder Neustarten des Kontos das Skript ausgeführt






    So schließen Sie ein Netzlaufwerk an:
     Set WshNetwork = CreateObject ("WScript.Network") 'Erstellen eines Objekts vom Typ Network Set Drives = WshNetwork.EnumNetworkDrives c = 0' Zeit, nach mindestens einem Netzwerklaufwerk zu suchen!  i = 0 Während i <= Drives.Count-1 'Auf Netzwerkschwänze prüfen c = 1' MsgBox "Sie haben ein Netzwerklaufwerk" & Drives.Item (i) & "-" & Drives.Item (i + 1) i = i + 2 Wend wenn c = 0, dann 'MsgBox "Kein Laufwerk verbunden" "MsgBox" Versuch, ein Netzwerklaufwerk zu verbinden "' Set WshNetwork = CreateObject (" WScript.Network ") WshNetwork.MapNetworkDrive" Z: "," \ \ Servername \ Ordnername "End if 





    So schließen Sie einen Drucker an:
     Setze WshNetwork = WScript.CreateObject ("WScript.Network")
     WshNetwork.AddWindowsPrinterConnection "\\ Druckservername \ Druckername"
    
    





    Überprüfen von Parameteränderungen in AD und Senden einer Benachrichtigung per E-Mail oder an die Sharepoint-Liste:


    / * ======================================================== ========
    ''
    'Skriptinformationen: Senden einer Nachricht an den Administrator
    Beim Ändern von Daten in AD kann eine Nachricht gesendet werden
    'per E-Mail oder Aufgabenerstellung in MOSS 2007
    ''
    Autor: Vladimir Korotenko DEZA 2008 Woronesch
    Ursprünglich erstellt: 15.04.2008 - 11:01:47
    'Ursprünglicher Pfad: untitled.vbs
    'Beschreibung: Ein Domänenschema sichern und vergleichen
    'mit der vorherigen Kopie für Änderungen und nachfolgende
    'Alarm
    ''
    '================================================== =======
    * /




    // Abschnitt mit den Skripteinstellungen
    var SmtpHost, SmtpPort, MailSubject, MailTo, MailFrom, TextBody;
    var DumpCmdLine, WinDiff, DumpFile, DumpFileOld, WorkingFolder;
    var DiffFile, DiffMessage;
    var SpListGuid, SpHost, UseSp;

    SmtpHost = "comp1"; // Mailserver zum Senden von Nachrichten
    SmtpPort = 25; // Mailserver-Port
    MailSubject = "Änderungen am Organigramm vornehmen"; // Nachrichtenkopf
    MailTo = "vkoroten@ot.comch.ru"; // Empfängeradresse
    MailFrom = "vkoroten@ot.comch.ru"; // Absenderadresse
    DumpCmdLine = "c: \\ windows \\ system32 \\ ldifde.exe"; // Befehlszeile zum Speichern ihrer AD-Daten
    WinDiff = "c: \\ temp \\ windiff.exe"; // Programm zum Vergleich 2
    DumpFile = "schema.ldf"; // 1 zu speichernde Datei benennen
    DumpFileOld = "schemaOld.ldf"; // Nenne 2 zu vergleichende Dateien
    WorkingFolder = "c: \\ temp \\"; // Arbeitsordner für temporäre Dateien

    DiffFile = "diff.log"; // Servicedatei für Vergleichsergebnisse
    DiffMessage = "1 Dateien aufgelistet"; // Zeile, nach der wir suchen, wenn Dateien unterschiedlich sind

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

    // Abschnitt "Einstellungen beenden"

    / ********************************************************** *********************
    Ändern Sie den Code nur, wenn Sie genau wissen, was Sie tun.
    und vor allem, wie geht es dir !!!!!!!!!
    **************************** .... ********************* /

    var file, wsh;
    // ein Objekt für die Arbeit erstellen

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

    if (file.FileExists (WorkingFolder + DumpFileOld))
    file.DeleteFile (WorkingFolder + DumpFileOld);

    if (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);

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




    // Auf 2 Dateien Unterschied prüfen
    Funktion CheckChanges (pathFrom, pathTo)
    {
    var cmd;
    // WinDiff.Exe output.ldf schemaOld.ldf -Sx logcmd
    cmd = WinDiff + "" + pathFrom + "" + pathTo + "-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 ++)
    {
    // Überprüfen Sie, ob die Dateien unterschiedlich sind. In diesem Fall senden wir eine Nachricht

    if (arr [i] .indexOf (DiffMessage)> - 1)
    {
    var d = neues Datum ();
    TextBody = "Schemaänderungen wurden erkannt. Zeit vergleichen:" + d.toString ();
    SendMessage ();
    }}
    }}
    }}



    // Zeilen mit häufig geä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 ++)
    {
    if (arr [i] .indexOf ("lastLogon") == -1) {
    objFile.WriteLine (arr [i]);
    }}
    }}
    objFile.Close ();
    }}



    // Senden einer Nachricht an die Adresse Alle Parameter müssen im Abschnitt "Globale Variablen" festgelegt werden

    Funktion SendMessage () {

    if (UseSp)
    {
    NewMessage (SpListGuid, SpHost, TextBody);
    zurück
    }}
    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 ();

    }}

    // Neue Nachricht in der Sharepoint-Liste erstellen
    Funktion NewMessage (Liste, Hostname, Nachricht)
    {
    var web, req, batch;
    web = neues ActiveXObject ("MSXML2.XMLHTTP.3.0");

    batch = "<Batch ListVersion = '0'> <Method ID = '1' Cmd = 'New'> <Field Name = 'Title'>" + message + "</ Field> </ Method> </ Batch>" ;;

    var req = "<? xml version = '1.0' encoding = 'utf-8'?> <soap: Envelope xmlns: xsi = 'http: //www.w3.org/2001/XMLSchema-instance' xmlns: xsd = 'http://www.w3.org/2001/XMLSchema' xmlns: soap = 'http: //schemas.xmlsoap.org/soap/envelope /'> <soap: Body> <UpdateListItems xmlns = 'http: // schemas.microsoft.com/sharepoint/soap / '> ";
    req + = "<Listenname>" + Liste + "</ Listenname>";
    req + = "<updates>" + batch + "</ update> </ UpdateListItems> </ soap: Body> </ 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 der Terminallizenz auf Clients alle 30 Tage:

    '' Löscht bei Bedarf den Registrierungsschlüssel, in dem temporäre Lizenzen gespeichert sind, wenn 30 Tage vergangen sind.
    Option Explizit
    Dim iCount, dDat, dReadDat, strPath, strRegKey 'Variablendeklaration
    Dim fso, fLogFile, wshSysEnv, wshShell 'Deklaration von Objekten

    dDat = date 'ruft das aktuelle Datum ab
    err.clear 'yf nur für den Fall, dass wir den Fehlerstapel bereinigen

    on error weiter weiter 'Danach werden keine Fehlermeldungen mehr angezeigt

    'Erstellen Sie ein Shell-Objekt
    Setze wshShell = WScript.CreateObject ("WScript.Shell")
    'Erstellen Sie ein Umgebungsobjekt, in dem sich die gewünschte Systemvariable befindet
    Setzen Sie wshSysEnv = WshShell.Environment ("PROCESS")
    'Wir nehmen die Systemvariable (den Pfad zum Windows-Ordner) heraus und fügen sie zur weiteren Verwendung in eine Zeichenfolgenvariable ein
    strPath = wshSysEnv ("WINDIR")

    'Erstellen Sie ein Objekt für den Zugriff auf das Dateisystem und ein Objekt für den Zugriff auf die gewünschte zu lesende Datei
    Setze fso = CreateObject ("Scripting.FileSystemObject")
    setze fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 1, false)

    'Die Hauptbedingung zum Löschen oder Löschen eines Registrierungszweigs
    Wenn err.number <> 0 dann
    'Durchführen eines Löschvorgangs für Registrierungszweige
    Rufen Sie DelLicense an

    '' Geben Sie das letzte Datum ein, an dem die Lizenz in der Protokolldatei gelöscht wurde, und überschreiben Sie den darin enthaltenen Datensatz
    Rufen Sie WriteToLog auf
    Sonst
    'Lesen Sie aus der Datei und vergleichen Sie das Datum der letzten Lizenzlöschung mit dem aktuellen Datum
    dReadDat = CDate (fLogFile.ReadLine ())

    'Muss sein (dDat - dReadDat)
    Wenn (dDat - dReadDat)> 29 Dann
    'Durchführen eines Löschvorgangs für Registrierungszweige
    Rufen Sie DelLicense an

    '' Geben Sie das letzte Datum ein, an dem die Lizenz in der Protokolldatei gelöscht wurde, und überschreiben Sie den darin enthaltenen Datensatz
    Rufen Sie WriteToLog auf
    Ende wenn
    Ende wenn

    'Zerstöre alle unnötigen weiteren Objekte
    Setze WshShell = Nothing
    Setzen Sie wshSysEnv = Nothing
    Setze fso = Nichts

    '******************************************************* ***********
    '' Verfahren
    '******************************************************* ***********
    '' Verfahren zum Entfernen der Lizenz
    Sub DelLicense ()
    'Löschen Sie den Lizenzstecker nacheinander
    bei Fehler als nächstes fortsetzen
    err.clear

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

    Wenn err.number <> 0 dann
    err.clear
    Ende wenn
    als nächstes

    'Entfernen Sie den Hauptschlüssel der Partition
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store \")
    wenn err.number <> 0, dann err.clear

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

    'Löschen Sie den Hauptabschnitt
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \")
    wenn err.number <> 0, dann err.clear

    Ende sub

    'Verfahren zum Schreiben des Datums der letzten Lizenzlöschung in eine Datei
    Sub WriteToLog ()
    err.clear

    'Erstellen Sie ein Objekt, um auf die gewünschte Datei für den Datensatz zuzugreifen, indem Sie die vorherigen Datensätze überschreiben
    setze fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 2, true)

    'Schreiben Sie das Reinigungsdatum der Registrierung in die Datei
    fLogFile.Write (Datum)

    setze fLogFile = nichts 'zerstöre das Objekt
    Ende sub





    Skript zur Bekämpfung des mail.ru-Agenten:

    Const DeleteReadOnly = TRUE

    Setze WshShell = WScript.CreateObject ("Wscript.Shell")
    Setze WshSysEnv = WshShell.Environment ("Process")

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


    Wenn objFSO.FileExists (agentFile) Dann

    objFSO.DeleteFile (agentFile), DeleteReadOnly


    wenn err.number = 0 dann
    Setze objEmail = CreateObject ("CDO.Message")

    objEmail.From = "Killer@kontora.ru"
    objEmail.To = "admin@kontora.ru"
    objEmail.Subject = "Mail.ru Agent"
    objEmail.Textbody = "Sehr geehrte Damen und Herren, Systemadministratoren, ich informiere Sie darüber, dass der feindliche mail.ru-Agent von" + WshSysEnv ("Benutzerprofil") zerstört wurde
    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

    ende wenn

    ende wenn





    Das Skript erstellt eine Sicherungskopie des Systems und lädt es auf ftp hoch:

    strComputer = "."
    Setze WshShell = WScript.CreateObject ("WScript.Shell")
    strCommand = "C: \ WINDOWS \ system32 \ ntbackup.exe-Sicherung @C: \ cmd \ Sicherungslaufwerk-C.bks / a / v: nein / r: nein / rs: nein / hc: aus / m normal / j Sicherungslaufwerk-C / l: s / f D: \ Sicherung \ Sicherungslaufwerk-c.bkf "
    WshShell.Run strcommand, 1, true

    Setzen Sie objWMIService = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
    Setzen Sie colItems = objWMIService.ExecQuery ("Wählen Sie * aus Win32_LocalTime")

    Für jedes Objekt in Spalten
    strCommand = "C: \ Arch \ 7z.exe a D: \ Backup \ Backup-dc-srv-01-DayOf-Week -" & objItem.DayOfWeek & ". 7z D: \ Back-Up \ *. bkf -t7z -m0 = BCJ2 -m1 = LZMA: d23 -m2 = LZMA: d19 -m3 = LZMA: d10M -mb0: 1 -mb0s1: 2 -mb0s2: 3
    Weiter
    WshShell.Run strcommand, 1, true
    strCommand = "ftp -s: C: \ CMD \ ctp-command.txt"
    WshShell.Run strcommand, 1, true





    Das Skript blockiert / entsperrt Benutzer in AD, nimmt eine Liste ihrer vollständigen Namen aus einer bestimmten Datei und benachrichtigt den Administrator per E-Mail ü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

    'Geben Sie die Domäne an
    Const strDomainName = "<Domainname zum Beispiel domain.com>"
    'Geben Sie die Organisationseinheit in AD an, in der gesucht werden soll
    Const strStartOU = "Domänenbenutzer"
    strDomainDN = "DC =" & Replace (strDomainName, ".", ", DC =")

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

    Setzen Sie objRecordSet = objCommand.Execute


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

    Wend
    objConnection.Close

    index = index-1
    maxindex = index

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

    Setze objFileSystem = CreateObject ("Scripting.fileSystemObject")
    Setzen Sie objInputFileFromKardy = objFileSystem.OpenTextFile (strFileOfFiried, OPEN_FILE_FOR_READING)
    'Wir fahren den Inhalt der Datei in ein Array
    inputDataFromFiried = Split (objInputFileFromKardy.ReadAll, vbNewline)
    '' Ergebnislisten zurücksetzen
    UserDisables = ""
    UserUpdated = ""
    UserNoFound = ""
    UserDuplicated = ""
    ii = 0


    Für jeden strFULL In inputDataFromFiried
    wenn Len (strFULL)> 5 dann
    'Null den Zähler der gefundenen Übereinstimmungen
    e = 0
    1. Feld: Wählen Sie aus der Zeile den Namen des Benutzers aus
    strFIO = Links (strFULL, InStr (strFULL, ";") - 1)
    'Wir brechen in Teile Vollständiger Name
    Familia = Links (strFIO, (Instr (strFIO, "") -1))
    N = Trimmen (Mitte (strFIO, Instr (strFIO, "")))
    Imya = Links (N, (Instr (N, "") -1))
    Otchestvo = Trimmen (Mitte (N, Instr (N, "")))
    'Den Namen in Teile setzen
    strFIO = Familia & Imya & Otchestvo

    index = maxindex
    Während Index> 1

    'Wir teilen den Namen in AD in Teile

    AdFamilia = ""
    AdImya = ""
    AdOtchestvo = ""
    AdFamilia = Links (MFullName (Index), (Instr (MFullName (Index), "") -1))
    wenn Len (Trim (mid (MFullName (Index), Instr (MFullName (Index), "")))> 1 dann
    AdN = Trim (mid (MFullName (Index), Instr (MFullName (Index), "")))
    wenn Len (Links (AdN, (Instr (AdN, "")))> 1 dann
    AdImya = Links (AdN, (Instr (AdN, "") -1))
    wenn Len (Trim (mid (AdN, Instr (AdN, ""))))> 1 dann
    AdOtchestvo = Trimmen (Mitte (AdN, Instr (AdN, "")))
    ende wenn
    ende wenn

    ende wenn


    'Den Namen in Teile setzen
    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
    ende wenn
    index = index-1
    Wend


    wenn e = 1 dann
    'Block Login in AD
    LockUser (Mlogins (Mindex))
    UserDisables = UserDisables & "User:" & strFIO & "ist deaktiviert" & vbCrLf
    ende wenn
    'Nicht blockieren / öffnen, weil Wir haben mehrere identische Namen gefunden
    wenn e> 1 dann
    UserNoFound = UserNoFound & "User:" & strFIO & "wird mehr als 1 Mal gefunden" & vbCrLf
    ende wenn
    'Nicht blockieren / öffnen, weil Benutzer nicht gefunden
    wenn e = 0 dann
    UserDuplicated = UserDuplicated & "User:" & strFIO & "wird nicht gefunden" & vbCrLf
    ende wenn

    ende wenn


    Weiter






    'Wenn es ein Ergebnis gibt, dann
    if (len (UserDisables) + len (UserNoFound) + len (UserDuplicated)> 10) dann
    'beginne Mail zu senden

    Setze objNetwork = CreateObject ("Wscript.Network")
    objComputerName = objNetwork.ComputerName
    objUserName = objNetwork.UserName
    Setze objMessage = CreateObject ("CDO.Message")
    objMessage.From = "<E-Mail, von der die E-Mail gesendet wird>"
    objMessage.To = "<E-Mail an wen die E-Mail gesendet wird>"
    objMessage.Subject = "Betreff der E-Mail"

    'Setzen Sie 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 des Remote-SMTP-Servers
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<Server-TMTP-Adresse>"
    'Server-Port (normalerweise 25)
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objMessage.Configuration.Fields.Update
    '== Konfigurationsabschnitt des Remote-SMTP-Servers beenden ==

    objMessage.Send


    ende wenn



    objInputFileFromKardy.Close
    Setzen Sie objFileSystem = Nothing
    Sub LockUser (strText)
    'In dieser Zeile öffnet der Wert TRUE - deaktiviert den Benutzer, FALSE - den Benutzer
    strDisableAccount = TRUE

    strUserLogin = strText
    set objUser = GetObject ("WinNT: // <Domäne> /" & strUserLogin & ", Benutzer")


    wenn strDisableAccount = TRUE dann
    objUser.AccountDisabled = strDisableAccount
    objUser.Description = "Konto ist deaktiviert, weil" & "um" & "" & Date () ausgelöst wurde
    objUser.SetInfo
    ende wenn

    wenn strDisableAccount = FALSE dann
    objUser.AccountDisabled = strDisableAccount
    objUser.Description = "Konto wird durch Skript" & "um" & "" & Date () eröffnet
    objUser.SetInfo
    ende wenn


    Ende sub





    Dieses Skript dient zum Kopieren einer Datei in Benutzer-Roaming-Profile:

    // ********************************************************** *******************************
    // JScript 2004 Shs
    // Dieses Skript dient zum Kopieren einer Datei in Benutzer-Roaming-Profile
    // (Hinzufügen einer Verknüpfung zum Benutzermenü)
    // ********************************************************** ********************************
    // //
    // //
    // ********************************************************** *******************************
    // Rekursive Übergangsfunktion für alle Unterverzeichnisse, beginnend mit dem angegebenen (PolFldr)
    // und kopiere die angegebene Datei (ScriptName) in die angegebenen Ordner (FldrName)
    // ********************************************************** ********************************
    Funktion LoopSubFolders (PolFldr, DeepCount)
    {
    var SubFolders, // Sammlung von Unterkatalogen von Systemrichtlinien
    fsoPolFldr, // Objekt, um auf den Ordner zuzugreifen
    CurFldr; // aktueller Ordner

    DeepCount ++;
    //WScript.Echo(DeepCount);
    if (DeepCount <DeepLimit)
    {
    fsoPolFldr = FSO.GetFolder (PolFldr);
    // Eine Sammlung von Unterverzeichnissen des Systemrichtlinienkatalogs abrufen
    SubFolders = neuer Enumerator (fsoPolFldr.SubFolders);
    // //
    für (;! SubFolders.atEnd (); SubFolders.moveNext ())
    {
    CurFldr = SubFolders.item ();
    if (CurFldr.Name == FldrName)
    {
    versuche {
    WScript.Echo (CurFldr.Path + "\\" + ScriptName);
    //WScript.Echo(Path2Scripts + "\\" + ScriptName);
    FSO.CopyFile (Path2Scripts + "\\" + ScriptName, CurFldr.Path + "\\" + ScriptName, true)
    }}
    fangen (e)
    {// mögliche Fehler behandeln
    var Msg;
    if (e! = 0) Msg = "Fehler -" + e.description
    sonst Msg = "Ok";
    WScript.Echo (Msg);
    }}
    }}
    // rekursiver Aufruf
    LoopSubFolders (CurFldr, DeepCount);
    } // ende für
    } // end if
    }}
    // ***************************** .... **************************************

    // //
    // //


    // ***************************** .... *********************************

    // Stub
    // ********************************************************** *********************************

    // Hier wird der Code angezeigt, der aus den Befehlszeilenparametern abgerufen wird
    // 1) die Namen der weiterverteilbaren Datei
    // 2) Verzeichnisnamen in jedem Profil, in das die verteilte Datei kopiert wird
    // ********************************************************** **************************************

    var ScriptName = "Aktualisieren des Arbeitsmenüs.lnk",
    FldrName = "Hauptmenü"; // Name des gewünschten Unterordners im Profil (wir kopieren die Verknüpfungsdatei dorthin)
    // ********************************************************** *********************************
    ** **.




    // ********************************************************** *********************************
    * *
    // Globale Variablen deklarieren
    // ********************************************************** **************************************
    * *
    var FSO, // FileSystemObject
    Path2Scripts, // Pfad zur verteilten Datei (es wird davon ausgegangen, dass sich die Dateien im selben Ordner wie diese Datei befinden)
    DeepCount, // Rekursionstiefenzähler
    DeepLimit, // Rekursionstiefe begrenzen
    PolF; // Der Stamm, von dem aus die Suche und Verteilung von Dateien in den zugrunde liegenden Ordnern beginnt
    // ***************************** .... **************************************
    * *
    PolF = "\\\\ DC \\ UserFolders \\ OZI"; ////
    // Objekt erstellen FileSystemObject;
    FSO = WScript.CreateObject ("Scripting.FileSystemObject");
    DeepCount = 0;
    Path2Scripts = FSO.GetParentFolderName (FSO.GetFile (WScript.ScriptFullName));
    // Begrenzen Sie die Tiefe rekursiver Aufrufe
    DeepLimit = 4;
    LoopSubFolders (PolF, DeepCount);





    Inventar aller Maschinen in der Domäne:

    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")

    setze objAD = getobject ("LDAP: // CN = Computer, DC = aaa, DC = bbb, DC = ccc")
    objAD.filter = Array ("Computer")
    bei Fehler als nächstes fortsetzen
    für jedes obj in objAD
    CompAD = rechts (obj.name, len (obj.name) -3)
    invdate = date
    temp = "<html>" + chr (10) + "Erfassungsdatum:" & invdate & "<table>" + chr (10)
    compname = ""
    'bei Fehler als nächstes fortsetzen
    set objWMIService = GetObject ("winmgmts: //" & CompAD & "/ root \ cimv2")
    i = 0
    s = 0
    d = 0
    q = 0
    'sizegb = ""
    für a = 0 bis 8
    Setze colitems = objwmiservice.instancesof (strclass (a))
    für jedes Objekt in Colitems
    Fall auswählen 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 (rund (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 + "Motherboard" + "</ td> <td>" + objitem.SMBIOSBIOSVersion + "</ td>" + chr (10)
    temp = temp + "</ tr>" + chr (10)
    temp = temp + "<tr> <td>"
    temp = 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 = temp + "Prozessor" + cstr (s) + "</ 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 (rund (objitem.size / constgb, 2))
    sonst
    sizegb = cstr (0)
    ende 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 + "Videocontroller" + "</ 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)
    ende 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 auswählen
    als nächstes
    als nächstes
    'Der letzte Teil
    temp = temp + "</ table> </ html>"
    'Datei aufnehmen
    Dim fso tf
    Setze fso = CreateObject ("Scripting.FileSystemObject")
    Setze tf = fso.CreateTextFile ("\\ servak ​​\ comp \" & compname & ". Htm", True)
    tf.Write (temp)
    tf.Schließen
    als nächstes





    Festlegen, wann ein Konto abläuft (Gibt das Ablaufdatum für ein Benutzerkonto zurück):

    On Error Resume Next
    Setze objUser = GetObject _
    ("LDAP: // cn = myerken, ou = management, dc = fabrikam, dc = com")

    dtmAccountExpiration = objUser.AccountExpirationDate

    Wenn err.number = -2147467259 oder _
    dtmAccountExpiration = "01.01.1970" Dann
    WScript.echo "Kein Kontoablauf angegeben"
    Sonst
    WScript.echo "Kontoablauf:" & _
    objUser.AccountExpirationDate
    Ende wenn





    Festlegen, wann ein Benutzerkonto abläuft (Gibt das Datum an, an dem das MyerKen Active Directory-Benutzerkonto abläuft.):
      On Error Resume Next 
    Setze 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 setzt rekursiv das Benutzerattribut "Benutzer muss Kennwort bei der nächsten Anmeldung ändern" für alle Domänenbenutzer: PS Für einen korrekten Betrieb ist es erforderlich, den Domänennamen aus Sicht von LDAP in der Variablen strMyDomain zu definieren - d. H. Ersetzen Sie alle Punkte durch "DC =". Daher wird die Domain argo.com in der Variablen strMyOU zu DC = argo, DC = com. Es ist erforderlich, den Namen Organisationseinheit a einzugeben, deren Benutzer dem Kennwortänderungsverfahren unterzogen werden müssen.

    Dim strmyou
    Dim strMyDomain

    Dim objOU, objUser
    Dim strContainer, strLastUser

    strMyOU = "argo"
    strMyDomain = "DC = argo, DC = com"

    sub wiederholt (ou)
    strContainer = "OU =" + ou + "," + strMyDomain
    set objOU = GetObject ("LDAP: //" & strContainer)
    Für jeden Objekt in Objekt
    strLastUser = objUser.Get ("name")
    Wenn objUser.Class = "organisationalUnit" Dann
    wiederholt (strLastUser + ", OU =" + ou)
    Elseif objUser.Class = "user" Dann
    objUser.Put "pwdLastSet", 0
    objUser.SetInfo
    ende wenn
    als nächstes
    Ende sub

    wiederholt strMyOU

    WScript.Quit





    Abrufen der SID (a) eines Computers von AD:

    On Error Resume Next
    Dim Tmp, x, b, Sid
    Setze objSysInfo = CreateObject ("ADSystemInfo")
    strComputerDN = objSysInfo.ComputerName
    Setze 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)
    Setze objGroup = Nothing

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





    Suchen Sie in ActiveDirectory nach Konten mit abgelaufenen Kennwörtern: Wenn sich der NetBIOS-Domänenname vom DNS bis zum ersten Punkt unterscheidet, wird anstelle der Zeichenfolge dom = getObject ("LDAP: //" & DC) .get ("Name") manuell

    on Fehler als nächstes fortsetzen

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

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

    set objCmd = createObject ("ADODB.Command")
    objCmd.ActiveConnection = objConnection

    '- Befehl zum Durchsuchen von Computerkonten
    'cmd = "<LDAP: //" & DC & ">; (objectClass = Computer); DistinguishedName, SamAccountName; Subtree"

    '- Befehl zum Durchsuchen von Benutzerkonten
    cmd = "<LDAP: //" & DC & ">; (objectCategory = person); DistinguishedName, SamAccountName; Subtree"

    objCmd.CommandText = cmd

    setze col = objCmd.execute

    wenn col.recordCount> 0 dann
    col.moveFirst
    während nicht 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

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

    Sonst
    WScript.Echo(strComputer & ": Не отвечает...")
    objRecordSet.MoveNext
    Ende wenn
    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
    Ende wenn

    ' Получение конфигурациы и доменов из объектов 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)
    Sonst
    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#
    Sonst
    On Error GoTo 0
    lngHigh = objDate.HighPart
    lngLow = objDate.LowPart
    If (lngLow < 0) Then
    lngHigh = lngHigh + 1
    Ende wenn
    If (lngHigh = 0) And (lngLow = 0 ) Then
    dtmDate = #1/1/1601#
    Sonst
    dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
    + lngLow)/600000000 - lngBias)/1440
    Ende wenn
    Ende wenn
    If (objList.Exists(strDN) = True) Then
    If (dtmDate > objList(strDN)) Then
    objList.Item(strDN) = dtmDate
    Ende wenn
    Sonst
    objList.Add strDN, dtmDate
    Ende wenn
    adoRecordset.MoveNext
    Loop
    adoRecordset.Close
    Ende wenn
    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 & " заблокирован"



    Sonst

    ' 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 "
    Sonst
    oShell.Popup "До окончания испытательного срока осталось " & dtmDaysToExpire & " дней!" & vbCrLf & _
    "Учётная запись действительна до " & dtmAccountExpiration & vbCrLf & _
    "Просьба об этом уведомить Вашего руководителя.", 60, "Уведомление от ИТ Департамента", 48+0
    Ende wenn





    Скрипт для поиска в активном каталоге пользователей с ограниченым сроком действия учётки и экспорта в файл: В 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

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

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

    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
    Ende wenn
    Weiter

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

    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
    Ende wenn
    ' если доступен глагол "Disable", подключение подключено
    If clsVerb.name = strDisable Then
    Set objDisable = clsVerb
    Ende wenn
    Weiter

    If bEnabled Then
    objDisable.DoIt
    strStatus = "disabled."
    Sonst
    objEnable.DoIt
    strStatus = "enabled."
    Ende wenn
    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