Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.173.48.18] |
|
Страницы: (22) « Первая ... 19 20 [21] 22 ( Перейти к последнему сообщению ) |
Сообщ.
#301
,
|
|
|
Здравствуйте.
А возможно ли с помощью скрипта принудительно завершить все клиентские подключения к определенной шаре? Все классы WMI пересмотрел, ничего подходящего |
Сообщ.
#302
,
|
|
|
Цитата Mazepa @ Нет. А возможно ли с помощью скрипта принудительно завершить все клиентские подключения к определенной шаре? |
Сообщ.
#303
,
|
|
|
Всем привет! В AD есть список компов, которые когда-либо были подключены к домену. Хотелось бы выяснить какие из них уже давно не существуют в сети путем просмотра даты последней регистрации в домене. Как это сделать через VBScript?ОЧень нужно(( Спасибо большое за ответ!
|
Сообщ.
#304
,
|
|
|
O'Reilly - Active Directory Cookbook:
8.8.1 Problem You want to find inactive computer accounts in a domain. 8.8.2 Solution These solutions only apply to Windows-based machines. Other types of machines (e.g., Unix) that have accounts in Active Directory may not update their login timestamps or passwords, which are used to determine inactivity. 8.8.2.1 Using a command-line interface The following query will locate all inactive computers in the current forest: > dsquery computer forestroot -inactive <NumWeeks> You can also use domainroot in combination with the -d option to query a specific domain: > dsquery computer domainroot -d <DomainName> -inactive <NumWeeks> or you can target your query at a specific container: > dsquery computer ou=MyComputers,dc=rallencorp,dc=com -inactive <NumWeeks> This can only be run against a Windows Server 2003 domain functional level or higher domain. 2Moderators: Снесите плз треды о определении "старых" учетных записях в отдельную тему. |
Сообщ.
#305
,
|
|
|
Господа, подсобите скрипт, чтобы прикрутить в GPO, для автозапуска приложения с шары в домене один раз на каждом ПК. И чтобы не выдавал сообщение "не удается проверить издателя" (хотя если шара в домене и путь netbios, то вроде не должна)
|
Сообщ.
#306
,
|
|
|
Доброго времени суток.
Нет ли у кого скрипта для установки скринсейвера? |
Сообщ.
#307
,
|
|
|
'************************************************************ '* Имя: Sendmail Lotus * '* Язык: VBScript * '* Назначение: Отправка почты через клиент Lotus Notes * '* с вложенным файлом с диалогом выбора файла * '*********************************************************** On Error Goto 0: sendLNMail() Dim s Dim db Dim doc Dim rtitem Dim subj Dim bdy Dim recips(2) 'File System Object Decs Dim fs Dim fName Dim path Sub sendLNMail() On Error Resume Next '/////////////////////////////////////// ' //////////////////////////////// 'Begin Error/Input Routines 'Created by Steven Jacobs '2004 '/////////////////////////////////////// ' //////////////////////////////// 'Get subject...if no subject, exit sub 'subj = inputbox("Please enter a subject For your mail memo.","Email Subject Text") subj = "Тема письма" ' тут указываем тему пиьма if subj = "" Then MsgBox "Введите тему" Exit Sub End if 'Get body text...if no body text, exit s ' ub 'bdy = inputbox("Please enter text For your body mail memo.","Email Body Text") bdy = "C уважением," & chr (10) & _ ' тут пишем текст пиьма "Vladimir" & chr (10) & _ "Пользователь форума Исходники.ру" & chr (10) & _ "тел. (012345) 1-23-45" if bdy = "" Then MsgBox "Введите тест письма" Exit Sub End if Set fs = createobject("Scripting.FileSystemObject") if fs Is Nothing Then MsgBox "Could Not Create FileSystemObject",16,"File System Object Error." endMe Exit Sub End if Set objDialog = CreateObject("UserAccounts.CommonDialog") objDialog.Filter = "CSV файлы|*.csv|Zip архивы|*.zip|All Files|*.*" ' форматы файлов для вложений objDialog.FilterIndex = 0 objDialog.InitialDir = "d:\" ' путь по умолчанию в диалоге открытия файла intResult = objDialog.ShowOpen If intResult = 0 Then msgbox "Файл не выбран!", vbExclamation, "Внимание!" Wscript.Quit Else 'Wscript.Echo objDialog.FileName fName = objDialog.FileName Set objFSO = CreateObject("Scripting.FileSystemObject") End If 'fName = inputbox("Please enter the full path For the file","Enter Full Path To File","C:\") 'if fName = "" Then 'MsgBox "Empty Path" 'endMe 'Exit Sub 'End if path = fs.GetAbsolutePathName(fName) if Not fs.FileExists(path) Then MsgBox "Файл не существует в данной папке" endMe End if '/////////////////////////////////////// ' //////////////////////////////// 'End Error/Input Routines '/////////////////////////////////////// ' //////////////////////////////// Set s = createobject("Notes.NotesSession") if s Is Nothing Then MsgBox "Ошибка создания сессии Lotus. Проверьте запущен ли Lotus",16,"Notes Session Error." endMe Exit Sub End if 'See if we can create the main object (s ' ession) if Err.Number <> 0 Then On Error Goto 0 MsgBox "Could Not create session 'Lotus Notes' from object" Exit Sub End if Set db = s.getdatabase(s.getenvironmentstring("MailServer",True),s.getenvironmentstring("Mailfile",true)) 'See if we can a handle on the mail file ' if Err.Number <> 0 Then On Error Goto 0 MsgBox "Could find or Get a handle on the mail file" Exit Sub End if Set doc = db.createdocument Doc.SAVEMESSAGEONSEND = True Set rtitem = doc.createrichtextitem("BODY") recips(1) = "Email@mail.com" ' указываем адрес получателя 'recips(2) - "rrr@rrr.com" With doc .form = "Memo" .subject = subj .sendto = "Email@mail.com" ' указываем адрес получателя '.copyto = "<yyy>@yyy.com" .body = bdy .postdate = Date End With call rtitem.embedobject(1454,"",fName) doc.visible = True doc.send False 'if we made it this far, alert the user ' the mail memo has been created and sent MsgBox "Файл: " & fName & " успешно отправлен" & chr(10) & _ chr(13) & "Спасибо!",64,"Message Sent Notification." endMe End Sub Sub endMe() 'clean objects/memory Set s = nothing Set db = nothing Set doc = nothing Set rtitem = nothing Set fs = nothing End Sub для работы этого скрипта (вернее для диалога выбора файла) нужна зарегистрированная comdlg32.ocx Как переделать этот код, чтобы можно было выбрать для вложения и отправки несколько файлов?? и еще... есть такая задача: приходят с одного адреса письма с вложениями (два архива 11.zip и 14.zip), нужно их открепить от письма (извлечь) в папку на диск (нпар. c:\Inbox\). Потом эти два архива распаковать и несколько извлеченных файлов отпраить по другим адресам... |
Сообщ.
#308
,
|
|
|
'************************************************************************************* '* Имя: Volumes_to_DiskDrives_Associator.vbs * '* Язык: VBScript * '* Назначение: Сопоставление логических томов, назначенных съёмным накопителям, * '* с физическими устройствами. * '* Типы съёмных накопителей, на работу с которыми ориентирован сценарий: * '* Flash-диски, Flash-карты, ZIP-диски. * '************************************************************************************* Dim objWMI, objLogicalDisks, objLD Dim objPartitions, objPart, objDrives, objDrive Dim strComputer, strTemp strComputer = "." Set objWMI = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2") Set objLogicalDisks = objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=2") For Each objLD In objLogicalDisks Set objPartitions = objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & _ objLD.DeviceID & _ """} WHERE AssocClass=Win32_LogicalDiskToPartition") For Each objPart In objPartitions Set objDrives = objWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _ objPart.DeviceID & _ """} WHERE AssocClass=Win32_DiskDriveToDiskPartition") For Each objDrive In objDrives strTemp = strTemp & objLD.DeviceID & " => " & objDrive.Caption & _ " (Диск " & objDrive.Index & ")" & vbNewLine Next Set objDrive = Nothing Set objDrives = Nothing Next Set objPart = Nothing Set objPartitions = Nothing Next Set objLD = Nothing Set objLogicalDisks = Nothing Set objWMI = Nothing If Len(strTemp) = 0 Then strTemp = "Накопителей указанного типа не обнаружено." End If WScript.Echo strTemp WScript.Quit 0 |
Сообщ.
#309
,
|
|
|
'******************************************************************************** '* Имя: Get_Pinters_List_in_AD.vbs * '* Язык: VBScript * '* Назначение: Создание списка всех опубликованных в Active Directory принтеров * '* путём запроса с помощью ADO. * '******************************************************************************** Dim objRoot, objConnection, objCommand, objRSet Dim intNumRecords, strDomain, strLog, arrTemp, strLine, strTemp Dim objFS, objFile, objWShell Dim strTranslator, blnIsConsole Set objFS = CreateObject("Scripting.FileSystemObject") strTranslator = objFS.GetBaseName(WScript.FullName) If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then blnIsConsole = True Else blnIsConsole = False End If strLog = "Printers_List_in_AD.log" Set objRoot = GetObject("LDAP://RootDSE") strDomain = objRoot.Get("DefaultNamingContext") Set objRoot = Nothing Set objConnection = CreateObject("ADODB.Connection") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand = CreateObject("ADODB.Command") Set objCommand.ActiveConnection = objConnection strAttributes = "printerName,uNCName,portName,driverName,serverName,shortServerName,Location" objCommand.CommandText = "<LDAP://" & strDomain & ">;(objectCategory=printQueue);" & strAttributes & ";Subtree" objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 On Error Resume Next Set objRSet = objCommand.Execute If Err.Number = 0 Then intNumRecords = objRSet.RecordCount If intNumRecords > 0 Then strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog) Set objFile = objFS.CreateTextFile(strLog, True) If Err.Number = 0 Then strLine = "Обнаружено записей: " & intNumRecords & vbNewLine & "===" objFile.WriteLine strLine If blnIsConsole Then WScript.Echo strLine objRSet.MoveFirst Do Until objRSet.EOF For i = 0 To objRSet.Fields.Count - 1 strTemp = vbNullString If IsArray(objRSet.Fields(i)) Then arrTemp = objRSet.Fields(i) For j = 0 To UBound(arrTemp) strTemp = strTemp & arrTemp(j) & ";" If Err.Number <> 0 Then Err.Clear Next Erase arrTemp Else strTemp = objRSet.Fields(i).Value If Err.Number <> 0 Then Err.Clear End If strLine = objRSet.Fields(i).Name & " = " & strTemp objFile.WriteLine strLine If blnIsConsole Then WScript.Echo strLine Next objFile.WriteLine "---" If blnIsConsole Then WScript.Echo "---" objRSet.MoveNext Loop objFile.Close Set objFile = Nothing If blnIsConsole Then WScript.Echo "Путь к файлу отчёта: " & UCase(strLog) Else Set objWShell = CreateObject("WScript.Shell") objWShell.Run "notepad.exe " & strLog, 1 Set objWShell = Nothing End If Else WScript.Echo "Ошибка создания файла отчёта: " & Err.Number & vbNewLine & Err.Description Err.Clear End If Else WScript.Echo "Ничего не обнаружено." End If Else WScript.Echo "Ошибка выполения запроса: " & Err.Number & vbNewLine & Err.Description Err.Clear End If Set objRSet = Nothing On Error GoTo 0 Set objCommand = Nothing objConnection.Close Set objConnection = Nothing Set objFS = Nothing WScript.Quit 0 Сообщения были разделены в тему "Помогите написать скрипт" |
Сообщ.
#310
,
|
|
|
Функция для VB-сценария, позволяющая изменять список управления доступом NTFS (DACL) дескриптора безопасности каталога, сохраняя при этом настройки, унаследованные от "родителя".
Варианты изменения DACL (все варианты возможны только для не унаследованных записей): - изменение маски доступа существующей записи с учётом области её действия; - добавление отсутствующей записи с заданными типом, областью действия и маской; - удаление существующей записи с учётом её типа и области действия. Функция позволяет изменять DACL и того каталога, у которого включено наследование от "родителя", и того - у которого отключено. Описание параметров. strDom - входной, обязательный, подтип String. Смысловая нагрузка - левая часть отличительного имени (distinguished name) "учётки" пользователя или группы, представленного в формате ADS_NAME_TYPE_NT4. Допустимые значения: - NetBIOS-имя домена, например, "fabric" (используется для обработки записей DACL, соответствующих "учётке" пользователя или группы из Active Directory); - NetBIOS-имя компьютера, например, "ws" (используется для обработки записей DACL, соответствующих "учётке" пользователя или группы локального компьютера, кроме "учёток" локальной системы и группы "Все"); - строка нулевой длины (используется для обработки записей DACL, соответствующих "учётке" локальной системы или группы "Все" локального компьютера). strWS - входной, обязательный, подтип String. Смысловая нагрузка - имя сервера WMI-пространства CIMV2. Допустимые значения: - NetBIOS-имя компьютера, например, "ws" (используется для подключения к WMI-пространству произвольномго компьютера); - символ "." (может использоваться как альтернатива NetBIOS-имени для подключения к WMI-пространству локального компьютера). strSAN - входной, обязательный, подтип String. Смысловая нагрузка - правая часть отличительного имени (distinguished name) "учётки" пользователя или группы, представленного в формате ADS_NAME_TYPE_NT4. Допустимое значения - NetBIOS-имя "учётки" пользователя или группы локального компьютера или Active Directory, например, "user01". strDir - входной, обязательный, подтип String. Смысловая нагрузка - абсолютный локальный путь к каталогу, в DACL дескриптора безопасности которго вносится изменение. Допустимые значения: - путь к любому каталогу тома, кроме "корневого", без завершающего символа "\", например, d:\temp\test; - путь к "корневому" каталогу тома, например, d:\. intType - входной, обязательный, подтип Integer. Смысловая нагрузка - числовой индикатор типа записи DACL, назначенной для обработки. Допустимые значения: -1 - любой тип; 0 - тип "РАЗРЕШЕНИЕ"; 1 - тип "ЗАПРЕТ". intScope - входной, обязательный, подтип Integer. Смысловая нагрузка - числовой индикатор области действия записи DACL, назначенной для обработки. Допустимые значения: -1 - любая область действия; 0 - область "Только для этой папки"; 1 - область "Для этой папки и её файлов"; 2 - область "Для этой папки и её подпапок"; 3 - область "Для этой папки, её подпапок и файлов"; 9 - область "Только для файлов"; 10 - область "Только для подпапок"; 11 - область "Только для подпапок и файлов". lngMask - входной, обязательный, подтип Long. Смысловая нагрузка - числовой индикатор маски доступа записи DACL, назначенной для обработки. Допустимые значения: 0 - запись назначена для удаления; - любое числовое значение, допустимое для свойства AccessMask WMI-класса Win32_ACE. Возвращаемое значение. Функция возвращает строку с диагностическим сообщением о результатах работы. Function Modify_DACL(strDom, strWS, strSAN, strDir, intType, intScope, lngMask) Dim objWMI, objSecSettings, objSD, blnHasInherited, blnHasACE, i Dim xRes, arrACE, objCollection, objItem, strSID Dim objSID, objTrustee, objACE Const SE_DACL_PROTECTED = 4096 'Флаг-признак наследования управляемым каталогом безопасности NTFS от "родителя" Const INHERITED_ACE = 16 'Флаг-признак того, что текущая запись DACL унаследована от "родителя" On Error Resume Next xRes = 0 Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strWS & "\root\cimv2") If Err.Number = 0 Then Set objSecSettings = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & strDir & "'") If Err.Number = 0 Then If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then If Not IsNull(objSD.DACL) Then '--- Поиск заданной "учётки" на локальном компьютере или в Active Directory If Len(strDom) > 0 Then Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Domain='" & strDom & "' AND Name='" & strSAN & "'") Else Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Name='" & strSAN & "'") End If '------ If objCollection.Count > 0 Then If Not CBool(objSD.ControlFlags And SE_DACL_PROTECTED) Then blnHasInherited = True If blnHasInherited Then arrACE = Array() '--- Выборка из исходного DACL записей, не унаследованных от "родителя" i = -1 For Each objItem In objSD.DACL If Not CBool(objItem.AceFlags And INHERITED_ACE) Then i = i + 1 ReDim Preserve arrACE(i) Set arrACE(i) = objItem End If Next Set objItem = Nothing '------ '--- Отключение наследования настроек безопасности от "родителя" objSD.ControlFlags = objSD.ControlFlags + SE_DACL_PROTECTED xRes = objSecSettings.SetSecurityDescriptor(objSD) '------ Else arrACE = objSD.DACL End If If xRes = 0 Then '--- Определение SID "учётки", назначенной для обработки For Each objItem In objCollection strSID = UCase(objItem.SID) Next Set objItem = Nothing '------ If lngMask > 0 Then '--- Подготовка к добавлению в DACL новой записи Set objSID = objWMI.Get("Win32_SID.SID='" & strSID & "'") Set objTrustee = objWMI.Get("Win32_Trustee").Spawninstance_() objTrustee.Domain = strDom objTrustee.Name = strSAN objTrustee.SID = objSID.BinaryRepresentation objTrustee.SidLength = objSID.SidLength objTrustee.SIDString = strSID Set objSID = Nothing Set objACE = objWMI.Get("Win32_Ace").Spawninstance_() objACE.AceType = intType objACE.AceFlags = intScope objACE.AccessMask = lngMask objACE.Trustee = objTrustee Set objTrustee = Nothing i = UBound(arrACE) + 1 ReDim Preserve arrACE(i) Set arrACE(i) = objACE objSD.DACL = arrACE '------ Else '--- Подготовка к удалению из DACL указанной записи For Each objACE In arrACE blnHasACE = False '--- Поиск указанной записи по SID, области действия и типу If UCase(objACE.Trustee.SIDString) = strSID Then If intScope >= 0 Then If objACE.AceFlags = intScope Then If intType < 0 Or objACE.AceType = intType Then blnHasACE = True 'запись заданного типа с искомыми SID и областью действия найдена End If End If Else blnHasACE = True 'запись с искомым SID найдена (область действия - любая) End If If blnHasACE Then objACE.AccessMask = 0 End If End If '------ Next '------ End If objSD.DACL = arrACE 'Собственно изменение DACL Set objACE = Nothing Erase arrACE If blnHasInherited Then '--- Включение наследования настроек безопасности от "родителя", 'если первоначально оно было включено objSD.ControlFlags = objSD.ControlFlags - SE_DACL_PROTECTED '------ End If '--- Итоговое сохраненение изменений, внесённых в дескриптор безопасности xRes = objSecSettings.SetSecurityDescriptor(objSD) Select Case xRes Case 0: xRes = "Успешное завершение." Case 2: xRes = "Не удалось сохранить изменения DACL." & vbNewLine & "Доступ запрещён." Case 5, 9: xRes = "Не удалось сохранить изменения DACL." & vbNewLine & "Для выполнения операции недостаточно полномочий." Case 21: xRes = "Не удалось сохранить изменения DACL." & vbNewLine & "Заданы недопустимые значения параметров." Case Else: xRes = "Не удалось сохранить изменения DACL." & vbNewLine & "Неизвестная ошибка." End Select '------ Else xRes = "Не удалось отключить наследование безопасности для папки " & UCase(strDir) End If Else xRes = "Не найдена учётная запись объекта " & UCase(strDom & "\" & strSAN) End If Set objCollection = Nothing Else xRes = "Список управления доступом (ACL) к заданному объекту пуст." End If Else xRes = "Не удалось прочитать дескриптор безопасности объекта." End If Set objSD = Nothing Set objSecSettings = Nothing Else xRes = "Ошибка " & CStr(Err.Number) & vbNewLine & Err.Description Err.Clear End If Else xRes = "Ошибка " & CStr(Err.Number) & vbNewLine & Err.Description Err.Clear End If Set objWMI = Nothing On Error GoTo 0 Modify_DACL = xRes End Function |
Сообщ.
#311
,
|
|
|
Скрипт для разблокировки аккаунта запускается от админа который может в оснастке разблокировать аккаунт
но сам скрипт выдает acces denied на SetInfo.. почему ? и что необходимо чтобы разблокировать скриптом? Set UserObj = GetObject("WinNT://"& DomainName &"/"& UserName &"") If UserObj.IsAccountLocked = -1 then UserObj.IsAccountLocked = 0 UserObj.SetInfo |
Сообщ.
#312
,
|
|
|
Цитата AGhost @ В самом общем случае нужно то же, что и для выполнения любого другого сценария на контроллере - достаточные полномочия.... что необходимо чтобы разблокировать скриптом? Сюда нужно отнести: уровень привилегий "учётки", от имени которой выполняется сценарий, отсутствие ограничений со стороны групповой политики, отсутствие блокировок со стороны локального ПО, обеспечивающего безопасность контроллера (например, UAC, брандмауэра). Цитата AGhost @ Сценарий запускается с удалённой станции или непосредственно на контроллере домена?... скрипт выдает acces denied на SetInfo.. почему?.. Другие сценарии, вносящие изменения в AD через провайдер WinNT, работают нормально (в тех же условиях, что и обсуждаемый сценарий, разумеется)? |
Сообщ.
#313
,
|
|
|
Запускается на удаленной машине из под админского аккаунта, из под которого который можно ручками в оснастке делать unlock логинов...
p.s. можно ли как то обойтись без setinfo ?? |
Сообщ.
#314
,
|
|
|
Цитата AGhost @ Нет.можно ли как то обойтись без setinfo ? AGhost, без ответа остался вопрос: "Другие сценарии, вносящие изменения в AD через провайдер WinNT, работают нормально (в тех же условиях, что и обсуждаемый сценарий, разумеется)"? |
Сообщ.
#315
,
|
|
|
Цитата Dmitrii @ Цитата AGhost @ Нет.можно ли как то обойтись без setinfo ? AGhost, без ответа остался вопрос: "Другие сценарии, вносящие изменения в AD через провайдер WinNT, работают нормально (в тех же условиях, что и обсуждаемый сценарий, разумеется)"? Всё решил через LDAP провайдера.... |