Полезные скрипты
    , WSH (js, vbs) + WMI
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела Windows
  | Страницы: (22) « Первая ... 7 8 [9] 10 11 ... 21 22 ( Перейти к последнему сообщению ) | 
    Полезные скрипты
    , WSH (js, vbs) + WMI
  | 
         
         
         
          
           Сообщ.
           #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  |