На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Windows
1. Указывайте версию Вашей ОС.
2. Запрещается размещать запросы и ссылки на кряки, серийники и т.п., а также вопросы нарушения лицензии ПО и его взлома.
3. Не разрешается давать советы из разряда "Поставь Linux".
4. Переустановка ОС - крайнее и безотказное лекарство, которое знают все. В таких советах никто не нуждается.
5. При публикации скриптов пользоваться тегами code. Тип подсветки кода выбирать строго в соответствии с языком публикуемого кода.
6. Прежде чем задать вопрос, обязательно загляните в FAQ и следуйте написанным рекомендациям для устранения проблемы. И если не помогло, а поиск по разделу не дал результатов - только тогда задавайте вопрос на форуме.
7. Вопросы, связанные с проблемами ПО, задавайте в разделе Программное обеспечение
Модераторы: Akina
Страницы: (22) « Первая ... 7 8 [9] 10 11 ...  21 22  ( Перейти к последнему сообщению )  
> Полезные скрипты , WSH (js, vbs) + WMI
    Привет всем, может кто может подсказать со скриптом который бы отключал учётную запись а по истечении допустим пару месяцев удалял её с AD и удалял папку с профилем с сервера??? Буду очень признателен, спасибо за раннее. А полностью не можете скриптик, а то я что то не понимаю как ко времяни привязать

    Добавлено
    Ой простите, мне что бы удалялись учётки которые отключены уже два месяца в AD и удалялся профиль с документ сетингс вместе с аккаунтом
      Dmitrii Настройка безопастности NFS и настройка сетевого доступа в расшаренный ресурс не одно и тоже.
      К примеру.
      Назначим полный доступ в папку "С:\Общая" для группы "Users".
      Назначим в безопасности для папки "C:\Общая" полный доступ для группы "Managers"
      И в итоге пользователь не входящий в группу "Users" но входящий в группу "Managers" НЕ ПОЛУЧИТ доступ к папке из сети.
      з.ы.
      Скрипт не работет. Ошибки валятся.
      :huh:
        Цитата Petrov @
        Настройка безопастности NFS и настройка сетевого доступа в расшаренный ресурс не одно и тоже...
        Во-первых, я и не утверждал, что это ОДНО И ТО ЖЕ. Было сказано: "... мало чем отличается".
        Во-вторых, речь шла не о функциональности этих средств администрирования, а о процедуре настройки дескриптора безопасности.
        Наконец, Вы всерьёз полагаете, что берясь на написание сценариев для системного администрирования, я не имею представления о том, чем собираюсь управлять? :)

        Цитата Petrov @
        Скрипт не работет. Ошибки валятся.
        Какие именно?
        "Пробежаться" по сценарию отладчиком пробовали? Если пробовали, то где именно возникает первая ошибка.
        Сообщение отредактировано: Dmitrii -
          Дайте ссылочку где отадчик забрать.
          Плизз.
            Цитата Petrov @
            Дайте ссылочку где отадчик забрать.
            Если у Вас есть MS Office, то Вы уже имеете хорошее средство разработки VB-сценариев - это редактор VBA.
            В тексте сценария замените все выражения WScript.Echo на MsgBox. В начало сценария добавьте выражение типа Sub Test(), а в конец - End Sub. Затем выполните импорт сценария в редактор.
            Если интересуют специализированные средства разработки сценариев, то рекомендую Primalscript компании Sapien, но он платный (ознакомительный период - 45 дней): http://www.primalscript.com/
            Хороших бесплатных инструментов мне пока не попадалось.
            Сообщение отредактировано: Dmitrii -
              БЛАГОДАРЮ.
              Будет время свободное, разберусь что и как.
              :)
                Вот тут останавливается
                ExpandedWrap disabled
                  If objCollection.Count > 0 Then


                Говорит не допустимый запрос.
                имя папки и группы указаны верно. Папка расшарена.
                  Цитата Petrov @
                  Вот тут останавливается
                  If objCollection.Count > 0 Then
                  Такое выражение в сценарии встречается дважды. О котором речь?
                  Если изменяли код сценария, то выложите, пожалуйста, свой вариант.

                  Добавлено
                  Цитата tim01 @
                  Ой простите, мне что бы удалялись учётки которые отключены уже два месяца в AD и удалялся профиль с документ сетингс вместе с аккаунтом
                  Особого свойства, хранящего дату отключения "учётки", вроде бы нет. Однако, если с момента отключения никакие свойства отключенной "учётки" не изменялись, то можно воспользоваться свойством WhenChanged. Реализовать это можно как-нибудь так:
                  ExpandedWrap disabled
                    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
                  Сообщение отредактировано: Dmitrii -
                    Привет! может кто-нибудь подсказать со скриптом, который определял бы количество на печатанных пользователями страниц в месяц. Результатом выполнения задачи является информация о количестве страниц напечатанных каждым пользователем. Спасибо заранее.
                      Подскажите скрипт для резолвинга IP адресов. Очень нужно.
                        Туплю..ууу- не могу! На удаленном компе есть расшарен.папка А,в ней обычная папка В .Как снять наследование у папки В от папки А скриптом? Заранее признателен!(Третий день уже сижу...) :wall:

                        Это сообщение было перенесено сюда или объединено из темы "Как отключить наследование у вложенной папки на удаленном PC"
                          Цитата katerinka @
                          может кто-нибудь подсказать со скриптом, который определял бы количество на печатанных пользователями страниц в месяц. Результатом выполнения задачи является информация о количестве страниц напечатанных каждым пользователем
                          Вообще-то такую задачу лучше решать, исходя из конкретной ситуации в Вашей сети. Пока могу предложить сценарий для самого простого случая:
                          - к некоей сетевой станции подключен принтер общего доступа;
                          - пользователь, запускающий сценарий, имеет права администратора на этой станции;
                          - для сбора указанных сведений анализируется журнал системных событий этой станции;
                          - период очистки журнала совпадает с периодом сбора сведений, причём очистка выполняется только после выполнения рассматриваемой задачи.
                          ExpandedWrap disabled
                            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 адресов
                          Ваша задача сформулирована слишком лаконично.
                          Сообщение отредактировано: Dmitrii -
                            Цитата leftfield @
                            На удаленном компе есть расшарен.папка А,в ней обычная папка В .Как снять наследование у папки В от папки А скриптом?
                            Попробуйте так:
                            ExpandedWrap disabled
                              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
                              Цитата Dmitrii @
                              Ваша задача сформулирована слишком лаконично.

                              Имеется список IP адресов(например в текстовом файле), необходимо их разрешить до DNS имени. Что не понятно?
                                [QUOTE=Dmitrii,1202199554,1857889][quote=andrew307,1201606583,1850781]... как получить в домене Win2003 имя компьютера его IP адрес имя активной учетной записи под которой залогинен пользователь и все это вывести в текстовый файл...[/quote]Вот один из возможных вариантов:
                                ExpandedWrap disabled
                                  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
                                Сообщение отредактировано: shur_a1981 -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (22) « Первая ... 7 8 [9] 10 11 ...  21 22


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0499 ]   [ 14 queries used ]   [ Generated: 20.05.24, 05:38 GMT ]