
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (22) « Первая ... 7 8 [9] 10 11 ... 21 22 ( Перейти к последнему сообщению ) |
Сообщ.
#121
,
|
|
|
Привет всем, может кто может подсказать со скриптом который бы отключал учётную запись а по истечении допустим пару месяцев удалял её с AD и удалял папку с профилем с сервера??? Буду очень признателен, спасибо за раннее. А полностью не можете скриптик, а то я что то не понимаю как ко времяни привязать
Добавлено Ой простите, мне что бы удалялись учётки которые отключены уже два месяца в AD и удалялся профиль с документ сетингс вместе с аккаунтом |
Сообщ.
#122
,
|
|
|
Dmitrii Настройка безопастности NFS и настройка сетевого доступа в расшаренный ресурс не одно и тоже.
К примеру. Назначим полный доступ в папку "С:\Общая" для группы "Users". Назначим в безопасности для папки "C:\Общая" полный доступ для группы "Managers" И в итоге пользователь не входящий в группу "Users" но входящий в группу "Managers" НЕ ПОЛУЧИТ доступ к папке из сети. з.ы. Скрипт не работет. Ошибки валятся. ![]() |
Сообщ.
#123
,
|
|
|
Цитата Petrov @ Во-первых, я и не утверждал, что это ОДНО И ТО ЖЕ. Было сказано: "... мало чем отличается".Настройка безопастности NFS и настройка сетевого доступа в расшаренный ресурс не одно и тоже... Во-вторых, речь шла не о функциональности этих средств администрирования, а о процедуре настройки дескриптора безопасности. Наконец, Вы всерьёз полагаете, что берясь на написание сценариев для системного администрирования, я не имею представления о том, чем собираюсь управлять? ![]() Цитата Petrov @ Какие именно?Скрипт не работет. Ошибки валятся. "Пробежаться" по сценарию отладчиком пробовали? Если пробовали, то где именно возникает первая ошибка. |
Сообщ.
#124
,
|
|
|
Дайте ссылочку где отадчик забрать.
Плизз. |
Сообщ.
#125
,
|
|
|
Цитата Petrov @ Если у Вас есть MS Office, то Вы уже имеете хорошее средство разработки VB-сценариев - это редактор VBA.Дайте ссылочку где отадчик забрать. В тексте сценария замените все выражения WScript.Echo на MsgBox. В начало сценария добавьте выражение типа Sub Test(), а в конец - End Sub. Затем выполните импорт сценария в редактор. Если интересуют специализированные средства разработки сценариев, то рекомендую Primalscript компании Sapien, но он платный (ознакомительный период - 45 дней): http://www.primalscript.com/ Хороших бесплатных инструментов мне пока не попадалось. |
Сообщ.
#126
,
|
|
|
БЛАГОДАРЮ.
Будет время свободное, разберусь что и как. ![]() |
Сообщ.
#127
,
|
|
|
Вот тут останавливается
![]() ![]() If objCollection.Count > 0 Then Говорит не допустимый запрос. имя папки и группы указаны верно. Папка расшарена. |
Сообщ.
#128
,
|
|
|
Цитата Petrov @ Такое выражение в сценарии встречается дважды. О котором речь?Вот тут останавливается If objCollection.Count > 0 Then Если изменяли код сценария, то выложите, пожалуйста, свой вариант. Добавлено Цитата tim01 @ Особого свойства, хранящего дату отключения "учётки", вроде бы нет. Однако, если с момента отключения никакие свойства отключенной "учётки" не изменялись, то можно воспользоваться свойством WhenChanged. Реализовать это можно как-нибудь так:Ой простите, мне что бы удалялись учётки которые отключены уже два месяца в AD и удалялся профиль с документ сетингс вместе с аккаунтом ![]() ![]() Dim objRootDSE, objGroup, objItem Dim strTemp, arrTemp Const strGroup = "здесь - имя проверяемого объекта типа ГРУППА" Const strUnit = "здесь - имя проверяемого объекта типа ПОДРАЗДЕЛЕИЕ, в котором находится группа" On Error Resume Next Set objRootDSE = GetObject("LDAP://rootDSE") If Err.Number = 0 Then Set objGroup = GetObject("LDAP://cn=" & strGroup & ",ou=" & strUnit & "," & objRootDSE.Get("defaultNamingContext")) If Err.Number = 0 Then i = 0 For Each objItem In objGroup.Members If objItem.AccountDisabled Then i = i + 1 userAnswewr = MsgBox("Учётная запись " & UCase(objItem.cn) & " отключена в течение " & _ DateDiff("m", DateValue(objItem.WhenChanged), Date) & " мес." & _ vbCr & "Удалить?", vbYesNo + vbQuestion) If userAnswewr = vbYes Then arrTemp = Split(objRootDSE.Get("defaultNamingContext"), ",") strTemp = Right(arrTemp(0), Len(arrTemp(0)) - 3) MsgBox Del_Account(objItem.cn, objItem.ProfilePath, strTemp) End If End If Next Set objGroup = Nothing If i = 0 Then MsgBox "В группе " & UCase(strGroup) & " отключенных учётных записей не обнаружено." End If Else MsgBox "Не удалось получить доступ к объекту " & UCase(strGroup) & vbCr & Err.Description Err.Clear End If Else MsgBox "Не удалось получить доступ к корню Active Directory" & vbCr & Err.Description Err.Clear End If Set objRootDSE = Nothing '=== Function Del_Account(strUser, strPath, strDomain) Dim objComputer, strReport, objFS Const strDomController = "здесь - DNS-имя контроллера домена" On Error Resume Next Set objFS = CreateObject("Scripting.FileSystemObject") If objFS.FolderExists(strPath) Then objFS.DeleteFolder strPath, True If Err.Number = 0 Then strReport = "Папка профиля удалена." Else strReport = "Папка профиля не удалена." & vbCr & Err.Description Err.Clear End If Else strReport = "Папка профиля не обнаружена." End If Set objFS = Nothing Set objComputer = GetObject("WinNT://" & strDomain & "/" & strDomController) If Err.Number = 0 Then Call objComputer.Delete("user", strUser) If Err.Number = 0 Then strReport = strReport & vbCr & vbCr & "Учётная запись удалена." Else strReport = strReport & vbCr & vbCr & "Учётная запись не удалена." & vbCr & Err.Description Err.Clear End If Else strReport = strReport & vbCr & vbCr & "Cвязь с контроллером домена не установлена." & vbCr & Err.Description End If Set objComputer = Nothing Del_Account = strReport End Function |
Сообщ.
#129
,
|
|
|
Привет! может кто-нибудь подсказать со скриптом, который определял бы количество на печатанных пользователями страниц в месяц. Результатом выполнения задачи является информация о количестве страниц напечатанных каждым пользователем. Спасибо заранее.
|
![]() |
Сообщ.
#130
,
|
|
Подскажите скрипт для резолвинга IP адресов. Очень нужно.
|
Сообщ.
#131
,
|
|
|
Туплю..ууу- не могу! На удаленном компе есть расшарен.папка А,в ней обычная папка В .Как снять наследование у папки В от папки А скриптом? Заранее признателен!(Третий день уже сижу...)
![]() Это сообщение было перенесено сюда или объединено из темы "Как отключить наследование у вложенной папки на удаленном PC" |
Сообщ.
#132
,
|
|
|
Цитата katerinka @ Вообще-то такую задачу лучше решать, исходя из конкретной ситуации в Вашей сети. Пока могу предложить сценарий для самого простого случая:может кто-нибудь подсказать со скриптом, который определял бы количество на печатанных пользователями страниц в месяц. Результатом выполнения задачи является информация о количестве страниц напечатанных каждым пользователем - к некоей сетевой станции подключен принтер общего доступа; - пользователь, запускающий сценарий, имеет права администратора на этой станции; - для сбора указанных сведений анализируется журнал системных событий этой станции; - период очистки журнала совпадает с периодом сбора сведений, причём очистка выполняется только после выполнения рассматриваемой задачи. ![]() ![]() Dim objWMI, objCollection, objItem, lngNumEvents Dim strMsg, intPosL, intPosR, strOwner, intPages Dim dtmEventDate, dtmFirstDate, dtmLastDate Dim objDict, objFS, objFile Const strComputer = "здесь - DNS-имя станции, журнал которой анализируется" Const strResFile = "C:\Temp\Results.txt" dtmFirstDate = DateValue("01.02.2008") dtmLastDate = DateValue("29.02.2008") Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE Logfile='System' " & _ "AND EventType=3 AND SourceName='Print' AND EventCode=10") lngNumEvents = objCollection.Count If lngNumEvents > 0 Then Wscript.Echo "Найдено событий указанного вида: " & lngNumEvents Set objDict = CreateObject("Scripting.Dictionary") objDict.CompareMode = 1 For Each objItem In objCollection dtmEventDate = Date_Convert(CStr(objItem.TimeWritten)) If dtmFirstDate <= dtmEventDate And dtmEventDate <= dtmLastDate Then strMsg = objItem.Message intPosL = InStr(1, strMsg, "владельца", vbTextCompare) intPosR = InStr(1, strMsg, "напечатан", vbTextCompare) strOwner = Mid(strMsg, intPosL + 10, intPosR - intPosL - 11) intPosL = InStrRev(strMsg, ":") intPages = CInt(Mid(strMsg, intPosL + 2)) If objDict.Exists(strOwner) Then objDict.Item(strOwner) = objDict.Item(strOwner) + intPages Else objDict.Add strOwner, intPages End If End If Next Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.CreateTextFile(strResFile, True) For Each objItem In objDict.Keys objFile.WriteLine (objItem & " = " & objDict.Item(objItem)) Next objFile.Close Set objFile = Nothing objDict.RemoveAll Set objDict = Nothing Wscript.Echo "Готово." Else Wscript.Echo "Событий указанного вида в журнале не обнаружено." End If Set objCollection = Nothing Set objWMI = Nothing '=== Function Date_Convert(strDTM) Date_Convert = DateValue(Mid(strDTM, 7, 2) & "." & Mid(strDTM, 5, 2) & "." & Mid(strDTM, 1, 4)) End Function Если Ваш случай сложнее, то опишите, пожалуйста, исходные условия задачи. Цитата ^D^ima Ваша задача сформулирована слишком лаконично. Подскажите скрипт для резолвинга IP адресов |
Сообщ.
#133
,
|
|
|
Цитата leftfield @ Попробуйте так:На удаленном компе есть расшарен.папка А,в ней обычная папка В .Как снять наследование у папки В от папки А скриптом? ![]() ![]() Dim objWMI, objSecSettings, objSD, objFS, intResult Const SE_DACL_PROTECTED = 4096 Const strPath = "здесь - путь к целевой папке в обычном формате" Const strPathWMI = "здесь - путь к целевой папке в формате для WMI, т.е. с удвоенным кол-вом символов '\'" Set objFS = CreateObject("Scripting.FileSystemObject") If objFS.FolderExists(strPath) Then Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") Set objSecSettings = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & strPathWMI & "'") If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then If CBool(objSD.ControlFlags And SE_DACL_PROTECTED) Then intResult = -1 Else objSD.ControlFlags = objSD.ControlFlags + SE_DACL_PROTECTED intResult = objSecSettings.SetSecurityDescriptor(objSD) End If Select Case intResult Case -1: WScript.Echo "Наследование уже отключено." Case 0: WScript.Echo "Успешное завершение." Case 2: WScript.Echo "Отсутствует доступ к необходимой информации." Case 9: WScript.Echo "Для выполнения операции нет достаточных прав." Case 21: WScript.Echo "Заданы недопустимые значения параметров." Case Else: WScript.Echo "Неизвестная ошибка." End Select Else WScript.Echo "Не удалось прочитать дескриптор безопасности объекта." End If Set objSD = Nothing Set objSecSettings = Nothing Set objWMI = Nothing Else WScript.Echo "Указанный объект не обнаружен." End If |
![]() |
Сообщ.
#134
,
|
|
Цитата Dmitrii @ Ваша задача сформулирована слишком лаконично. Имеется список IP адресов(например в текстовом файле), необходимо их разрешить до DNS имени. Что не понятно? |
Сообщ.
#135
,
|
|
|
[QUOTE=Dmitrii,1202199554,1857889][quote=andrew307,1201606583,1850781]... как получить в домене Win2003 имя компьютера его IP адрес имя активной учетной записи под которой залогинен пользователь и все это вывести в текстовый файл...[/quote]Вот один из возможных вариантов:
![]() ![]() Dim objShell, objExec, objOutStream, objWSNet Dim strTemp, strUser, strThisComputer, strIP Dim arrNames, intLBracket, intRBracket Dim objFS, objFile, strList Const strFileSpec = "C:\Temp\my_list.txt" Set objWSNet = CreateObject("WScript.Network") strThisComputer = objWSNet.ComputerName Set objWSNet = Nothing Call Comuters_List(arrNames) Set objShell = CreateObject("WScript.Shell") Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.CreateTextFile(strFileSpec, True) For i = UBound(arrNames) - 1 To 0 Step -1 If StrComp(strThisComputer, arrNames(i), vbTextCompare) <> 0 Then Set objExec = objShell.Exec("ping -n 1 -w 300 " & arrNames(i)) Set objOutStream = objExec.StdOut strTemp = vbNullString While Not objOutStream.AtEndOfStream strTemp = strTemp & Trim(objOutStream.ReadLine()) Wend intLBracket = InStr(1, strTemp, "[") If intLBracket > 0 Then intRBracket = InStr(1, strTemp, "]") strIP = Mid(strTemp, intLBracket + 1, intRBracket - intLBracket - 1) If InStr(1, strTemp, "TTL", vbTextCompare) > 0 Then strUser = Logged_User(arrNames(i)) If Not IsNull(strUser) Then strList = strList & arrNames(i) & " = " & strIP & " : " & UCase(strUser) & vbNewLine Else strList = strList & arrNames(i) & " = " & strIP & " : пусто" & vbNewLine End If Else strList = strList & arrNames(i) & " = " & strIP & " : не отвечает" & vbNewLine End If End If End If WScript.Echo arrNames(i) Next objFile.Write strList objFile.Close Set objOutStream = Nothing Set objExec = Nothing Set objFile = Nothing Set objFS = Nothing Set objShell = Nothing WScript.Echo "Готово." '======= Function Comuters_List(arrTemp) Dim objAD, objComputer, strTemp, strList Const strDomane = "здесь - DNS-имя домена" Const strGroup = "Компьютеры домена" Set objAD = GetObject("WinNT://" & strDomane & "/" & strGroup & ",group") For Each objItem In objAD.Members If Not objItem.AccountDisabled Then strTemp = objItem.Name strList = strList & Left(strTemp, Len(strTemp) - 1) & vbNewLine End If Next Set objAD = Nothing arrTemp = Split(strList, vbNewLine) Call Sorting_Array(arrTemp) End Function '======= Function Logged_User(strComputer) Dim objWMI, objCollection, objItem, strTemp Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objCollection = objWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem") For Each objItem In objCollection strTemp = objItem.UserName If Not IsNull(strTemp) Then strTemp = Mid(strTemp, InstrRev(strTemp, "\") + 1) End If Next Set objCollection = Nothing Set objWMI = Nothing Logged_User = strTemp End Function '======= Function Sorting_Array(arrTemp) Dim blnStopSort, intNumChange, strTemp blnStopSort = False i = 1 Do intNumChange = 0 For j = 0 To UBound(arrTemp) - 1 If arrTemp(j) < arrTemp(j + 1) Then strTemp = arrTemp(j) arrTemp(j) = arrTemp(j + 1) arrTemp(j + 1) = strTemp intNumChange = intNumChange + 1 End If Next If intNumChange = 0 Then blnStopSort = True Else If i < UBound(arrTemp) Then i = i + 1 Else blnStopSort = True End If End If Loop While Not blnStopSort End Function Добрый день Какие службы на удаленном компьютере должны быть запущены чтобы функция 'GetObject("winmgmts:".......' работала? В Вашем скрипте. А то некоторые компы дают инфу по пользователю, некоторые вываливаются с ошибкой "Компьютер удаленного сервера не существует или недоступен.GetObject. Код 800А01СE" Причем комп пингуется! Компьютеры в домене Win200 SP4 WinXP SP2 |