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

Scripts pour les administrateurs système, Scripts utiles pour Win2003



  • Pour connecter un lecteur réseau
  • Pour connecter l'imprimante
  • Vérifiez les modifications apportées aux paramètres dans AD et envoyez-les par e-mail ou à la liste Sharepoint
  • Script pour supprimer la licence de terminal sur les clients, tous les 30 jours
  • Script pour lutter contre mail.ru-agent
  • Le script fait une sauvegarde du système et le télécharge sur le FTP
  • bloque / débloque les utilisateurs dans AD, en prenant une liste de leur nom complet à partir d'un fichier spécifique
  • copier le fichier dans des profils itinérants personnalisés
  • Le script recherche tous les contrôleurs pour les utilisateurs qui ne se sont pas connectés depuis plus de 90 jours et les désactive.
  • fichier de commandes (closefl.bat) ferme tous les fichiers ouverts par les utilisateurs du réseau sur votre ordinateur
  • Le script pour informer l'utilisateur de l'expiration du compte dans le domaine pendant 10 jours
  • Script de recherche dans le répertoire des utilisateurs avec une validité limitée du compte et exportation vers un fichier
  • Script ykiy pervіryae des nouveaux utilisateurs dans tous les domaines
  • Activez ou désactivez la case à cocher «autoriser l'accès à distance à cet ordinateur».
  • éteindre - allumer l'adaptateur
  • Eventarisation de toutes les machines du domaine
  • Détermination du moment où une date d'expiration pour un compte d'utilisateur
  • Déterminer quand un compte d'utilisateur expire
  • Définit récursivement tous les utilisateurs de l'attribut de domaine "L'utilisateur doit changer le mot de passe à la prochaine ouverture de session"
  • Obtenir le (s) SID d'un ordinateur depuis AD
  • Rechercher des comptes dans ActiveDirectory avec des mots de passe expirés
  • Interroge les ordinateurs pour lesquels l'utilisateur est actuellement connecté.
  • Surveille le journal du système et vous avertit de la modification des paramètres du navigateur.
  • Script de redémarrage du cyclomoteur ADSL D-Link DSL-2640U
  • script pour créer des comptes utilisateurs à partir de la liste. (txt, xls)
  • Redémarrez les services apache, mysql, cron, sendmail


  • Vous ouvrez un bloc-notes, copiez le code ici et enregistrez le document avec l'extension .vbs. De plus, s'il s'agit d'un réseau sans domaines, copiez ce fichier pour le chargement automatique de chaque PC. S'il s'agit d'un réseau avec un domaine, créez une stratégie de groupe (dans AD) dans laquelle vous insérez ce fichier dans les paramètres de démarrage. Ensuite, lorsque vous vous connectez ou redémarrez votre compte, le script sera exécuté.






    Pour connecter un lecteur réseau:
     Set WshNetwork = CreateObject ("WScript.Network") 'Création d'un objet du type Réseau Set Drives = WshNetwork.EnumNetworkDrives c = 0' Contrôle temporaire d'au moins un lecteur réseau!  i = 0 While i <= Drives.Count-1 'Vérifier la présence sur le réseau c = 1' MsgBox "Vous avez un lecteur réseau" & Drives.Item (i) & "-" & Drives.Item (i + 1) i = i + 2 Wend si c = 0 alors 'MsgBox "Il n'y a pas de lecteurs connectés"' MsgBox "Tentative de montage d'un lecteur réseau" 'Définissez WshNetwork = CreateObject ("WScript.Network") WshNetwork.MapNetworkDrive "Z:", "\ \ Nameserver \ nom du dossier "End if 





    Pour connecter l’imprimante:
     Définir WshNetwork = WScript.CreateObject ("WScript.Network")
     WshNetwork.AddWindowsPrinterConnection "\\ nom serveur d'impression \ nom de l'imprimante"
    
    





    Vérification des modifications de paramètres dans AD et envoi d'une notification par courrier électronique ou dans la liste Sharepoint:


    / * ============================================ ========
    '
    'Informations sur le script: Envoi d'un message à l'administrateur
    'lors de la modification de données dans AD, l'envoi d'un message est possible
    'envoyer un courriel ou créer une tâche dans MOSS 2007
    '
    'Auteur: Korotenko Vladimir DDC 2008 Voronej
    Initialement créé: 15/04/2008 - 11:01:47
    'Chemin d'origine: untitled.vbs
    'Description: Créer un vidage de schéma de domaine et comparer
    'avec la copie précédente pour recevoir les modifications et la suivante
    'alerte
    '
    '============================================= =======
    * /




    // Section Paramètres du script
    var SmtpHost, SmtpPort, MailSubject, MailTo, MailFrom, TextBody;
    var DumpCmdLine, WinDiff, DumpFile, DumpFileOld, WorkingFolder;
    var DiffFile, DiffMessage;
    var SpListGuid, SpHost, UseSp;

    SmtpHost = "comp1"; // serveur de messagerie pour l'envoi de messages
    SmtpPort = 25; // port du serveur de messagerie
    MailSubject = "Apporter des modifications à l'organigramme"; // en-tête de message
    MailTo = "vkoroten@ot.comch.ru"; // Adresse du destinataire
    MailFrom = "vkoroten@ot.comch.ru"; // Adresse de l'expéditeur
    DumpCmdLine = "c: \\ windows \\ system32 \\ ldifde.exe"; // ligne de commande pour vider leurs données AD
    WinDiff = "c: \\ temp \\ windiff.exe"; // Programme de comparaison 2
    DumpFile = "schema.ldf"; // Nom du fichier à sauvegarder
    DumpFileOld = "schemaOld.ldf"; // Nom de fichier 2 pour comparaison
    WorkingFolder = "c: \\ temp \\"; // dossier de travail pour les fichiers temporaires

    DiffFile = "diff.log"; // Fichier pour les résultats de comparaison
    DiffMessage = "1 fichiers répertoriés"; // chaîne recherchée lorsque les fichiers sont différents

    SpListGuid = "{3D9B5EFB-C0C5-434C-B1DA-61FEA6E9D63B}";
    SpHost = "http: // portal4";
    UseSp = true; // envoyer des messages à la liste des points de partage

    // Fin de la section des paramètres

    / ************************************************ *********************
    Le code ne change que dans le cas d'une compréhension profonde de ce que vous faites
    et surtout comment allez-vous !!!!!!!!!
    ************************************************* ********************* /

    fichier var, wsh;
    // crée un objet pour le travail

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




    // Vérifier la différence 2 fichiers
    fonction 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 = fichier.OpenTextFile (Dossier de travail + DiffFile, 1);
    var buff = new String ();
    buff = objFile.ReadAll ();
    objFile.Close ();
    var arr = new Array ();
    arr = buff.split ("\ r \ n");

    pour (var i = 0; i <arr.length; i ++)
    {
    // Vérifie si les fichiers sont différents, le cas échéant, envoie un message

    if (arr [i] .indexOf (DiffMessage)> - 1)
    {
    var d = new Date ();
    TextBody = "Modifications détectées dans le schéma. Temps de comparaison:" + d.toString ();
    SendMessage ();
    }
    }
    }



    // Supprime les lignes avec des attributs fréquemment modifiés
    fonction TrimUnused (nom)
    {
    var ForReading = 1;
    var ForWriting = 2;
    var objFSo, objFile;


    objFSo = new 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);

    pour (var i = 0; i <arr.length; i ++)
    {
    if (arr [i] .indexOf ("lastLogon") == -1) {
    objFile.WriteLine (arr [i]);
    }
    }
    objFile.Close ();
    }



    // Envoyer un message à l'adresse, tous les paramètres doivent être spécifiés dans la section des variables globales

    fonction SendMessage () {

    si (UseSp)
    {
    NewMessage (SpListGuid, SpHost, TextBody);
    retour
    }
    var objEmail = new 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 ();

    }

    // crée un nouveau message dans la liste Sharepoint
    fonction NewMessage (liste, nom d'hôte, message)
    {
    var web, req, batch;
    web = new ActiveXObject ("MSXML2.XMLHTTP.3.0");

    batch = "<Batch ListVersion = '0'> <ID de méthode = '1' Cmd = 'Nouveau'> <Nom du champ = 'Titre'>" + message + "</ Champ> </ Méthode> </ Batch>" ;

    var req = "<? xml version = '1.0' encoding = 'utf-8'?> <soap: Enveloppe 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 + = "<listName>" + list + "</ listName>";
    req + = "<updates>" + batch + "</ updates> </ UpdateListItems> </ soap: Body> </ soap: Envelope>";


    var r = NomHôte + "/_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

    }





    Script pour supprimer la licence de terminal sur les clients, tous les 30 jours:

    'Si nécessaire, supprime la clé de registre qui stocke les licences temporaires si 30 jours se sont écoulés.
    Option explicite
    Déclaration de variable Dim iCount, dDat, dReadDat, strPath, strRegKey
    Dim fso, fLogFile, wshSysEnv, déclaration d'objet de wshShell

    dDat = date 'nous obtenons la date actuelle
    err.clear 'yf au cas où nous ferions une pile d'erreurs

    En cas d'erreur, reprise suivante 'Après ces messages d'erreur ne sont pas affichés

    'Créer un objet Shell
    Définir wshShell = WScript.CreateObject ("WScript.Shell")
    'Créer un objet Environment dans lequel se trouve la variable système souhaitée
    Définir wshSysEnv = WshShell.Environment ("PROCESS")
    'Sortez la variable système (le chemin du dossier Windows) et insérez-la dans une variable chaîne pour une utilisation ultérieure.
    strPath = wshSysEnv ("WINDIR")

    'Créer un objet d'accès au système de fichiers et l'objet d'accès au fichier souhaité pour la lecture
    Set fso = CreateObject ("Scripting.FileSystemObject")
    set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 1, false)

    'La condition principale pour supprimer ou supprimer une branche du registre
    Si err.numéro <> 0 alors
    'Effectuer la procédure de suppression d'une branche de registre
    Appeler DelLicense

    'Enregistrez la dernière date à laquelle la licence a été supprimée dans le fichier journal, en écrasant son entrée
    Appeler WriteToLog
    Sinon
    'Lire le fichier et comparer la date de la dernière suppression de la licence avec la date du jour
    dReadDat = CDate (fLogFile.ReadLine ())

    'Doit avoir (dDat - dReadDat)
    Si (dDat - dReadDat)> 29 Alors
    'Effectuer la procédure de suppression d'une branche de registre
    Appeler DelLicense

    'Enregistrez la dernière date à laquelle la licence a été supprimée dans le fichier journal, en écrasant son entrée
    Appeler WriteToLog
    Fin si
    Fin si

    'Détruisez tous les objets inutiles
    Définir WshShell = Nothing
    Définir wshSysEnv = Nothing
    Set fso = Nothing

    '************************************************ ***********
    Procédures
    '************************************************ ***********
    'Procédure de retrait de licence
    Licence Sub Del ()
    'Retirer la licence-plug un par un
    en cas d'erreur reprendre suivant
    err.clear

    pour iCount = 0 à 9
    strRegKey = "HKLM \ LOGICIEL \ Microsoft \ MSLicensing \ Store \ LICENSE00" & iCount & "\"
    WshShell.RegDelete (strRegKey)

    Si err.numéro <> 0 alors
    err.clear
    Fin si
    ensuite

    'Supprimer la sous-clé de la section principale
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store \")
    si err.numéro <> 0 alors err.clear

    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ HardwareID \")
    si err.numéro <> 0 alors err.clear

    'Supprimer la section principale
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \")
    si err.numéro <> 0 alors err.clear

    End sub

    'La procédure pour écrire la date du dernier retrait de licence dans un fichier
    Sub WriteToLog ()
    err.clear

    'Créer un objet d'accès au fichier souhaité pour enregistrer et écraser les enregistrements précédents
    set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 2, true)

    'Ecrire dans le fichier la date du nettoyage du registre
    fLogFile.Write (Date)

    set fLogFile = Nothing 'détruit l'objet
    End sub





    Script pour lutter contre mail.ru-agent:

    Const DeleteReadOnly = TRUE

    Définir WshShell = WScript.CreateObject ("Wscript.Shell")
    Définir WshSysEnv = WshShell.Environment ("Process")

    Définir objFSO = CreateObject ("Scripting.FileSystemObject")
    agentFile = WshSysEnv ("userprofile") + "\ Application Data \ Mail.Ru \ Agent \ magent.exe"


    Si objFSO.FileExists (agentFile), alors

    objFSO.DeleteFile (agentFile), DeleteReadOnly


    si err.numéro = 0 alors
    Définir objEmail = CreateObject ("CDO.Message")

    objEmail.From = "killer@kontora.ru"
    objEmail.To = "admin@kontora.ru"
    objEmail.Subject = "Mail.ru-agent"
    objEmail.Textbody = "Chers administrateurs système, je vous informe que l'agent mail.ru ennemi de" + WshSysEnv ("userprofile") a été détruit.
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
    "serveur de messagerie ip"
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objEmail.Configuration.Fields.Update
    objEmail.Send

    fin si

    fin si





    Le script effectue une sauvegarde du système et le télécharge sur le FTP:

    strComputer = "."
    Définir WshShell = WScript.CreateObject ("WScript.Shell")
    strCommand = "Sauvegarde C: \ WINDOWS \ system32 \ ntbackup.exe @C: \ cmd \ Sauvegarde-Lecteur-Cbks / a / v: non / r: non / rs: non / hc: éteint / m normal / j Sauvegarde-Lecteur-C / l: s / f D: \ Sauvegarde \ Lecteur-Sauvegarde-c.bkf "
    WshShell.Run strcommand, 1, true

    Définissez objWMIService = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
    Définir colItems = objWMIService.ExecQuery ("Select * from Win32_LocalTime")

    Pour chaque objItem en colItems
    strCommand = "C: \ Arch \ 7z.exe a D: \ Sauvegarde \ Sauvegarde-dc-srv-01-DayOf-Week -" & objItem.DayOfWeek & ". 7z D: \ Sauvegarde \ *. bkf -t7z -m0 = BCJ2 -m1 = LZMA: d23-m2 = LZMA: d19 -m3 = LZMA: d10M -mb0: 1 -mb0s1: 2 -mb0s2: 3 "
    Suivant
    WshShell.Run strcommand, 1, true
    strCommand = "ftp -s: C: \ CMD \ ctp-command.txt"
    WshShell.Run strcommand, 1, true





    Le script bloque / débloque les utilisateurs dans AD, prend une liste de leurs noms complets dans un fichier spécifique et informe l'administrateur des résultats par courrier électronique:

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

    'Spécifiez le domaine
    Const strDomainName = "<nom de domaine par exemple domain.com>"
    'Spécifiez OU dans AD, à l'intérieur duquel nous allons chercher
    Const strStartOU = "Utilisateurs du domaine"
    strDomainDN = "DC =" & Replace (strDomainName, ".", ", DC =")

    '--------------------- Réception de données --------------------
    Définir objConnection = CreateObject ("ADODB.Connection")
    objConnection.Open "Fournisseur = ADsDSOObject;"
    Définir objCommand = CreateObject ("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "<LDAP: // OU =" & strStartOU & "," & strDomainDN & ">; (& (objectCategory = person) (objectClass = user)); ADsPath; subtree"
    objCommand.Properties ("Taille de la page") = 4000

    Définir objRecordSet = objCommand.Execute


    '------ Indexation --------
    indice = 0
    Bien que non objRecordset.EOF
    strADsPath = objRecordset.Fields ("ADsPath")
    Définir objUser = GetObject (strADsPath)
    MFullName (index) = objUser.DisplayName & ""
    Mlogins (index) = objUser.sAMAccountName
    MAdspath (index) = strADsPath
    index = index + 1
    objRecordset.MoveNext

    Wend
    objConnection.Fermer

    index = index-1
    maxindex = index

    'Chemin d'accès au fichier dans lequel est stockée la liste des noms de personnes dont les comptes doivent être ouverts / fermés
    strFileOfFiried = "d: \ fichier_de_firied.txt"

    Définir objFileSystem = CreateObject ("Scripting.fileSystemObject")
    Définissez objInputFileFromKardy = objFileSystem.OpenTextFile (strFileOfFiried, OPEN_FILE_FOR_READING)
    'Nous conduisons le contenu du fichier dans un tableau
    inputDataFromFiried = Split (objInputFileFromKardy.ReadAll, vbNewline)
    'Zéro liste de résultats
    UserDisables = ""
    UserUpdated = ""
    UserNoFound = ""
    UserDuplicated = ""
    ii = 0


    Pour chaque strFULL dans inputDataFromFiried
    si Len (strFULL)> 5 alors
    'réinitialiser le compteur de correspondances trouvées
    e = 0
    '1er champ: sélectionnez le nom de l'utilisateur dans la ligne
    strFIO = Left (strFULL, InStr (strFULL, ";") - 1)
    'Nous casser en pièces nom complet
    Familia = Left (strFIO, (Instr (strFIO, "") -1))
    N = Trim (mid (strFIO, Instr (strFIO, "")))
    Imya = Left (N, (Instr (N, "") -1))
    Otchestvo = Trim (mid (N, Instr (N, "")))
    'Assembler le nom complet
    strFIO = Familia & "" Imya & "" & Otchestvo

    index = maxindex
    Alors que l'indice> 1

    'Diviser le nom en parties dans AD

    AdFamilia = ""
    Admya = ""
    AdOtchestvo = ""
    AdFamilia = Left (MFullName (index), (Instr (MFullName (index), "") -1))
    si Len (Trim (mid (MFullName (index), Instr. MFullName (index), ""))))> 1, alors
    AdN = Trim (mid (MFullName (index), Instr (MFullName (index), "")))
    si Len (Left (AdN, (Instr (AdN, "")))))> 1, alors
    AdImya = Left (AdN, (Instr (AdN, "") -1))
    si Len (Trim (mid (AdN, Instr (AdN, "")))))> 1, alors
    AdOtchestvo = Trim (mid (AdN, Instr (AdN, "")))
    fin si
    fin si

    fin si


    'Assembler le nom complet
    AdstrFIO = AdFamilia & "" & AdImya & "" & AdOtchestvo
    AdstFIO1 = AdImya & "" & AdOtchestvo & "" & AdFamilia
    AdstFIO2 = AdImya & "" & AdFamilia & "" & AdOtchestvo
    'Wscript.Echo AdstrFIO

    si (StrFIO = AdstrFIO) ou (StrFIO = AdstrFIO1) ou (StrFIO = AdstrFIO2) alors
    e = e + 1
    Mindex = index
    fin si
    index = index-1
    Wend


    si e = 1 alors
    'bloquer la connexion dans AD
    LockUser (Mlogins (Mindex))
    UserDisables = UserDisables & "User:" & strFIO & "est désactivé" & vbCrLf
    fin si
    'Ne pas bloquer / ouvrir, car Nous avons trouvé plusieurs noms identiques
    si e> 1 alors
    UserNoFound = UserNoFound & "User:" & strFIO & "est trouvé plus de 1 fois" & vbCrLf
    fin si
    'Ne pas bloquer / ouvrir, car utilisateur non trouvé
    si e = 0 alors
    UserDuplicated = UserDuplicated & "User:" & strFIO & "n'est pas trouvé" & vbCrLf
    fin si

    fin si


    Suivant






    's'il y a un résultat, alors
    if (len (UserDisables) + len (UserNoFound) + len (UserDuplicated)> 10), puis
    'commencer à envoyer du courrier

    Set objNetwork = CreateObject ("Wscript.Network")
    objComputerName = objNetwork.ComputerName
    objUserName = objNetwork.UserName
    Définir objMessage = CreateObject ("CDO.Message")
    objMessage.From = "<e-mail de l'expéditeur du mail>"
    objMessage.To = "<e-mail à qui le courrier est envoyé>"
    objMessage.Subject = "Sujet de l'e-mail"

    'Mettez le codage
    objMessage.bodypart.charset = "koi8-r"
    objMessage.TextBody = UserDisables & vbCrLf & UserNoFound & vbCrLf & UserDuplicated
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Nom ou adresse IP du serveur SMTP distant
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<adresse smtp du serveur>"
    'Port du serveur (généralement 25)
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objMessage.Configuration.Fields.Update
    '== Fin de la section de configuration du serveur SMTP distant ==

    objMessage.Send


    fin si



    objInputFileFromKardy.Close
    Définir objFileSystem = Nothing
    Sub LockUser (strText)
    'dans cette ligne, la valeur est TRUE - le handicap de l'utilisateur, FALSE - ouvre l'utilisateur
    strDisableAccount = TRUE

    strUserLogin = strText
    set objUser = GetObject ("WinNT: // <domaine> /" & strUserLogin & ", utilisateur")


    si strDisableAccount = true alors
    objUser.AccountDisabled = strDisableAccount
    objUser.Description = "Le compte est désactivé en raison du déclenchement" & "at" & "" & Date ()
    objUser.SetInfo
    fin si

    si strDisableAccount = FALSE alors
    objUser.AccountDisabled = strDisableAccount
    objUser.Description = "Le compte est ouvert par le script" & "à" & "" & Date ()
    objUser.SetInfo
    fin si


    End sub





    Ce script est conçu pour copier le fichier dans les profils itinérants de l'utilisateur:

    // ************************************************ *******************************
    // JScript 2004 Shs
    // Ce script est conçu pour copier le fichier dans les profils itinérants de l'utilisateur.
    // (Ajouter un raccourci au menu de l'utilisateur)
    // ************************************************ ********************************
    //
    //
    // ************************************************ *******************************
    // Fonction de transition récursive dans tous les sous-répertoires à partir de celui donné (PolFldr)
    // et copiez le fichier spécifié (ScriptName) dans les dossiers spécifiés (FldrName)
    // ************************************************ ********************************
    fonction LoopSubFolders (PolFldr, DeepCount)
    {
    var SubFolders, // Collection de sous-catalogues de règles système
    fsoPolFldr, // objet pour accéder au dossier
    CurFldr; // dossier actuel

    DeepCount ++;
    //WScript.Echo(DeepCount);
    if (DeepCount <DeepLimit)
    {
    fsoPolFldr = FSO.GetFolder (PolFldr);
    // Récupère une collection de sous-répertoires du catalogue de règles système
    SubFolders = new Enumerator (fsoPolFldr.SubFolders);
    //
    pour (;! SubFolders.atEnd (); SubFolders.moveNext ())
    {
    CurFldr = SubFolders.item ();
    if (CurFldr.Name == FldrName)
    {
    essayer {
    WScript.Echo (CurFldr.Path + "\\" + ScriptName);
    //WScript.Echo(Path2Scripts + "\\" + ScriptName);
    FSO.CopyFile (Path2Scripts + "\\" + Nom du script, CurFldr.Path + "\\" + Nom du script, true)
    }
    attraper (e)
    {// gérer les erreurs possibles
    var Msg;
    if (e! = 0) Msg = "Erreur -" + e.description
    sinon Msg = "Ok";
    WScript.Echo (Msg);
    }
    }
    // appel récursif
    LoopSubFolders (CurFldr, DeepCount);
    } // fin pour
    } // fin si
    }
    // ************************************************ **********************************

    //
    //


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

    // talon
    // ************************************************ **********************************

    // voici le code obtenu à partir des paramètres de ligne de commande
    // 1) le nom du fichier en cours de distribution
    // 2) noms de répertoire dans chaque profil dans lequel le fichier distribué sera copié
    // ************************************************ **********************************

    var ScriptName = "Mise à jour du menu.lnk de travail",
    FldrName = "Menu principal"; // Nom du sous-dossier requis dans le profil (nous y copierons le fichier de raccourci)
    // ************************************************ **********************************
    **




    // ************************************************ **********************************
    *
    // Déclarer des variables globales
    // ************************************************ **********************************
    *
    var FSO, // objet FileSystemObject
    Path2Scripts, // Chemin d'accès au fichier en cours de distribution (les fichiers se trouvent dans le même dossier que ce fichier)
    DeepCount, // compte de profondeur de récursivité
    DeepLimit, // Limitation de la profondeur de récursivité
    PolF; // La racine à partir de laquelle commencer la recherche et la distribution de fichiers dans les dossiers suivants
    // ************************************************ **********************************
    *
    PolF = "\\\\ DC \\ UserFolders \\ OZI"; ////
    // Créer un objet FileSystemObject;
    FSO = WScript.CreateObject ("Scripting.FileSystemObject");
    DeepCount = 0;
    Path2Scripts = FSO.GetParentFolderName (FSO.GetFile (WScript.ScriptFullName));
    // Limite la profondeur des appels récursifs
    DeepLimit = 4;
    LoopSubFolders (PolF, DeepCount);





    Eventarisation de toutes les machines du domaine:

    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 = Ordinateurs, DC = aaa, DC = bbb, DC = ccc")
    objAD.filter = array ("ordinateur")
    en cas d'erreur reprendre suivant
    pour chaque obj dans objAD
    CompAD = right (obj.name, len (obj.name) -3)
    invdate = date
    temp = "<html>" + chr (10) + "Date de collecte:" & invdate & "<table>" + chr (10)
    compname = ""
    'on error error next
    set objWMIService = GetObject ("winmgmts: //" & CompAD & "/ root \ cimv2")
    i = 0
    s = 0
    d = 0
    q = 0
    'sizegb = ""
    pour a = 0 à 8
    Set colitems = objwmiservice.instancesof (strclass (a))
    pour chaque objet en colonnes
    sélectionner le cas a
    cas 0
    temp = temp + "<tr> <td>"
    temp = temp + "Nom de l'ordinateur" + "</ td> <td>" + objitem.name + "</ td>" + chr (10)
    temp = temp + "</ tr>" + chr (10)
    temp = temp + "<tr> <td>"
    temp = temp + "RAM" + "</ td> <td>" + cstr (arrondi (objitem.totalphysicalmemory / constmb)) + "MB </ td>" + chr (10)
    temp = temp + "</ tr>" + chr (10)
    temp = temp + "<tr> <td>"
    temp = temp + "Modèle de l'ordinateur" + "</ td> <td>" + objitem.model + "</ td>" + chr (10)
    temp = temp + "</ tr>" + chr (10)
    compname = objitem.name
    cas 1
    temp = temp + "<tr> <td>"
    temp = temp + "Carte mère" + "</ 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)
    cas 2
    s = s + 1
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Processor" + cstr (s) + "</ td>" + chr (10) + "<td>" + objitem.name + "Fréquence" + cstr (objitem.CurrentClockSpeed) + chr (10) + " </ td> "
    temp = temp + "</ tr>" + chr (10)
    cas 3
    i = i + 1
    temp = temp + "<tr>" + chr (10) + "<td>"
    si objitem.size> 0 alors '= nul alors
    sizegb = cstr (round (objitem.size / constgb, 2))
    sinon
    sizegb = cstr (0)
    fin si
    temp = temp + "Disque dur" + cstr (i) + "</ td>" + chr (10) + "<td>" + objitem.model + "" + sizegb + "GB </ td>" + chr ( 10)
    temp = temp + "</ tr>" + chr (10)
    cas 4
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Moniteur vidéo" + "</ td>" + chr (10) + "<td>" + objitem.caption + chr (10) + "</ td>"
    temp = temp + "</ tr>" + chr (10)
    cas 5
    si objitem.adaptertypeid = 0 et objitem.netconnectionstatus = 2 alors
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "adaptateur réseau" + "</ td>" + chr (10)
    temp = temp + "<td>" + objitem.name + chr (10) + "</ td>"
    temp = temp + "</ tr>" + chr (10)
    fin si
    cas 6
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Carte son" + "</ td>" + chr (10)
    temp = temp + "<td>" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
    cas 7
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Adaptateur SCSI" + "</ td>" + chr (10)
    temp = temp + "<td>" + objitem.manufacturer + "" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
    cas 8
    d = d + 1
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Imprimante" + cstr (d) + "</ td>" + chr (10) + "<td>" + objitem.name + chr (10) + "</ td>"
    temp = temp + "</ tr>" + chr (10)
    fin sélectionnez
    ensuite
    ensuite
    'La dernière partie
    temp = temp + "</ table> </ html>"
    'Ecrire le fichier
    Dim fso, tf
    Set fso = CreateObject ("Scripting.FileSystemObject")
    Définissez tf = fso.CreateTextFile ("\\ servak ​​\ comp \" & compname & ". Htm", True)
    tf.Write (temp)
    tf.Fermer
    ensuite





    Détermination de la date d'expiration pour un compte d'utilisateur:

    Sur erreur Reprendre suivant
    Définir objUser = GetObject _
    ("LDAP: // cn = myerken, ou = gestion, dc = fabrikam, dc = com")

    dtmAccountExpiration = objUser.AccountExpirationDate

    Si err.numéro = -2147467259 ou _
    dtmAccountExpiration = "1/1/1970" Ensuite
    WScript.echo "Aucune expiration de compte spécifiée"
    Sinon
    WScript.echo "Expiration du compte:" & _
    objUser.AccountExpirationDate
    Fin si





    Détermination des exportateurs de compte d'utilisateur Active Directory.
      Sur erreur Reprendre suivant 
    Définir objUser = GetObject _
    ("LDAP: // cn = MyerKen, ou = Gestion, dc = NA, dc = fabrikam, dc = com")
    dtmAccountExpiration = objUser.AccountExpirationDate

    Si Err.Number = -2147467259 ou dtmAccountExpiration = "1/1/1970", puis
    WScript.Echo "Aucune expiration de compte spécifiée"
    Sinon
    WScript.Echo "Expiration du compte:" & objUser.AccountExpirationDate
    Fin si





    Le script définit de manière récursive l'attribut "L'utilisateur doit changer le mot de passe lors de la prochaine connexion" à tous les utilisateurs du domaine: PS Remplacez tous les points par "DC =". Ainsi, le domaine argo.com devient DC = argo, DC = com dans la variable strMyOU, vous devez indiquer le nom de l'unité d'organisation et les utilisateurs dont les utilisateurs doivent être soumis à la procédure de modification du mot de passe.

    Dim strMyOU
    Dim strMyDomain

    Dim objOU, objUtilisateur
    Dim strContainer, strLastUser

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

    sous-réclame (ou)
    strContainer = "OU =" + ou + "," + strMyDomain
    set objOU = GetObject ("LDAP: //" & strContainer)
    Pour chaque objUser dans objOU
    strLastUser = objUser.Get ("nom")
    Si objUser.Class = "organizationUnit", alors
    se répète (strLastUser + ", OU =" + ou)
    Elseif objUser.Class = "user" Alors
    objUser.Put "pwdLastSet", 0
    objUser.SetInfo
    fin si
    ensuite
    fin sous

    se répète strMyOU

    WScript.Quit





    Obtenir le (s) SID d'un ordinateur à partir d'AD:

    Sur erreur Reprendre suivant
    Dim Tmp, x, b, Sid
    Définir objSysInfo = CreateObject ("ADSystemInfo")
    strComputerDN = objSysInfo.ComputerName
    Définir objCmp = GetObject ("LDAP: //" & strComputerDN)
    Sid = objCmp.objectSID
    gSID = "S-1-5 -" & Convert (16,19) & "-" & Convert (12,15) & "-" & Convert (8,11) & "-" & Convert (4.7) & "-" & Convertir (0.3)
    Définir objGroup = Nothing

    fonction Convertir (u, l)
    Tmp = ""
    Pour x = UBound (Sid) -u à ​​UBound (Sid) -l Étape -1
    b = AscB (MidB (SID, x + 1))
    Tmp = Tmp & Hex (b \ 16) & Hex (b et 15)
    Suivant
    Convert = Clng ("& H" & Tmp)
    fonction finale
    wscript.echo (gSID)





    Rechercher des comptes dans ActiveDirectory avec des mots de passe expirés: Si le nom de domaine NetBIOS diffère du DNS au premier point, définissez la valeur souhaitée au lieu de la chaîne dom = getObject ("LDAP: //" & DC) .get ("Nom")

    on Error reprend ensuite

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

    set objConnection = createObject ("ADODB.Connection")
    objConnection.open "Fournisseur = ADsDSOObject;"

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

    '- Commande de recherche de comptes d'ordinateurs
    'cmd = "<LDAP: //" & DC & ">; (objectClass = computer); distinguéNom, samAccountName; sous-arbre"

    '- Commande de recherche de comptes d'utilisateurs
    cmd = "<LDAP: //" & DC & ">; (objectCategory = person); nom distingué, samAccountName; sous-arbre"

    objCmd.CommandText = cmd

    set col = objCmd.execute

    si col.recordCount> 0 alors
    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)
    Suivant
    objRecordSet.MoveNext

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

    Sinon
    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)
    Suivant
    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)
    Sinon
    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#
    Sinon
    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#
    Sinon
    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
    Sinon
    objList.Add strDN, dtmDate
    End If
    adoRecordset.MoveNext
    Loop
    adoRecordset.Close
    End If
    Suivant

    ' Создание логов
    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 & " заблокирован"



    Sinon

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



    End if


    Suivant

    'Закрытие логов
    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 "
    Sinon
    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

    Sinon
    'Вывод сообщением
    ' 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
    Suivant

    Set Conn = Nothing
    For Each clsConn in colNetwork.Items
    If Instr(LCase(clsConn.name), LCase(strConn)) Then
    ' получение указанного подключения
    Set Conn = clsConn
    Exit For
    End If
    Suivant
    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
    Suivant

    If bEnabled Then
    objDisable.DoIt
    strStatus = "disabled."
    Sinon
    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