Scripts für Systemadministratoren, nützliche Skripte für Win2003
Otkryvaesh Notebook, und kopieren Sie den Code Dokument mit der Erweiterung .vbs zu sohranyaesh. Als nächstes, wenn Sie ohne eine Netzwerkdomäne kopieren, die ich habe in jedem PC-Start gefunden. Wenn der Netzwerkdomäne, die sozdaesh grupovogo Politik (AD), in dem die Parameter vstavlyaesh Startdatei. Dann wird das Skript ausgeführt, wenn Sie Konto verbinden oder neu starten
Um das Netzlaufwerk verbinden:
Set WshNetwork = Create ( "WScript.Network") 'Erstellen der Objekttyp Netzwerk-Set-Laufwerke = WshNetwork.EnumNetworkDrives c = 0' der Variablen wird für mindestens ein Netzlaufwerk überprüft! i = 0, während ich <= Drives.Count-1 'Check für Netzwerk Dikov c = 1' MsgBox "Haben Sie ein Netzlaufwerk" & Drives.Item (i) & "-" & Drives.Item (i + 1) i = i + 2 Wend, wenn c = 0 ist, dann 'MsgBox "Es ist kein zugeordnetes Laufwerk"' MsgBox "ein Versuch, ein Netzlaufwerk zuordnen" 'Set WshNetwork = Create ( "WScript.Network") WshNetwork.MapNetworkDrive "Z", "\ \ Server \ Ordnername "End if
So schließen Sie den Drucker:
Set WshNetwork = WScript.CreateObject ( "WScript.Network") WshNetwork.AddWindowsPrinterConnection "\\ imyaprintservera \ Druckername"
Überprüfen Sie die Parameter von Änderungen in AD und Senden von Benachrichtigungen per E-Mail oder in einer Sharepoint - Liste:
/ * ================================================ ========
'
'Script Informationen: Senden von Nachrichten an den Administrator
"Wenn die Daten in AD-Nachrichten senden können
'E-Mail oder erstellen Sie eine Aufgabe in MOSS 2007
'
'Autor: Vladimir Korotenko SDC 2008 Voronezh
'Ursprünglich erstellt: 15.04.2008 - 11.01.47
'Original Pfad: untitled.vbs
'Beschreibung: Erstellen von Dump-Domain-Schema und vergleichen
Aus einer früheren Kopie 'für Änderungen und dann
'Benachrichtigung
'
'================================================= =======
* /
// Script-Einstellungen Abschnitt
var SMTPHost, SMTPPort, Mailsubject, Mailto, Mailfrom, Textbody;
var DumpCmdLine, WinDiff, DumpFile, DumpFileOld, WorkingFolder;
var DiffFile, DiffMessage;
var SpListGuid, SpHost, UseSp;
SMTPHost = "COMP1"; // E-Mail-Server-Nachrichten zu senden
SMTPPort = 25; // E-Mail-Server-Port
Mailsubject = "Änderungen an der Organisationsplan"; // Header zu schreiben Beiträge
MailTo = "[email protected]"; // Adresse des Empfängers
Mailfrom = "[email protected]"; // Von-Adresse
DumpCmdLine = "C: \\ Windows \\ System32 \\ ldifde.exe"; // Befehlszeile ihre Daten AD-Dump
WinDiff = "c: \\ Temp \\ Windiff.exe"; // Programm zum Vergleichen 2
DumpFile = "schema.ldf"; // Name 1-Datei zu speichern
DumpFileOld = "schemaOld.ldf"; // Name 2-Dateien für den Vergleich
WorkingFolder = "c: \\ Temp \\"; // Arbeitsordner für temporäre Dateien
DiffFile = "diff.log"; // Aufruf Datei Ergebnisse zu vergleichen
DiffMessage = "1 aufgelisteten Dateien"; // Linie, die wir in den Dateien von lichii suchen
SpListGuid = "{3D9B5EFB-C0C5-434C-B1DA-61FEA6E9D63B}";
SpHost = "http: // portal4";
UseSp = true; Senden von Nachrichten an die Liste der Share Point //
// Ende Abschnitt Einstellungen
/ ************************************************* ********************
Die Codeänderung nur im Fall von einem tiefen Verständnis von dem, was zu tun
und was am wichtigsten ist, wie !!!!!!!!! zu tun
************************************************** ******************** /
var Datei, wsh;
// Erstellen Sie ein Objekt für
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);
// Überprüfen Sie den Unterschied in der 2-Dateien
Funktion CheckChanges (pathFrom, pathto)
{
var cmd;
// Windiff.exe output.ldf schemaOld.ldf -Sx logcmd
cmd = WinDiff + "" + pathFrom + "" + pathto + "-Sx" + WorkingFolder + DiffFile;
wsh.Run (cmd, 1,1);
objFile = file.OpenTextFile (WorkingFolder + DiffFile, 1);
var Buff = new String ();
Buff = objFile.ReadAll ();
objFile.Close ();
var arr = new Array ();
arr = buff.split ( "\ r \ n");
for (var i = 0; i <arr.length; i ++)
{
// Prüfen, ob die Dateien unterschiedlich sind, so dass, wenn Sie eine Nachricht senden
if (arr [i] .indexOf (DiffMessage)> - 1)
{
var d = new Date ();
Textbody = "Erkannte Änderungen in der Vergleichsschaltung Time:." + D.toString ();
Sendmessage ();
}
}
}
// Die Zeichenfolge aus den sich häufig ändernden Attribute entfernen
Funktion TrimUnused (name)
{
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);
for (var i = 0; i <arr.length; i ++)
{
if (arr [i] .indexOf ( "lastlogon") == -1) {
objFile.WriteLine (arr [i]);
}
}
objFile.Close ();
}
// E-Mail an alle Parameter senden müssen in den Abschnitt globalen Variablen angegeben werden
Funktion Sendmessage () {
if (UseSp)
{
NewMessage (SpListGuid, SpHost, Textbody);
Rückkehr;
}
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 ();
}
// Erstellen Sie eine neue Nachricht in einer Sharepoint-Liste
Funktion NewMessage (Liste, hostname, message)
{
var web, erf, Batch;
web = new ActiveXObject ( "MSXML2.XMLHTTP.3.0");
Batch = "<Batch ListVersion = '0'> <Methode ID = '1' Cmd = 'Neu'> <Feldname = 'Titel'>" + + message "</ Field> </ Method> </ Batch>" ;
var req = "<? xml version =" 1.0 "encoding =" utf-8 '??> <soap: Envelope xmlns: xsi =' http: //www.w3.org/2001/XMLSchema-instance 'xmlns: xsd = 'http://www.w3.org/2001/XMLSchema' xmlns: Seife = 'http: //schemas.xmlsoap.org/soap/envelope /> <soap: Body> <Updatelist xmlns =' http: // schemas.microsoft.com/sharepoint/soap /> ";
erf + = "<Listenname>" + Liste + "</ Listenname>";
erf + = "<Updates>" + Batch + "</ Aktuelles> </ Updatelist> </ soap: Body> </ soap: Envelope>";
var r = hostname + "/_vti_bin/Lists.asmx?op=UpdateListItems";
web.Open ( "POST", r, False);
web.setRequestHeader ( "Content-Type", "text / xml; charset = utf-8");
web.setRequestHeader ( "Soapaction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
web.send (erf);
//'WScript.Echo erf
//'WScript.Echo Chr (13) & Chr (10)
//'WScript.Echo web.responseText
}
Script , um die Lizenz von Terminals auf den Clients zu entfernen , alle 30 Tage:
"Entfernt ggf. Registrierungsschlüssel, die temporäre Lizenz speichert wenn man 30 Tage vergangen sind.
Option Explicit
Dim iCount, ZAVV, dReadDat, strPath, strRegKey 'Deklaration von Variablen
Dim fso, fLogFile, wshSysEnv, WshShell 'klassifizierten Anlagen
ZAVV = date "das aktuelle Datum erhalten
err.clear 'yf jeden Fall sauber Stack-Fehler
On Error Resume Next 'wird nach dieser Fehlermeldung nicht angezeigt
'Erstellen Objekt Shell
Set WshShell = WScript.CreateObject ( "WScript.Shell")
'Create Objektumgebung, die die erforderliche Systemvariable enthält
Set wshSysEnv = WshShell.Environment ( "Prozess")
"Wir nehmen die Systemvariable aus (den Pfad zu dem Ordner vindovskoy) und legen Sie sie in eine String-Variable für den späteren Gebrauch
strPath = wshSysEnv ( "windir")
"Erstellen Sie ein Objekt Dateisystemzugriff und Objektzugriff auf die gewünschte Datei zu lesen
Set fso = Create ( "Scripting.FileSystemObject")
set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 1, false)
"Die wichtigste Voraussetzung für die Entfernung oder nicht entfernt Registry-Zweig
Wenn err.number <> 0 dann
"Laufende Remote Registry Zweig Verfahren
Rufen Sie DelLicense
"Die Eingabe der letzten Tag der Entfernung der Lizenz in der Protokolldatei, in den vorhandenen Eintrag überschreiben
Rufen Sie WriteToLog
sonst
"Ich lese aus der Datei und vergleichen Sie das Datum der letzten Entnahme einer Lizenz mit dem aktuellen Datum
dReadDat = CDate (fLogFile.ReadLine ())
"Es muss sein (ZAVV - dReadDat)
Wenn (ZAVV - dReadDat)> 29 dann
"Laufende Remote Registry Zweig Verfahren
Rufen Sie DelLicense
"Die Eingabe der letzten Tag der Entfernung der Lizenz in der Protokolldatei, in den vorhandenen Eintrag überschreiben
Rufen Sie WriteToLog
End If
End If
"Zerstören Sie alle unnötigen Gegenstände mehr
Set WshShell = Nothing
Set wshSysEnv = Nothing
Set fso = Nothing
'************************************************* ***********
"Verfahren
'************************************************* ***********
'Das Verfahren zur Entfernung der Lizenz
Sub DelLicense ()
"Entfernen Sie die Plug-Lizenz für einen
On Error Resume Next
err.clear
für iCount = 0 bis 9
strRegKey = "HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store \ License00" & iCount & "\"
WshShell.RegDelete (strRegKey)
Wenn err.number <> 0 dann
err.clear
End If
nächste
"Ziehen Sie den Stecker des Hauptabschnitts
WshShell.RegDelete ( "HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ Store \")
wenn err.number <> 0 dann Err.Clear
WshShell.RegDelete ( "HKLM \ SOFTWARE \ Microsoft \ MSLicensing \ HardwareID \")
wenn err.number <> 0 dann Err.Clear
"Löschen Sie die primäre Partition
WshShell.RegDelete ( "HKLM \ SOFTWARE \ Microsoft \ MSLicensing \")
wenn err.number <> 0 dann Err.Clear
End Sub
"Das Verfahren zur Aufzeichnung des Datums der letzten Entnahme der Lizenzdatei
Sub WriteToLog ()
err.clear
"Erstellen Sie ein Objekt Zugriff auf die gewünschte Datei auf dem Aufzeichnungs und überschreiben frühere Einträge
set fLogFile = fso.OpenTextFile (strPath & "\ LiDelDat.alx", 2, true)
"Schreiben Sie an die Datei Reinigung der Registry-Datum
fLogFile.Write (Datum)
set fLogFile = nichts "zerstören das Objekt
End Sub
Script mail.ru-Mittel zur Bekämpfung von :
Konst DeleteReadOnly = TRUE
Set WshShell = WScript.CreateObject ( "Wscript.Shell")
Set WshSysEnv = WshShell.Environment ( "Process")
Set objFSO = Create ( "Scripting.FileSystemObject")
agentFile = WshSysEnv ( "Userprofile") + "\ Application Data \ Mail.Ru \ Agent \ magent.exe"
Wenn objFSO.FileExists (agentFile) Then
objFSO.DeleteFile (agentFile), DeleteReadOnly
wenn err.number = 0, dann
Set objEmail = Create ( "CDO.Message")
objEmail.From = "[email protected]"
objEmail.To = "[email protected]"
objEmail.Subject = "Mail.ru-Agent"
objEmail.Textbody = "Sehr geehrter Herr, Systemadministratoren, benachrichtigt Sie, dass ein Feind mail.ru Mittel zerstört wird" + 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") = _
"Ip Mail-Server"
objEmail.Configuration.Fields.Item _
( "Http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
end if
end if
Das Scripting macht das Backup - System und gießt es auf dem ftp:
strComputer = "."
Set WshShell = WScript.CreateObject ( "WScript.Shell")
strCommand = "C: \ WINDOWS \ system32 \ ntbackup.exe Backup @C: \ cmd \ Back-up-Drive-C.bks / a / v: keine / r: nein / rs: nein / hc: off / m Normal / j Back-up-Drive-C / l: s / w D: \ Back-Up \ Backup-Laufwerk-c.bkf "
WshShell.Run strCommand, 1, true
Set objWMIService = GetObject ( "winmgmts: \\" & strComputer & "\ root \ cimv2")
Set colItems = objWMIService.ExecQuery ( "von Win32_LocalTime * Wählen Sie")
For Each objItem in colItems
strCommand = "C: \ Arch \ 7z.exe ein D: \ Back-Up \ Backup-dc-SRV-01-DayOf-Woche -" & objItem.DayOfWeek & "7z D: \ Back-Up \ * BKF -t7z .. -M0 = BCJ2 -m1 = LZMA: d23 -m2 = LZMA: d19 -m3 = LZMA: d10M -mb0: 1 -mb0s1: 2 -mb0s2: 3 "
nächste
WshShell.Run strCommand, 1, true
strCommand = "ftp -s: C: \ CMD \ CtP-command.txt"
WshShell.Run strCommand, 1, true
Das Skript sperren / entsperren Benutzer im AD, sie aus einem bestimmten Dateinamensliste nehmen, und den Administrator per E - Mail über die Ergebnisse informieren:
Dim Mlogins (9000), MAdspath (9000), MFullName (9000)
Dim objFileSystem, objInputFileFromKardy, strData
Set objFSO = Create ( "Scripting.FileSystemObject")
Konst OPEN_FILE_FOR_READING = 1
"Geben Sie die Domäne
Konst strDomainName = "<domain name zB domain.com>"
"Geben Sie die OU in AD, in dem wir suchen
Konst strStartOU = "Domänen-Benutzer"
strDomainDN = "DC =" & Ersetzen (strDomainName, ".", "DC =")
'--------------------- -------------------- Erste Daten
Set objConnection = Create ( "ADODB.Connection")
objConnection.Open "Provider = ADsDSOObject;"
Set ObjCommand = Create ( "ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP: // OU =" & strStartOU & "," & strDomainDN & ">; (& (objectclass = person) (objectclass = user)); ADsPath; subtree"
objCommand.Properties ( "Page Size") = 4000
Set objRecordSet = objCommand.Execute
'Indexing -------- ------
index = 0
Während Nicht objRecordset.EOF
strADsPath = objRecordset.Fields ( "ADsPath")
Set objUser = GetObject (strADsPath)
MFullName (Index) = objUser.DisplayName & ""
Mlogins (Index) = objUser.sAMAccountName
MAdspath (Index) = strADsPath
Index = Index + 1
objRecordSet.MoveNext
Wend
objConnection.Close
Index = Index-1
MaxIndex = index
'Pfad zur Datei, die die Liste der Namen Personen, deren Konten speichert müssen zum Öffnen / Schließen
strFileOfFiried = "d: \ file_of_firied.txt"
Set objFileSystem = Create ( "Scripting.FileSystemObject")
Set objInputFileFromKardy = objFileSystem.OpenTextFile (strFileOfFiried, OPEN_FILE_FOR_READING)
'Auspuffe Inhalt der Datei in ein Array
inputDataFromFiried = Split (objInputFileFromKardy.ReadAll, vbNewLine)
"Null Ergebnislisten
UserDisables = ""
UserUpdated = ""
UserNoFound = ""
UserDuplicated = ""
ii = 0
Für jede strFULL In inputDataFromFiried
wenn Len (strFULL)> 5 dann
'Null aus der Zähler der Spiele gefunden
e = 0
'1. Feld: Wählen Sie Zeilen des Benutzernamens
strFIO = Links (strFULL, InStr (strFULL, ";") - 1)
"Teile in Teilen Namens
Familia = Left (strFIO, (Instr (strFIO, "") -1))
N = Trim (mid (strFIO, Instr (strFIO, "")))
Imya = Left (N, (Instr (N, "") -1))
Otchestvo = Trim (mid (N, Instr (N, "")))
"Um es in Teilen Namen
strFIO = Familia & "" & imya & "" & Otchestvo
index = MaxIndex
Während Index> 1
"Teile durch Teile Namen in AD
AdFamilia = ""
AdImya = ""
AdOtchestvo = ""
AdFamilia = Left (MFullName (Index), (Instr (MFullName (Index), "") -1))
wenn Len (Trim (mid (MFullName (Index), Instr (MFullName (Index), ""))))> 1, dann
AdN = Trim (mid (MFullName (Index), Instr (MFullName (Index), "")))
wenn Len (Left (AdN, (Instr (AdN, ""))))> 1, dann
AdImya = Left (AdN, (Instr (AdN, "") -1))
wenn Len (Trim (mid (AdN, Instr (AdN, ""))))> 1, dann
AdOtchestvo = Trim (mid (AdN, Instr (AdN, "")))
end if
end if
end if
"Um es in Teilen Namen
AdstrFIO = AdFamilia & "" & AdImya & "" & AdOtchestvo
AdstrFIO1 = AdImya & "" & AdOtchestvo & "" & AdFamilia
AdstrFIO2 = AdImya & "" & AdFamilia & "" & AdOtchestvo
"Wscript.Echo AdstrFIO
if (StrFIO = AdstrFIO) oder (StrFIO = AdstrFIO1) oder (StrFIO = AdstrFIO2), dann
e = e + 1
Mindex = index
end if
Index = Index-1
Wend
wenn e = 1 ist, dann
"Schwebend Login AD
LockUser (Mlogins (Mindex))
UserDisables = UserDisables & "Benutzer:" & strFIO & "deaktiviert" & vbCrLf
end if
"Haben die Öffnung nicht blockiert / da wir haben mehr mit dem gleichen Namen gefunden
wenn e> 1 dann
UserNoFound = UserNoFound & "Benutzer:" & strFIO & & vbCrLf "mehr als 1 mal gefunden wird"
end if
"Haben die Öffnung nicht blockiert / da Benutzer nicht gefunden
wenn e = 0, dann
UserDuplicated = UserDuplicated & "Benutzer:" & strFIO & "nicht gefunden wird" & vbCrLf
end if
end if
nächste
"Wenn es irgendein Ergebnis, dann
if (len (UserDisables) + len (UserNoFound) + len (UserDuplicated)> 10) dann
'Begin Mail senden
Set objNetwork = Create ( "Wscript.Network")
objComputerName = objNetwork.ComputerName
objUserName = objNetwork.UserName
Set objMessage = Create ( "CDO.Message")
objMessage.From = "<E-Mail von jemandem geschickt mail>"
objMessage.To = "<E-Mail jemand gesendete E-Mail>"
objMessage.Subject = "Betreff"
"Setzen Sie kodirovochku
objMessage.bodypart.charset = "koi8-r"
objMessage.TextBody = UserDisables & vbCrLf & UserNoFound & vbCrLf & UserDuplicated
objMessage.Configuration.Fields.Item _
( "Http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Name oder IP-Adresse des Remote-SMTP-Server
objMessage.Configuration.Fields.Item _
( "Http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<SMTP-Server-Adresse>"
'Server-Port (in der Regel 25)
objMessage.Configuration.Fields.Item _
( "Http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
'== End Remote-SMTP-Server-Konfiguration Abschnitt ==
objMessage.Send
end if
objInputFileFromKardy.Close
Set objFileSystem = Nothing
Sub LockUser (strText)
'In dieser Zeile Wert TRUE - Benutzer diseyblit, FALSCH - öffnet den Benutzer
strDisableAccount = TRUE
strUserLogin = strText
set objUser = GetObject ( "WinNT: // <domain> /" & strUserLogin & "user")
wenn strDisableAccount = TRUE dann
objUser.AccountDisabled = strDisableAccount
objUser.Description = "Konto ist wegen Abfeuern Disabled" & "in" & "" & Date ()
objUser.SetInfo
end if
wenn strDisableAccount = FALSE dann
objUser.AccountDisabled = strDisableAccount
objUser.Description = & "an" & "" & Date () "Konto wird von Skript Eröffnet"
objUser.SetInfo
end if
End Sub
Dieses Skript wird verwendet , um die Datei an den Benutzer Roaming - Profile zu kopieren:
// ************************************************ *****************************
// JScript 2004 Shs
// Dieses Skript wird verwendet, um die Datei an den Benutzer Roaming-Profile zu kopieren
// (Ein Tag im Benutzermenü hinzufügen)
// ************************************************ ******************************
//
//
// ************************************************ *****************************
// Rekursive Funktion verschieben Sie alle Unterverzeichnisse mit dem Auftrag zu starten (PolFldr)
// Und kopieren angegebene Datei (Script) auf dem Ordner Aufgaben (FldrName)
// ************************************************ ******************************
Funktion LoopSubFolders (PolFldr, DeepCount)
{
var Unterordner // Sammlung podkatologov Systemrichtlinien
fsoPolFldr, Objekt // Zugriff auf den Ordner
CurFldr; // Aktueller Ordner
DeepCount ++;
//WScript.Echo(DeepCount);
if (DeepCount <DeepLimit)
{
fsoPolFldr = FSO.GetFolder (PolFldr);
// Eine Sammlung von Unterverzeichnisse Systemrichtlinien Get
Subfolders = new Enumerator (fsoPolFldr.SubFolders);
//
for (;! SubFolders.atEnd (); SubFolders.moveNext ())
{
CurFldr = SubFolders.item ();
if (CurFldr.Name == FldrName)
{
try {
WScript.Echo (CurFldr.Path + "\\" + Script);
//WScript.Echo(Path2Scripts + "\\" + Scriptname);
FSO.CopyFile (Path2Scripts + "\\" + Script, CurFldr.Path + "\\" + Script, true)
}
catch (e)
{// Handle Fehler
var Msg;
if (! e = 0) Msg = "Fehler -" + e.description
sonst Msg = "Ok";
WScript.Echo (Msg);
}
}
// Rekursiver Aufruf
LoopSubFolders (CurFldr, DeepCount);
} // Ende für
} // End if
}
// ************************************************ ********************************
//
//
// ************************************************ ********************************
// Cap
// ************************************************ ********************************
//-Code geht hier von den Befehlszeilenoptionen bekommen
// 1) der Name der Datei, wenn Peers
// 2) den Namen des Verzeichnisses, in jedem Profil, das verteilte Datei kopiert werden
// ************************************************ ********************************
var Script = "Aktualisieren Sie die Arbeits menyu.lnk"
FldrName = "Hauptmenü"; // Der Name der Unterordner in dem Profil (es wird die Verknüpfung-Datei kopieren)
// ************************************************ ********************************
**
// ************************************************ ********************************
*
Deklarieren globale Variablen //
// ************************************************ ********************************
*
var FSO, // Objekt Filesystem
Path2Scripts, // rasprostronyaetsya auf den Dateipfad (die Dateien unter der Annahme, im selben Ordner wie die Datei)
DeepCount, // Zähler Entpackungstiefe
DeepLimit, // Grenzwert Entpackungstiefe
POLF; // Wurzel, aus der die Suche zu starten und die Ausbreitung auf die zugrunde liegenden Dateiordner
// ************************************************ ********************************
*
POLF = "\\\\ DC \\ UserFolders \\ OZI"; ////
// Ein Objekt Filesystem erstellen;
FSO = WScript.CreateObject ( "Scripting.FileSystemObject");
DeepCount = 0;
Path2Scripts = FSO.GetParentFolderName (FSO.GetFile (WScript.ScriptFullName));
Begrenzen Sie die Tiefe der rekursiven Aufrufe //
DeepLimit = 4;
LoopSubFolders (POLF, DeepCount);
Iventarizatsiya alle Maschinen in der Domäne:
dim strClass, objAD, OBJ
dim invdate
dim constmb, constgb, sizegb
dim compname, temp, Compad
constmb = 1048576
constgb = 1073741824
strClass = array ( "Win32_ComputerSystem", "Win32_BIOS", "Win32_Processor", _
"Win32_DiskDrive", "Win32_VideoController", "Win32_NetworkAdapter", _
"Win32_sounddevice", "win32_SCSIController", "Win32_Printer")
set objAD = GetObject ( "LDAP: // CN = Computers, DC = aaa, DC = bbb, DC = ccc")
objAD.filter = array ( "Computer")
On Error Resume Next
für jeden obj in objAD
Compad = rechts (obj.name, len (obj.name) -3)
invdate = date
temp = "<html>" + chr (10) + "Sammlung Date:" & invdate & "<table>" + chr (10)
compname = ""
"On Error Resume Next
set objWMIService = GetObject ( "winmgmts: //" & Compad & "/ root \ cimv2")
i = 0
s = 0
d = 0
q = 0
'Sizegb = ""
für a = 0 bis 8
Set colItems = objwmiservice.instancesof (strClass (a))
für jede objitem in colItems
Wählen Fall ein
Fall 0
temp = Temp + "<tr> <td>"
temp = Temp + "Computername" + "</ td> <td>" + objitem.name + "</ td>" + chr (10)
temp = Temp + "</ tr>" + chr (10)
temp = Temp + "<tr> <td>"
temp = Temp + "RAM" + "</ td> <td>" + cstr (rund (objitem.totalphysicalmemory / constmb)) + "MB </ td>" + chr (10)
temp = Temp + "</ tr>" + chr (10)
temp = Temp + "<tr> <td>"
temp = Temp + "Computermodell" + "</ td> <td>" + objitem.model + "</ td>" + chr (10)
temp = Temp + "</ tr>" + chr (10)
compname = objitem.name
Fall 1
temp = Temp + "<tr> <td>"
temp = Temp + "Motherboard" + "</ td> <td>" + objitem.SMBIOSBIOSVersion + "</ td>" + chr (10)
temp = Temp + "</ tr>" + chr (10)
temp = Temp + "<tr> <td>"
temp = Temp + "BIOS" + "</ td> <td>" + objitem.caption + "</ td>" + chr (10) + "<td>" + chr (10) + "</ td>"
temp = Temp + "</ tr>" + chr (10)
Fall 2
s = s + 1
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = TEMP + "Prozessor" + CSTR (s) + "</ td>" + chr (10) + "<td>" + objitem.name + "frequency" + CSTR (objitem.CurrentClockSpeed) + chr (10) + " </ td> "
temp = Temp + "</ tr>" + chr (10)
Fall 3
i = i + 1
temp = Temp + "<tr>" + chr (10) + "<td>"
wenn objitem.size> 0 dann '= nill dann
sizegb = cstr (rund (objitem.size / constgb, 2))
sonst
sizegb = cstr (0)
end if
temp = Temp + "Hard Drive" + cstr (i) + "</ td>" + chr (10) + "<td>" + objitem.model + "" + sizegb + "D </ td>" + chr ( 10)
temp = Temp + "</ tr>" + chr (10)
Fall 4
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = Temp + "Videokontroler" + "</ td>" + chr (10) + "<td>" + objitem.caption + chr (10) + "</ td>"
temp = Temp + "</ tr>" + chr (10)
Fall 5
wenn objitem.adaptertypeid = 0 und objitem.netconnectionstatus = 2 dann
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = Temp + "Netzwerkadapter" + "</ td>" + chr (10)
temp = Temp + "<td>" + objitem.name + chr (10) + "</ td>"
temp = Temp + "</ tr>" + chr (10)
end if
6 Fall
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = Temp + "Soundkarte" + "</ td>" + chr (10)
temp = Temp + "<td>" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
Fall 7
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = Temp + "SCSI-Adapter" + "</ td>" + chr (10)
temp = Temp + "<td>" + objitem.manufacturer + "" + objitem.caption + chr (10) + "</ td> </ tr>" + chr (10)
8 Fall
d = d + 1
temp = Temp + "<tr>" + chr (10) + "<td>"
temp = Temp + "Drucker" + cstr (d) + "</ td>" + chr (10) + "<td>" + objitem.name + chr (10) + "</ td>"
temp = Temp + "</ tr>" + chr (10)
Ende wählen
nächste
nächste
"Der letzte Teil
temp = Temp + "</ table> </ html>"
'Datei aufzeichnen
Dim fso, tf
Set fso = Create ( "Scripting.FileSystemObject")
Set tf = fso.CreateTextFile ( "\\ servak \ comp \" & compname & ". Htm", True)
tf.Write (temp)
tf.Close
nächste
Bestimmen , wann ein Konto läuft ab (Gibt das Ablaufdatum für ein Benutzerkonto):
On Error Resume Next
Set objUser = GetObject _
( "LDAP: // cn = myerken, ou = Management, dc = fabrikam, dc = com")
dtmAccountExpiration = objUser.AccountExpirationDate
Wenn err.number = -2147467259 Or _
dtmAccountExpiration = "1.1.1970" Dann
WScript.Echo "kein Konto Ablauf angegeben"
sonst
WScript.Echo "Konto Ablauf:" & _
objUser.AccountExpirationDate
End If
Die Bestimmung Wenn ein Benutzerkonto Gültig bis (Reports das Datum , das die MyerKen Active Directory - Benutzerkonto abläuft.):
On Error Resume Next
Set objUser = GetObject _
( "LDAP: // cn = MyerKen, ou = Management, dc = NA, dc = fabrikam, dc = com")
dtmAccountExpiration = objUser.AccountExpirationDate
Wenn Err.Number = -2147467259 Oder dtmAccountExpiration = "1.1.1970" Dann
WScript.Echo "kein Konto Ablauf angegeben"
sonst
WScript.Echo "Konto Ablauf:" & objUser.AccountExpirationDate
End If
Die Skript rekursiv alle Attribute der Domain - Benutzer setzt auf "Benutzer muss das Kennwort bei der nächsten Anmeldung ändern ": PS Ddlya korrekt funktionieren, müssen Sie eine Variable strMyDomain Domain - Namen aus der Sicht des LDAP definiert werden - das heißt, alle Punkte durch "DC =" ersetzt werden. Somit = die Domäne argo.com in Gleichstrom umgewandelt argo, DC = com in der Variablen strMyOU den Namen und die Organisationseinheit platzieren müssen, die Benutzer müssen das Kennwort ändern Verfahren auszusetzen.
Dim strMyOU
Dim strMyDomain
Dim objOU, objUser
Dim strContainer, strLastUser
strMyOU = "argo"
strMyDomain = "DC = argo, DC = com"
Unter wiederkehrt (ou)
strContainer = "OU =" + ou + "," + strMyDomain
set objOU = GetObject ( "LDAP: //" & strContainer)
Für jede objUser in objOU
strLastUser = objUser.Get ( "name")
Wenn objUser.Class = "organizationalUnit" Dann
wiederkehrt (strLastUser + ", OU =" + ou)
Elseif objUser.Class = "user" Dann
objUser.Put "pwdLastSet", 0
objUser.SetInfo
end if
nächste
End Sub
wiederkehrt strMyOU
WScript.Quit
Zubereitung SID (a) einen Computer von AD:
On Error Resume Next
Dim Tmp, x, b, Sid
Set objSysInfo = Create ( "ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objCmp = GetObject ( "LDAP: //" & strComputerDN)
Sid = objCmp.objectSID
gSID = "S-1-5 -" & Convert (16,19) & "-" & Convert (12,15) & "-" & Convert (8,11) & "-" & Convert (4,7) & "-" & Convert (0,3)
Set objGroup = Nothing
Funktion Convert (u, l)
Tmp = ""
Für x = UBound (Sid) -u UBound (Sid) -l Schritt -1
b = AscB (MidB (SID, x + 1))
Tmp = Tmp & Hex (b \ 16) & Hex (b und 15)
nächste
Convert = Clng ( "& H" & T mp)
Ende Funktion
wscript.echo (gSID)
Suchen Konten in ActiveDirectory- mit abgelaufenen Passwörtern: Wenn die Domäne NetBIOS - Name unterscheidet sich von der DNS auf den ersten Punkt ist, die Hand statt einer Zeichenfolge dom = GetObject ( "LDAP: // " & DC) .get ( "Name") den gewünschten Wert zuweisen
On Error Resume Next
DC = GetObject ( "LDAP: // RootDSE") .get ( "defaultNamingContext")
dom = GetObject ( "LDAP: //" & DC) .get ( "Name")
pwAge = GetObject ( "WinNT: //" & dom) .get ( "MaxPasswordAge") / 86400
set objConnection = Create ( "ADODB.Connection")
objConnection.open "Provider = ADsDSOObject;"
set objCmd = Create ( "ADODB.Command")
objCmd.ActiveConnection = objConnection
'- Befehl für Computerkonten suchen
'Cmd = "<LDAP: //" & DC & ">; (objectclass = Computer); distinguishedName, samAccountName; subtree"
'- Befehl für Benutzerkonten suchen
cmd = "<LDAP: //" & DC & ">; (objectclass = person); distinguishedName, samAccountName; subtree"
objCmd.CommandText = cmd
set col = objCmd.execute
wenn col.recordCount> 0, dann
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
sonst
if (now-pwChg)>pwAge then
WScript.echo acc & space(16-len(acc)) & " - Expired : " & (pwChg+pwAge)
sonst
' WScript.echo acc & space(16-len(acc)) & " - Expire on : " & (pwChg+pwAge)
end if
end if
sonst
' 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)
nächste
objRecordSet.MoveNext
' Если компьютер не отвечает - выводим сообщение и перемещаемся к следующему
Else
WScript.Echo(strComputer & ": Не отвечает...")
objRecordSet.MoveNext
End If
Schleife
Этот скрипт просматривает системный журнал Безопасность и если обнаружит в нём запись об изменении настроек браузера, то уведомит об этом :
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
Schleife
Скрипт ищет по всем контроллерам пользователей, которые не логинились уже более 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)
nächste
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
Schleife
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
Schleife
adoRecordset.Close
End If
nächste
' Создание логов
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
nächste
'Закрытие логов
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)
sonst
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)
sonst
'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 = "[email protected]"
objEmail.To = rs.Fields("mail")
'Optional BCC field
'objEmail.BCC = "[email protected]"
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
Schleife
'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
nächste
Set Conn = Nothing
For Each clsConn in colNetwork.Items
If Instr(LCase(clsConn.name), LCase(strConn)) Then
' получение указанного подключения
Set Conn = clsConn
Exit For
End If
nächste
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
nächste
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
Kommentare
Kommentar nicht vergessen , dass der Inhalt und der Ton Ihrer Nachrichten , die Gefühle von echten Menschen verletzen können, Respekt und Toleranz gegenüber seinen Gesprächspartnern, auch wenn Sie Ihr Verhalten in Bezug auf die Meinungsfreiheit ihre Meinung nicht teilen, und die Anonymität des Internets, ändert sich nicht nur virtuell, sondern realen Welt. Alle Kommentare werden aus dem Index, Spam - Kontrolle versteckt.