Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.237.15.145] |
|
Страницы: (22) 1 [2] 3 4 ... 21 22 ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
'************************************************************** '* Имя: Read_from_Register.vbs * '* Язык: VBScript * '* Назначение: Пример чтения из реестра значений разных типов * '************************************************************** Const compName = "." Const resFileSpec = "C:\ListValues.txt" Const HKey = &H80000001 'HKCU Const keyPath = "SOFTWARE\Microsoft\Office\10.0\Common\LanguageResources" Const ForWriting = 2 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & compName & "\root\default:StdRegProv") objReg.EnumValues HKey, keyPath, arrNames, arrTypes numValues = UBound(arrNames) Set objFS = CreateObject("Scripting.FileSystemObject") Set resFile = objFS.OpenTextFile(resFileSpec, ForWriting, True) For curVal = 0 To numValues Select Case arrTypes(curVal) Case 1 sTemp = "SZ" & " = " objReg.GetStringValue HKey, keyPath, arrNames(curVal), paramVal sTemp = sTemp & paramVal Case 2 sTemp = "EXPAND_SZ" & " = " objReg.GetExpandedStringValue HKey, keyPath, arrNames(curVal), paramVal sTemp = sTemp & paramVal Case 3 sTemp = "BINARY" & " = " objReg.GetBinaryValue HKey, keyPath, arrNames(curVal), paramVal For i = 0 To UBound(paramVal) xBin = Hex(paramVal(i)) If Len(xBin) = 1 Then xBin = "0" & xBin End If sTemp = sTemp & xBin & " " Next Case 4 sTemp = "DWORD" & " = " objReg.GetDWORDValue HKey, keyPath, arrNames(curVal), paramVal sTemp = sTemp & paramVal Case 7 sTemp = "MULTI_SZ" & " = " objReg.GetMultiStringValue HKey, keyPath, arrNames(curVal), paramVal For i = 0 To UBound(paramVal) sTemp = sTemp & paramVal(i) & " " Next Case Else: sTemp = arrTypes(curVal) End Select resFile.WriteLine (arrNames(curVal) & " >> " & sTemp) Next resFile.Close Set resFile = Nothing Set objFS = Nothing Set objReg = Nothing Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#17
,
|
|
|
'*************************************************************************** '* Имя: Verb_Print.vbs * '* Язык: VBScript * '* Назначение: Использование стандартного действия ("глагола") над файлом * '* для вывода его на печать без явного открывания в приложении * '*************************************************************************** Const myFileName = "Text.txt" Const pathToFile = "C:\" Const argToVerb = "" Const stdVerb = "print" Const showMode = 0 'работа в скрытом окне Set objApp = CreateObject("Shell.Application") objApp.ShellExecute myFileName, argToVerb, pathToFile, stdVerb, showMode Set objApp = Nothing Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#18
,
|
|
|
Dmitrii, КРАЙНЕ желательно размещать не просто скрипты, которые публикуются в учебных материалах, для понимания работы, а скрипты иеющие реальное приложение в локальных доменных сетях.
Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#19
,
|
|
|
Следующий код узнаёт версию файла при помощи GetFileVersion.
Цитата Option Explicit Dim fso, oShell ' Object variables Dim file, tmp ' Filename file = "Forumizer_sources_ru_1.409.exe" Set oShell = WScript.CreateObject("WScript.Shell") file = oShell.ExpandEnvironmentStrings(file) ' Create FileSystemObject object to access the file system. Set fso = CreateObject("Scripting.FileSystemObject") ' Check whether file exists. If fso.FileExists(file) Then tmp = fso.GetFileVersion(file) ' Retrieve version. If Len(tmp) > 0 Then WScript.Echo "File " & file & vbCrLf & _ "Version: " & tmp Else WScript.Echo "File " & file & vbCrLf & _ "Version: undefined" End if Else WScript.Echo "File '" & file & "' not found" End If '*** End собственно, а как задавать версию файла этой же функцией ? |
Сообщ.
#20
,
|
|
|
Цитата Koss @ собственно, а как задавать версию файла этой же функцией ? Оффициально - никак. Версия файла задается в ресурсах файла, и подключается к ехе-шнику во время компиляции(точнее линковки), а поменять можно (нелегально ) открыв файл и пройдясь по нему в поисках юникодовой строки FileVersion после которой будут юникодовые циферки, в ввиде обыкновенного текста, которые естественно можно подменить. |
Сообщ.
#21
,
|
|
|
'************************************************************************************************************ '* Имя: ACL_FSO_Get.vbs * '* Язык: VBScript * '* Назначение: Получение подробного (полного или частичного) списка управления доступом NTFS (DACL) * '* указанного каталога текущего компьютера. * '* Частичный список составляется в том случае, когда задано имя пользователя (группы). * '* Для составления частичного списка необходимо задать только NetBIOS-имя объекта, * '* в противном случае будет создан полный список. * '* Можно указать имя объекта либо доменного, либо локального (для текущего компьютера) уровня. * '* Допустимо указание имён ряда встроенных локальных объектов: "System" (или "Система"), "Все", * '* "Администратор(ы)", "Гост(ь)(и)" и т.п. * '* Имена объектов можно задавать как в кавычках, так и без них. * '* Имя каталога выбирается с помощью метода BrowseForFolder объекта Shell.Application. * '* Сценарий ориентирован на работу в графическом режиме. * '************************************************************************************************************ Option Explicit End Sub Dim objShell, objFolder, strPath Dim objWsNet, strDomain, strComputer, blnIsDomain, intOSVersion Dim objWMI, objCollection, objItem, objSecSettings, objSD Dim strAccount, strSID, strList Dim intHasAccount 'Флаг-признак режима работы: '-1 - не составлять список, т.к. указанная "учётка" не найдена; '0 - составлять полный список; '1 - составлять частичный список (только для указанной "учётки"). Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(0, "Выбор каталога", &H10 + &H200, &H11) If Not objFolder Is Nothing Then strPath = objFolder.Self.Path Set objWsNet = CreateObject("WScript.Network") strDomain = objWsNet.UserDomain strComputer = objWsNet.ComputerName Set objWsNet = Nothing If StrComp(strDomain, strComputer, vbTextCompare) <> 0 Then blnIsDomain = True Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") '--- Определение версии ОС Set objCollection = objWMI.ExecQuery("SELECT Version FROM Win32_OperatingSystem") For Each objItem In objCollection intOSVersion = CInt(Replace(Left(objItem.Version, 3), ".", "")) Next Set objItem = Nothing '------ strAccount = Trim(InputBox("Имя пользователя или группы" & vbNewLine & _ "(при составлении полного списка -" & vbNewLine & _ "не указывать):", "Проверка настроек безопасности NTFS")) intHasAccount = 0 If Len(strAccount) > 0 Then strAccount = Replace(strAccount, """", "") '--- Настройка правильного наименования "учётки" локальной ОС в зависимости от версии ОС If intOSVersion < 61 Then strAccount = Replace(strAccount, "Система", "System", 1, -1, vbTextCompare) Else strAccount = Replace(strAccount, "System", "Система", 1, -1, vbTextCompare) End If '------ If StrComp(strAccount, "System", vbTextCompare) = 0 Or StrComp(strAccount, "Система", vbTextCompare) = 0 Or _ StrComp(strAccount, "Все", vbTextCompare) = 0 Then strDomain = vbNullString Else If blnIsDomain Then If MsgBox("Задана доменная учётная запись?", vbYesNo + vbQuestion, "Проверка настроек безопасности NTFS") = vbNo Then strDomain = strComputer End If Else strDomain = strComputer End If End If '--- Поиск заданной "учётки" на локальном компьютере или в Active Directory If Len(strDomain) > 0 Then Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Domain='" & strDomain & "' AND Name='" & strAccount & "'") Else Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Name='" & strAccount & "'") End If '------ If objCollection.Count > 0 Then intHasAccount = 1 '--- Определение SID заданной "учётки" For Each objItem In objCollection strSID = UCase(objItem.SID) Next '------ Else intHasAccount = -1 End If End If If intHasAccount >= 0 Then Set objSecSettings = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & strPath & "'") If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then 'Чтение содержимого дескриптора безопасности каталога strList = vbNullString If Not IsNull(objSD.DACL) Then 'Проверка наличия хотя бы одной записи в DACL каталога Call Get_DACLInfo(objSD.DACL, strList, intHasAccount, strSID, intOSVersion) If Len(strList) > 0 Then WScript.Echo strList Else WScript.Echo "В DACL не обнаружено ни одной записи для объекта " & UCase(strDomain & "\" & strAccount) End If Else WScript.Echo "Список управления доступом к каталогу " & UCase(strPath) & " пуст." End If Else WScript.Echo "Не удалось прочитать дескриптор безопасности каталога " & UCase(strPath) End If Else WScript.Echo "Учётная запись объекта " & UCase(strDomain & "\" & strAccount) & " не найдена." End If Set objSecSettings = Nothing Set objCollection = Nothing Set objWMI = Nothing Else WScript.Echo "Каталог не выбран." End If Set objFolder = Nothing Set objShell = Nothing WScript.Quit 0 '====== Function Get_DACLInfo(arrACE(), strRes, intMode, strAccSID, intVer) Dim objEntry, strTemp, i, j, lngMask, lngTemp Dim arrFlagValue, arrFlagName, arrGenericValue, arrGenericName Dim arrSieveGE, arrSieveGW, arrSieveGR, arrTemp Const PART_MODE = 1 'Флаг-признак составления частичного списка '--- Значения универсальных масок Const GENERIC_ALL = &H10000000 Const GENERIC_EXECUTE = &H20000000 Const GENERIC_WRITE = &H40000000 Const GENERIC_READ = &H80000000 '------ Const ACCESS_ALLOWED_ACE_TYPE = 0 'Флаг-признак записи типа "РАЗРЕШЕНИЕ" Const ACCESS_DENIED_ACE_TYPE = 1 'Флаг-признак записи типа "ЗАПРЕТ" Const INHERITED_ACE = 16 'Флаг-признак того, что текущая запись DACL унаследована от родительского каталога Const FULL_ACCESS = 983551 'Значение маски полного разрешения или запрета Const FLAG_SYNCHRONIZE = 1048576 'Значение флага синхронизации доступа к объекту файловой системы '(в версиях ОС "2000/XP", применим только для записей типа "РАЗРЕШЕНИЕ") arrFlagValue = Array(32, 1, 128, 8, 2, 4, 256, 16, 64, 65536, 131072, 262144, 524288) arrFlagName = Array("Траверс папок / Выполнение файлов", _ "Содержание папки / Чтение данных", _ "Чтение атрибутов", _ "Чтение дополнительных атрибутов", _ "Создание файлов / Запись данных", _ "Создание папок / Дозапись данных", _ "Запись атрибутов", _ "Запись дополнительных атрибутов", _ "Удаление подпапок и файлов", _ "Удаление", _ "Чтение разрешений", _ "Смена разрешений", _ "Смена владельца") arrGenericValue = Array(&H20000000, &H40000000, &H80000000) arrGenericName = Array("Выполнение (универсальная маска)", "Запись (универсальная маска)", "Чтение (универсальная маска)") '--- Вспомогательные массивы, предназначенные для детализации универсальных масок arrSieveGE = Array(-1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0) arrSieveGW = Array(0, 0, 0, 0, -1, -1, -1, -1, 0, 0, -1, 0, 0) arrSieveGR = Array(0, -1, -1, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0) '------ '--- Настройка правильного наименования одного из флагов маски доступа в зависимости от версии ОС If intVer < 60 Then arrFlagName(0) = "Обзор папок / Выполнение файлов" End If '------ For Each objEntry In arrACE '--- Определение режима наследования записи и области её действия If CBool(objEntry.AceFlags And INHERITED_ACE) Then strTemp = " (унаследовано; " lngTemp = objEntry.AceFlags - INHERITED_ACE Else strTemp = " (не унаследовано; " lngTemp = objEntry.AceFlags End If Select Case lngTemp Case 0: strTemp = strTemp & "действует на: только текущий каталог)" Case 1: strTemp = strTemp & "действует на: текущий каталог и его файлы)" Case 2: strTemp = strTemp & "действует на: текущий каталог и его подкаталоги)" Case 3: strTemp = strTemp & "действует на: текущий каталог, его подкаталоги и файлы)" Case 9: strTemp = strTemp & "действует на: только файлы текущего каталога)" Case 10: strTemp = strTemp & "действует на: только подкаталоги текущего каталога)" Case 11: strTemp = strTemp & "действует на: подкаталоги и файлы текущего каталога)" Case Else: strTemp = strTemp & "область действия не определена); " End Select strTemp = strTemp & vbNewLine & "---" & vbNewLine '------ '--- Определение типа записи If objEntry.AceType = ACCESS_ALLOWED_ACE_TYPE Then strTemp = strTemp & "РАЗРЕШЕНО:" & vbNewLine ElseIf objEntry.AceType = ACCESS_DENIED_ACE_TYPE Then strTemp = strTemp & "ЗАПРЕЩЕНО:" & vbNewLine End If '------ '--- Определение значения маски "Полный доступ" в зависимости от версии ОС If intVer < 52 Then lngTemp = FULL_ACCESS + Abs(objEntry.AceType - 1) * FLAG_SYNCHRONIZE 'Выражение FULL_ACCESS + Abs(objEntry.AceType - 1) * FLAG_SYNCHRONIZE 'учитывает разницу между значениями маски "Полный доступ" у записей разных типов 'в ОС версий "2000/XP" Else lngTemp = FULL_ACCESS + FLAG_SYNCHRONIZE End If '------ lngMask = objEntry.AccessMask Select Case Abs(lngMask) Case lngTemp: strTemp = strTemp & "Полный доступ" & vbNewLine Case GENERIC_ALL: strTemp = strTemp & "Полный доступ (универсальная маска)" & vbNewLine Case Else '--- Детальный анализ маски доступа текущей записи: 'обработка универсальных масок (биты №№ 29 - 31) If Abs(lngMask) > lngTemp Then For i = 0 To UBound(arrGenericValue) If lngMask And arrGenericValue(i) Then strTemp = strTemp & arrGenericName(i) & vbNewLine & vbTab & "{" & vbNewLine Select Case arrGenericValue(i) Case GENERIC_EXECUTE: arrTemp = arrSieveGE Case GENERIC_WRITE: arrTemp = arrSieveGW Case GENERIC_READ: arrTemp = arrSieveGR End Select For j = 0 To UBound(arrTemp) If arrTemp(j) Then strTemp = strTemp & vbTab & arrFlagName(j) & vbNewLine Next strTemp = strTemp & vbTab & "}" & vbNewLine End If Next End If 'обработка обычных масок (биты №№ 0 - 20) For i = 0 To UBound(arrFlagValue) If lngMask And arrFlagValue(i) Then strTemp = strTemp & arrFlagName(i) & vbNewLine End If Next '------ End Select strTemp = UCase(objEntry.Trustee.Domain & "\" & objEntry.Trustee.Name) & strTemp & "===" & vbNewLine If intMode = PART_MODE Then If StrComp(UCase(objEntry.Trustee.SIDString), strAccSID, vbTextCompare) = 0 Then strRes = strRes & strTemp End If Else strRes = strRes & strTemp End If Next End Function '********************************************************************************************** '* Имя: ACL_Register_CheckAccess.vbs * '* Язык: VBScript * '* Назначение: Проверка содержимого дескриптора безопасности объекта реестра Windows. * '* В ОС версий 2000 - 2003 проверка выполняется только для текущего пользователя. * '********************************************************************************************** Dim objReg, strComputer, strKeyPath, arrFlagName, strList, strTemp Dim blnHasRight, strAllowed, strDenied, intOSVersion, intResult Dim objSD, objACE, arrTypes Const HKCR = &H80000000 Const HKCU = &H80000001 Const HKLM = &H80000002 Const HKU = &H80000003 Const INHERITED_ACE = 16 strKeyPath = "Software" arrFlagName = Array("Запрос значения", "Задание значения", _ "Создание подраздела", "Перечисление подразделов", _ "Уведомление", "Создание связи", "Удаление", "Запись DAC", _ "Смена владельца", "Чтение разрешений") arrFlagValue = Array(&H1, &H2, &H4, &H8, &H10, &H20, &H10000, &H40000, &H80000, &H20000) arrTypes = Array("Разрешено с маской -> ", "Запрещено с маской -> ") strComputer = "." Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objCollection = objWMI.ExecQuery("SELECT Version FROM Win32_OperatingSystem") For Each objItem In objCollection intOSVersion = CInt(Replace(Left(objItem.Version, 3), ".", "")) Next Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") strList = vbNullString If intOSVersion >= 60 Then intResult = objReg.GetSecurityDescriptor(HKLM, strKeyPath, objSD) If intResult = 0 Then strList = "Метод GetSecurityDescriptor" & vbNewLine & "======" & vbNewLine & vbNewLine If Not IsNull(objSD.DACL) Then For Each objACE In objSD.DACL If CBool(objACE.AceFlags And INHERITED_ACE) Then strTemp = " - унаследовано " intTemp = objACE.AceFlags - INHERITED_ACE Else strTemp = " - не унаследовано " intTemp = objACE.AceFlags End If Select Case intTemp Case 0: strTemp = strTemp & "(действует на: только текущий раздел); " Case 2: strTemp = strTemp & "(действует на: текущий раздел и его подразделы); " Case 6, 14: strTemp = strTemp & "(действует на: только ближайший подраздел текущего раздела); " Case 10: strTemp = strTemp & "(действует на: только подразделы текущего раздела); " Case Else: strTemp = strTemp & "(область действия не определена); " End Select strList = strList & objACE.Trustee.Domain & "\" & objACE.Trustee.Name & strTemp & arrTypes(objACE.AceType) & _ Abs(objACE.AccessMask) & vbNewLine & vbNewLine Next Set objACE = Nothing Else strList = "Список управления доступом (ACL) к заданному объекту пуст." End If Set objSD = Nothing Else strList = "Ошибка " & intResult & " при попытке чтения дескриптора безопасности объекта реестра." End If Else strList = "Метод CheckAccess" & vbNewLine & "======" & vbNewLine & vbNewLine For i = LBound(arrFlagValue) To UBound(arrFlagValue) objReg.CheckAccess HKLM, strKeyPath, arrFlagValue(i), blnHasRight If blnHasRight Then strAllowed = strAllowed & arrFlagName(i) & vbNewLine Else strDenied = strDenied & arrFlagName(i) & vbNewLine End If Next If Len(strAllowed) > 0 Then strList = strList & "РАЗРЕШЕНО:" & vbNewLine & "------" & vbNewLine & strAllowed If Len(strDenied) > 0 Then If Len(strAllowed) > 0 Then strList = strList & "======" & vbNewLine strList = strList & "ЗАПРЕЩЕНО:" & vbNewLine & "------" & vbNewLine & strDenied End If End If Set objReg = Nothing WScript.Echo strList WScript.Quit 0 |
Сообщ.
#22
,
|
|
|
Запрет/разрешение сетевого подключения (разрешить/запретить инет)
Под вистой очень просто: ' Сохранить как EnableDisableNIC.vbs strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapter ") If objNetworkSettings.Disable()=0 then 'If objNetworkSettings.Enable()=0 then MsgBox "Succes" else MsgBox "Error" end if Для всех остальных посложнее но не очень <package> <job> <object id="objShell" progid="Shell.Application"/> <script language="VBScript"> '================================== ' сохранить как On-Off-NIC.wsf '================================== Option Explicit Dim objCP, objEnable, objDisable, colNetwork Dim clsConn, clsLANConn, clsVerb Dim strNetConn, strConn, strEnable, strDisable, strStatus Dim bEnabled, bDisabled strNetConn = "Network Connections" ' <-- поменять на русских версиях соответственно strConn = "Local Area Connection" ' <-- Поменять на реальное имя сетевого подключения strEnable = "En&able" strDisable = "Disa&ble" Set objCP = objShell.Namespace(3) '<-Control Panel Set colNetwork = Nothing For Each clsConn in objCP.Items If clsConn.Name = strNetConn Then Set colNetwork = clsConn.getfolder Exit For End If Next If colNetwork is Nothing Then WScript.Echo "Network folder not found" MsgBox "Network folder not found" WScript.Quit End If Set clsLANConn = Nothing For Each clsConn in colNetwork.Items 'В случае если сеть поименована как "........ connection 2", и т.д. If Instr(LCase(clsConn.name),LCase(strConn)) Then Set clsLANConn = clsConn Exit For End If Next If clsLANConn is Nothing Then WScript.Echo "Network Connection not found" MsgBox "Network Connection not found" WScript.Quit End If bEnabled = True Set objEnable = Nothing Set objDisable = Nothing For Each clsVerb in clsLANConn.verbs If clsVerb.name = strEnable Then Set objEnable = clsVerb bEnabled = False End If If clsVerb.name = strDisable Then Set objDisable = clsVerb End If Next If bEnabled Then objDisable.DoIt strStatus="disabled." Else objEnable.DoIt strStatus="enabled." End If ' Дать системе время для остановки/старта сетевого подключения WScript.Sleep 1000 MsgBox "Network connections " & strStatus </script> </job> </package> |
Сообщ.
#23
,
|
|
|
'Имя: delRecent.vbs 'Язык: VBScript 'Назначение: Очищает "Пуск\Документы. У меня в быстром запуске стоит - удобно :)" Dim wsh, fso Set wsh = WScript.CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFile(wsh.SpecialFolders("Recent") + "\*.*") |
Сообщ.
#24
,
|
|
|
А чем тебя не устраивает параметр ClearRecentDocsOnExit в реестре?
|
Сообщ.
#25
,
|
|
|
Не хочу чтоб автоматом чистилось.. Хочу чтоб сам
|
Сообщ.
#26
,
|
|
|
Цитата AlexJ, 19.03.2007, 1:08:19, 1489080 поменять можно (нелегально ) открыв файл и пройдясь по нему в поисках юникодовой строки FileVersion после которой будут юникодовые циферки, в ввиде обыкновенного текста, которые естественно можно подменить. Хмм.. Эт получаетса, что у меня тема лабораторной - крэкерство... лана.. А как в сценариях работать с ресурсами файла ???? |
Сообщ.
#27
,
|
|
|
AlexJ
Цитата AlexJ @ ' Дать системе время для остановки/старта сетевого подключения WScript.Sleep 1000 MsgBox "Network connections " & strStatus </script> </job> </package> Эту функцию не плохо было бы реализовать через while, ибо кто те сказал что 1000 милисекунд 100% достаточно для рестарта сервиса. А так же он может горааздо рашьше перезапустьться, и эти 1000 милисекунд просто скрипт будет бездействовать... ИМХО не правильно все это... нужно переписать. |
Сообщ.
#28
,
|
|
|
Цитата AlexLine @ Эту функцию не плохо было бы реализовать через while, ибо кто те сказал что 1000 милисекунд 100% достаточно для рестарта сервиса. А так же он может горааздо рашьше перезапустьться, и эти 1000 милисекунд просто скрипт будет бездействовать... ИМХО не правильно все это... нужно переписать. Не знаю , если ли смысл, скрипт гораздо массивнее получится и не читабельней, а толку только показать юзеру что сеть включена или выключена, в любом случае иконка сетевого подключения сообщит подключается или отключается сеть, а только из-за одно мессаджбокса WScript.Sleep 1000 MsgBox "Network connections " & strStatus накручивать... ИМХО не стоит, можно вообще выкинуть эти пару строк, а результат по иконке в трэе наблюдать. |
Сообщ.
#29
,
|
|
|
Уважаемые коллеги, не затруднит ли Вас создать скрипт, который сохранит объекты домена (WinServ 2003 R2) в текстовый файл в таком виде:
---------------------------- |Пользователь|Дата создания| ---------------------------- |User1 |26.12.2007 | |User2 |15.01.2001 | |User3 |26.10.2005 | ... ---------------------------- |Компьютер |Дата создания| ---------------------------- |Comp1 |02.01.2000 | |Comp2 |15.05.2006 | |Comp3 |12.10.2007 | ... Заранее благодарен. |
Сообщ.
#30
,
|
|
|
Например, так:
'***************************************************************** '* Имя: Users_Computers_List.vbs * '* Язык: VBScript * '* Назначение: Формирование списка учётных записей пользователей * '* и компьютеров домена с указанием даты их создания * '***************************************************************** Const strResFile = "C:\Users_Computers.txt" Set objRoot = GetObject("LDAP://RootDSE") strDomName = objRoot.Get("DefaultNamingContext") Set objRoot = Nothing strAttributes = "cn,whenCreated" arrCmdText = Array("<LDAP://" & strDomName & ">;(&(objectCategory=Person)(objectClass=User));" & strAttributes & ";Subtree", _ "<LDAP://" & strDomName & ">;(objectCategory=Computer);" & strAttributes & ";Subtree") arrCapLines = Array("|Пользователь|Дата создания|", "|Компьютер|Дата создания|") Set objConnection = CreateObject("ADODB.Connection") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand = CreateObject("ADODB.Command") Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Sort On") = "cn" Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.CreateTextFile(strResFile, True) For i = LBound(arrCmdText) To UBound(arrCmdText) objCommand.CommandText = arrCmdText(i) Set objRSet = objCommand.Execute If objRSet.RecordCount > 0 Then objFile.WriteLine(arrCapLines(i)) objRSet.MoveFirst Do Until objRSet.EOF objFile.WriteLine("|" & objRSet.Fields(0).Value & "|" & DateValue(objRSet.Fields(1).Value) & "|") objRSet.MoveNext Loop End If If i < UBound(arrCmdText) Then objFile.WriteLine(vbCrLf) Next objFile.Close Set objFile = Nothing Set objFS = Nothing Set objRSet = Nothing Set objCommand = Nothing Set objConnection = Nothing WScript.Echo "Готово." |