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érification des modifications apportées aux paramètres AD et envoi à l'e-mail ou à la liste Sharepoint
  • Script pour supprimer les licences de terminal sur les clients, tous les 30 jours
  • Les scripts de l'agent anti-mail.ru
  • 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 dans le fichier spécifié une liste de leurs noms
  • copier un fichier dans des profils itinérants d'utilisateur
  • Le script recherche tous les contrôleurs des utilisateurs qui ne se sont pas connectés depuis plus de 90 jours et les désactive
  • Le fichier de commandes (closefl.bat) ferme tous les fichiers ouverts par les utilisateurs du réseau sur votre ordinateur
  • Script pour informer l'utilisateur de l'expiration de la comptabilité dans le domaine pendant 10 jours
  • Script pour la recherche dans le répertoire des utilisateurs avec une période de validité limitée du compte et l'exportation vers un fichier
  • Script yakii perevіryaєe novyh yuzerіv je vіsilаіі sa feuille dans le texte
  • Définir ou désélectionner la case à cocher "Autoriser l'accès à distance à cet ordinateur"
  • éteindre - allumer l'adaptateur
  • Inventaire toutes les machines du domaine
  • Déterminer quand un compte expire (renvoie la date d'expiration pour un compte d'utilisateur)
  • Déterminer quand un compte d'utilisateur expire
  • Attribue récursivement à tous les utilisateurs du domaine l'attribut "L'utilisateur doit changer le mot de passe lors de la prochaine connexion"
  • Obtention du ou des SID d'un ordinateur auprès d'AD
  • Rechercher des comptes dans ActiveDirectory avec des mots de passe expirés
  • Interroge les ordinateurs, sur le sujet, quel utilisateur est connecté en ce moment
  • Surveille le journal système et vous informe de la modification des paramètres du navigateur
  • Script pour redémarrer l'ADSL cyclomoteur D-link DSL-2640U
  • Un script pour créer des comptes d'utilisateurs à partir de la liste. (txt, xls)
  • Redémarrez les services apache, mysql, cron, sendmail


  • Ouvrez le bloc-notes, copiez le code et sauvegardez le document avec l'extension .vbs. Ensuite, si le réseau sans domaines copie ce fichier au démarrage pour chaque PC. Si le réseau est un domaine, vous 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 connectez ou redémarrez le compte, le script s'exécutera






    Pour connecter un lecteur réseau:
     Définir WshNetwork = CreateObject ("WScript.Network") 'Créer un objet de type Network Set Drives = WshNetwork.EnumNetworkDrives c = 0' Testé pour au moins un lecteur réseau!  i = 0 Alors que i <= Drives.Count-1 'Vérifiez les caractères génériques 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 un seul lecteur monté "'MsgBox" Tentative de monter un lecteur réseau "' Set WshNetwork = CreateObject (" WScript.Network ") WshNetwork.MapNetworkDrive" Z: "," \ \ Servername \ nom du dossier "Fin si 





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





    Vérifier les changements dans les paramètres dans AD et envoyer la notification à l'e-mail ou à la liste Sharepoint:


    / * =========================================== ========
    '
    'Script Information: Envoyer un message à l'administrateur
    'lorsque vous modifiez les données dans AD, vous pouvez envoyer un message
    'pour envoyer un e-mail ou créer une tâche dans MOSS 2007
    '
    'Auteur: Korotenko Vladimir SDC 2008 Voronezh
    Créé par: 15.04.2008 - 11:01:47
    'Chemin d'accès original: untitled.vbs
    'Description: Créer un vidage de schéma de domaine et comparer
    'avec la copie précédente pour recevoir les changements et les suivantes
    'notification
    '
    '============================================ =======
    * /




    // Section des paramètres de script
    var SmtpHost, SmtpPort, MailSubject, MailTo, MailFrom, TextBody;
    var DumpCmdLine, WinDiff, FichierDump, DumpFileOld, WorkingFolder;
    var DiffFile, DiffMessage;
    var SpListGuid, SpHost, UseSp;

    SmtpHost = "comp1"; // serveur de messagerie pour l'envoi de messages
    SmtpPort = 25; // le port du serveur de messagerie
    MailSubject = "Apporter des modifications à l'organigramme"; // le titre de la lettre
    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 le vidage de leurs données AD
    WinDiff = "c: \\ temp \\ windiff.exe"; // Programme de comparaison 2
    DumpFile = "schema.ldf"; // Nom du fichier à sauvegarder
    DumpFileOld = "schemaOld.ldf"; // Nomme 2 fichiers à comparer
    WorkingFolder = "c: \\ temp \\"; // dossier de travail pour les fichiers temporaires

    DiffFile = "diff.log"; // Fichier de service pour les résultats de comparaison
    DiffMessage = "1 fichiers listés"; // la ligne que nous recherchons s'il n'y a pas de fichiers

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

    // Fin de la section des paramètres

    / ********************************************** ********************
    Code pour changer seulement en cas de compréhension profonde pour quoi faire
    et le plus important comment vous faites !!!!!!!!!
    ********************************************** ******************** /

    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érifie la différence de 2 fichiers
    function CheckChanges (pathFrom, pathTo)
    {
    var cmd;
    // WinDiff.Exe output.ldf schemaOld.ldf -Sx logcmd
    cmd = WinDiff + "" + pathFrom + "" + cheminTo + "-Sx" + WorkingFolder + DiffFile;
    wsh.Run (cmd, 1,1);
    objFile = fichier.OpenTextFile (WorkingFolder + DiffFile, 1);
    var buff = new Chaîne ();
    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, si c'est le cas, envoie un message

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



    // Supprimer des 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 (nom, ForReading);
    var strContents = new Chaîne ();
    strContents = objFile.ReadAll ();
    objFile.Close ();

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

    objFile = objFSo.OpenTextFile (nom, ForWriting);

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



    // Envoi d'un message à une 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
    function NewMessage (liste, nom d'hôte, message)
    {
    var web, req, lot;
    web = new ActiveXObject ("MSXML2.XMLHTTP.3.0");

    batch = "<Batch ListVersion = '0'> <ID de la méthode = '1' Cmd = 'Nouveau'> <Nom du champ = 'Titre'>" + message + "</ Field> </ Method> </ 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: Corps> <UpdateListItems xmlns = 'http: // schemas.microsoft.com/sharepoint/soap / '> ";
    req + = "<listName>" + liste + "</ listName>";
    req + = "<mises à jour>" + batch + "</ updates> </ UpdateListItems> </ soap: Body> </ soap: Enveloppe>";


    var r = nomHôte + "/_vti_bin/Lists.asmx?op=UpdateListItems";
    web.Open ("POST", r, False);
    web.setRequestHeader ("Content-Type", "text / xml; jeu de caractères = 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 les licences de terminal sur les clients, tous les 30 jours:

    'Supprime, si nécessaire, la clé de registre dans laquelle les licences temporaires sont stockées, si 30 jours se sont écoulés.
    Option explicite
    Dim iCount, dDat, dReadDat, strPath, déclaration de variables strRegKey
    Dim fso, fLogFile, wshSysEnv, déclaration d'objets wshShell

    dDat = date 'obtenir la date actuelle
    err.clear 'yf juste au cas où nous nettoyons la pile d'erreurs

    sur erreur, reprenez 'Après que ce message d'erreur ne s'affiche pas

    'Créer l'objet Shell
    Définir wshShell = WScript.CreateObject ("WScript.Shell")
    'Créer un objet Environnement contenant la variable système requise
    Définir wshSysEnv = WshShell.Environment ("PROCESS")
    'Nous sortons la variable système (le chemin vers le dossier Windows) et le mettons dans une variable de chaîne pour une utilisation ultérieure
    strPath = wshSysEnv ("WINDIR")

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

    'La principale condition pour supprimer ou désinstaller la branche du registre
    Si err.number <> 0 alors
    'Exécution de la procédure pour supprimer la branche de registre
    Appelez DelLicense

    'Entrez la dernière date de suppression de la licence dans le fichier journal, en effaçant l'entrée
    Appelez WriteToLog
    Else
    'Lire à partir du fichier et comparer la date à laquelle la dernière licence a été supprimée avec la date actuelle
    dReadDat = CDate (fLogFile.ReadLine ())

    'Doit être (dDat - dReadDat)
    If (dDat - dReadDat)> 29 Puis
    'Exécution de la procédure pour supprimer la branche de registre
    Appelez DelLicense

    'Entrez la dernière date de suppression de la licence dans le fichier journal, en effaçant l'entrée
    Appelez WriteToLog
    Fin Si
    Fin Si

    "Nous détruisons tous les objets inutiles
    Définir WshShell = Nothing
    Définir wshSysEnv = Rien
    Définir fso = Nothing

    «******************************************* ***********
    Procédures
    «******************************************* ***********
    Procédure de suppression de licence
    Sous DelLicense ()
    'Supprimer la licence-plug-in un à la fois
    sur l'erreur reprennent prochaine
    err.clear

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

    Si err.number <> 0 alors
    err.clear
    Fin Si
    suivant

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

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

    'Supprimer la partition principale
    WshShell.RegDelete ("HKLM \ SOFTWARE \ Microsoft \ MSLicensing \")
    si err.number <> 0 alors err.clear

    End Sub

    «Procédure d'enregistrement de la date de dernière suppression de la licence dans un fichier
    Sous WriteToLog ()
    err.clear

    'Créer un objet pour accéder au fichier désiré pour l'écriture en écrasant les entrées précédentes
    set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 2, true)

    «Nous écrivons au dossier la date du nettoyage du registre
    fLogFile.Write (date)

    set fLogFile = rien 'détruit l'objet
    End Sub





    Script pour combattre mail.ru-agent:

    Const DeleteReadOnly = TRUE

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

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


    Si objFSO.FileExists (agentFile) Then

    objFSO.DeleteFile (agentFile), DeleteReadOnly


    si err.number = 0 alors
    Définissez objEmail = CreateObject ("CDO.Message")

    objEmail.From = "killer@kontora.ru"
    objEmail.To = "admin@kontora.ru"
    objEmail.Subject = "Mail.ru-agent"
    objEmail.Textbody = "Chers messieurs les administrateurs système, je vous informe que l'agent mail.ru ennemi est détruit de" + WshSysEnv ("userprofile")
    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 fait une sauvegarde du système et le verse dans ftp:

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

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

    Pour chaque objectif en colItems
    strCommand = "C: \ Arch \ 7z.exe un D: \ Back-Up \ 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 "
    Suivant
    WshShell.Run strcommand, 1, true
    strCommand = "ftp -s: C: \ CMD \ ctp-commande.txt"
    WshShell.Run strcommand, 1, true





    Le script bloque / débloque les utilisateurs dans AD, en prenant une liste de leurs noms à partir du fichier spécifié, et informe l'administrateur par courrier sur les résultats:

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

    'Spécifiez le domaine
    Const strDomainName = "<nom de domaine eg domain.com>"
    «Nous spécifions OU dans AD, à l'intérieur duquel nous chercherons
    Const strStartOU = "Utilisateurs du domaine"
    strDomainDN = "DC =" & Replace (strDomainName, ".", ", DC =")

    '--------------------- Obtenir des données ---------------------
    Définissez objConnection = CreateObject ("ADODB.Connection")
    objConnection.Open "Provider = ADsDSOObject;"
    Set objCommand = CreateObject ("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "<LDAP: // OU =" & strStartOU & "," & strDomainDN & ">; (& (objectCategory = personne) (objectClass = utilisateur)); ADsPath; subtree"
    objCommand.Properties ("Taille de la page") = 4000

    Définissez objRecordSet = objCommand.Execute


    '------ Indexation --------
    indice = 0
    Bien que pas objRecordset.EOF
    strADsPath = objRecordset.Fields ("ADsPath")
    Définissez 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

    'Le chemin vers le fichier dans lequel la liste des noms de personnes est stockée Les enregistrements de compte dont vous avez besoin d'ouvrir / fermer
    strFileOfFiried = "d: \ file_of_firied.txt"

    Set 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)
    'Réinitialiser les listes de résultats
    UserDisables = ""
    UserUpdated = ""
    UserNoFound = ""
    UserDuplicated = ""
    ii = 0


    Pour chaque strFULL dans inputDataFromFiried
    si Len (strFULL)> 5 alors
    'réinitialiser le compteur trouvé correspondant
    e = 0
    '1er champ: sélectionner à partir de la ligne
    strFIO = Left (strFULL, InStr (strFULL, ";") - 1)
    «Nous nous séparons par le nom
    Familia = Gauche (strFIO, (Instr (strFIO, "") -1))
    N = Trim (mid (strFIO, Instr (strFIO, ""))))
    Imya = Gauche (N, (Instr (N, "") -1))
    Otchestvo = Trim (mi (N, Instr (N, ""))))
    «Nous collectons par nom de pièces
    strFIO = Familia & "" & Imya & "" & Otchestvo

    index = maxindex
    Alors que l'indice> 1

    «Nous divisons par parties le nom dans AD

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

    fin si


    «Nous collectons par nom de pièces
    AdstrFIO = AdFamilia & "" & AdImya & "" & AdOtchestvo
    AdstrFIO1 = AdImya & "" & AdOtchestvo & "" & AdFamilia
    AdstrFIO2 = AdImya & "" & AdFamilia & "" & AdOtchestvo
    'Wscript.Echo AdstrFIO

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


    si e = 1 alors
    'nous bloquons la connexion dans AD
    LockUser (Mlogins (Mindex))
    UserDisables = UserDisables & "Utilisateur:" & strFIO & "est désactivé" & vbCrLf
    fin si
    Ne bloquez pas / ouvrez, car nous avons trouvé plusieurs noms identiques
    si e> 1 alors
    UserNoFound = UserNoFound & "Utilisateur:" & strFIO & "se trouve plus de 1 fois" & vbCrLf
    fin si
    Ne bloquez pas / ouvrez, car utilisateur non trouvé
    si e = 0 alors
    UserDuplicated = UserDuplicated & "Utilisateur:" & 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)
    'commence à envoyer du courrier

    Définissez objNetwork = CreateObject ("Wscript.Network")
    objComputerName = objNetwork.ComputerName
    objUserName = objNetwork.UserName
    Définissez objMessage = CreateObject ("CDO.Message")
    objMessage.From = "<e-mail à partir duquel le mail est envoyé>"
    objMessage.To = "<e-mail à qui le mail est envoyé>"
    objMessage.Subject = "Objet de la lettre"

    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 du serveur smtp>"
    '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.Fermer
    Set objFileSystem = Nothing
    Sub LockUser (strText)
    'dans cette ligne, la valeur TRUE est la désactivation de l'utilisateur, FALSE - ouvre l'utilisateur
    strDisableAccount = VRAI

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


    si strDisableAccount = TRUE alors
    objUser.AccountDisabled = strDisableAccount
    objUser.Description = "Le compte est désactivé à cause du tir" & "at" & "" & Date ()
    objUser.SetInfo
    fin si

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


    End Sub





    Ce script est conçu pour copier un fichier dans des profils itinérants définis par l'utilisateur:

    // ******************************************** ***************************
    // JScript 2004 Shs
    // Ce script est destiné à copier un fichier vers des profils itinérants utilisateur
    // (Ajouter un raccourci dans le menu utilisateur)
    // ******************************************** ***************************
    //
    //
    // ******************************************** ***************************
    // La fonction récursive de la transition dans tous les sous-répertoires à partir du donné (PolFldr)
    // et copiez le fichier spécifié (ScriptName) dans les dossiers spécifiés (FldrName)
    // ******************************************** ***************************
    fonction LoopSubFolders (PolFldr, DeepCount)
    {
    var SubFolders, // Collection de podcasters de stratégie système
    fsoPolFldr, // objet pour accéder au dossier
    CurFldr; // le dossier actuel

    DeepCount ++;
    //WScript.Echo(DeepCount);
    if (DeepCount <DeepLimit)
    {
    fsoPolFldr = FSO.GetFolder (PolFldr);
    // Récupère la collection de sous-répertoires du catalogue de stratégies système
    SubFolders = nouvel énumérateur (fsoPolFldr.SubFolders);
    //
    pour (;! SubFolders.atEnd (); SubFolders.moveNext ())
    {
    CurFldr = SubFolders.item ();
    if (CurFldr.Name == FldrName)
    {
    essayez {
    WScript.Echo (CurFldr.Path + "\\" + ScriptName);
    //WScript.Echo(Path2Scripts + "\\" + ScriptName);
    FSO.CopyFile (Path2Scripts + "\\" + ScriptName, CurFldr.Path + "\\" + ScriptName, 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
    }
    // ******************************************** *****************************

    //
    //


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

    // Bouchon
    // ******************************************** *****************************

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

    var ScriptName = "Mise à jour du menu de travail.lnk",
    FldrName = "Menu principal"; // Le nom du sous-dossier souhaité dans le profil (nous allons copier le fichier de raccourci dedans)
    // ******************************************** *****************************
    **




    // ******************************************** *****************************
    *
    // Déclarer les variables globales
    // ******************************************** *****************************
    *
    var FSO, // FileSystemObject
    Path2Scripts, // Le chemin vers le fichier à distribuer (il est supposé que les fichiers sont dans le même dossier que ce fichier)
    DeepCount, // Profondeur du compteur de récursivité
    DeepLimit, // Limitation de la profondeur de récursivité
    PolF; // Racine, à partir de laquelle commence la recherche et la distribution des fichiers sur les dossiers sous-jacents
    // ******************************************** *****************************
    *
    PolF = "\\\\ DC \\ UserFolders \\ OZI"; ////
    // Crée le 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);





    Inventaire toutes les machines du domaine:

    dim strclass, objAD, obj
    faible invade
    dim constmb, constgb, taillegb
    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")
    sur l'erreur reprennent prochaine
    pour chaque obj dans objAD
    CompAD = right (obj.name, len (obj.name) -3)
    invoquer = date
    temp = "<html>" + chr (10) + "Date de collecte:" & invdate & "<table>" + chr (10)
    compname = ""
    'sur erreur reprendre prochaine
    set objWMIService = GetObject ("winmgmts: //" & CompAD & "/ root \ cimv2")
    i = 0
    s = 0
    d = 0
    q = 0
    'sizegb = ""
    pour a = 0 à 8
    Définir colitems = objwmiservice.instancesof (strclass (a))
    pour chaque objitem dans les colitems
    sélectionnez un cas
    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 (rond (objitem.totalphysicalmemory / constmb)) +" MB </ td> "+ chr (10)
    temp = temp + "</ tr>" + chr (10)
    temp = temp + "<tr> <td>"
    temp = temp + "Modèle d'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 + "CPU" + 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>"
    if objitem.size> 0 alors '= nill alors
    sizegb = cstr (rond (objitem.size / constgb, 2))
    autre chose
    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 + "contrôleur vidéo" + "</ td>" + chr (10) + "<td>" + objitem.caption + chr (10) + "</ td>"
    temp = temp + "</ tr>" + chr (10)
    cas 5
    if objitem.adaptertypeid = 0 et objitem.netconnectionstatus = 2 alors
    temp = temp + "<tr>" + chr (10) + "<td>"
    temp = temp + "Carte 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
    suivant
    suivant
    La dernière partie
    temp = temp + "</ table> </ html>"
    Ecrire un fichier
    Dim fso, tf
    Définissez fso = CreateObject ("Scripting.FileSystemObject")
    Définissez tf = fso.CreateTextFile ("\\ servak ​​\ comp \" & compname & ". Htm", True)
    tf.Write (temp)
    tf.Fermer
    suivant





    Déterminer quand un compte expire (renvoie la date d'expiration pour un compte d'utilisateur):

    Sur l'erreur CV suivant
    Définissez objUser = GetObject _
    ("LDAP: // cn = myerken, ou = gestion, dc = fabrikam, dc = com")

    dtmAccountExpiration = objUser.AccountExpirationDate

    Si err.number = -2147467259 Ou _
    dtmAccountExpiration = "1/1/1970" Alors
    WScript.echo "Aucune expiration de compte n'a été spécifiée"
    Else
    WScript.echo "Expiration du compte:" & _
    objUser.AccountExpirationDate
    Fin Si





    Détermination de l'expiration d'un compte utilisateur (Indique la date d'expiration du compte utilisateur Active Directory MyerKen.):
      Sur l'erreur CV suivant 
    Définissez 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"
    WScript.Echo "Aucune expiration de compte n'a été spécifiée"
    Else
    WScript.Echo "Expiration du compte:" & objUser.AccountExpirationDate
    Fin Si





    Le script établit récursivement l'attribut "L'utilisateur doit changer le mot de passe lors de la prochaine connexion" pour tous les utilisateurs du domaine: PS Pour un fonctionnement correct, il est nécessaire de définir le nom de domaine du point de vue LDAP dans la variable strMyDomain. remplacer tous les points par "DC =". Ainsi, le domaine argo.com se transforme en DC = argo, DC = com en la variable strMyOU, il est nécessaire de mettre le nom d'unité d'organisation, dont les utilisateurs doivent être soumis à la procédure de changement du mot de passe.

    Dim strMyOU
    Dim strMyDomain

    Dim objOU, objUser
    Dim strContainer, strLastUser

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

    sub recurs (ou)
    strContainer = "OU =" + ou + "," + strMyDomain
    set objOU = GetObject ("LDAP: //" & strContainer)
    Pour chaque objUser dans objOU
    strLastUser = objUser.Get ("nom")
    Si objUser.Class = "organizationalUnit" Alors
    recurs (strLastUser + ", OU =" + ou)
    Elseif objUser.Class = "user" Puis
    objUser.Put "pwdLastSet", 0
    objUser.SetInfo
    fin si
    suivant
    fin Sub

    se reproduit strMyOU

    WScript.Quit





    Obtention du ou des SID d'un ordinateur auprès d'AD:

    Sur l'erreur CV suivant
    Dim Tmp, x, b, Sid
    Définissez objSysInfo = CreateObject ("ADSystemInfo")
    strComputerDN = objSysInfo.ComputerName
    Définissez 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éfinissez objGroup = Nothing

    Fonction Convert (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
    Convertir = Clng ("& H" & Tmp)
    fonction de fin
    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, alors au lieu de la chaîne dom = getObject ("LDAP: //" & DC) .get ("Name"), définissez la valeur souhaitée

    sur Erreur reprendre 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 pour la recherche de comptes d'ordinateurs
    'cmd = "<LDAP: //" & DC & ">; (objectClass = ordinateur); distinguishedName, samAccountName; subtree"

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

    objCmd.CommandText = cmd

    set col = objCmd.execute

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

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

    if (accCtrl and &h10000)=0 then
    pwChg=obj.PasswordLastChanged
    if (Err.Number<>0) then
    E=CStr(Err.Number) & " " & Err.Description
    ' WScript.echo acc & space(16-len(acc)) & " - Error : " & E
    Err.clear
    autre chose
    if (now-pwChg)>pwAge then
    WScript.echo acc & space(16-len(acc)) & " - Expired : " & (pwChg+pwAge)
    autre chose
    ' WScript.echo acc & space(16-len(acc)) & " - Expire on : " & (pwChg+pwAge)
    end if
    end if
    autre chose
    ' 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

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

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





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

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





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

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

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

    ' Получение местного времени с реестра.
    Set objShell = CreateObject("Wscript.Shell")
    lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
    & "TimeZoneInformation\ActiveTimeBias")
    If (UCase(TypeName(lngBiasKey)) = "LONG") Then
    lngBias = lngBiasKey
    ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
    lngBias = 0
    For k = 0 To UBound(lngBiasKey)
    lngBias = lngBias + (lngBiasKey(k) * 256^k)
    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)
    Else
    On Error GoTo 0
    Do Until adoRecordset.EOF
    strDN = adoRecordset.Fields("distinguishedName")
    lngDate = adoRecordset.Fields("lastLogon")
    On Error Resume Next
    Set objDate = lngDate
    If (Err.Number <> 0) Then
    On Error GoTo 0
    dtmDate = #1/1/1601#
    Else
    On Error GoTo 0
    lngHigh = objDate.HighPart
    lngLow = objDate.LowPart
    If (lngLow < 0) Then
    lngHigh = lngHigh + 1
    End If
    If (lngHigh = 0) And (lngLow = 0 ) Then
    dtmDate = #1/1/1601#
    Else
    dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
    + lngLow)/600000000 - lngBias)/1440
    End If
    End If
    If (objList.Exists(strDN) = True) Then
    If (dtmDate > objList(strDN)) Then
    objList.Item(strDN) = dtmDate
    End If
    Else
    objList.Add strDN, dtmDate
    End If
    adoRecordset.MoveNext
    Loop
    adoRecordset.Close
    End If
    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 & " заблокирован"



    Else

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





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

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

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

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

    Set objRecordSet = objCommand.Execute

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

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

    dtmAccountExpiration = objUser.AccountExpirationDate

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

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

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

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

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





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

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

    Dim StrDate, CurrentUTC

    'Create the current date and time stamp for query for day before last
    CurrentUTC = DatePart("yyyy", Date)
    'now add Month in mm if only M add leading 0
    if DatePart("m" , Now) < 10 then
    CurrentUTC = CurrentUTC & 0 & DatePart("m" , Now)
    autre chose
    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)
    autre chose
    '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."
    Else
    objEnable.DoIt
    strStatus = "enabled."
    End If
    WScript.Sleep 1000

    WScript.Echo Conn.Name & " " & strStatus





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





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





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