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

    Определение DNS-имени компьютера, на котором запущен сценарий:
    ExpandedWrap disabled
      Set objWsNet = CreateObject("WScript.Network")
      WScript.Echo objWsNet.ComputerName
      Set objWsNet = Nothing
    Сообщение отредактировано: Dmitrii -
      Ребята, помогите, как получить в домене Win2003 имя компьютера его IP адрес имя активной учетной записи под которой залогинен пользователь и все это вывести в текстовый файл приверно в таком виде:

      LoginNameHostNameIP_address
      pupkincomp_001192.168.0.1
      ivanovcomp_002192.168.0.2
      Сообщение отредактировано: andrew307 -
        Доброго времени суток.
        Помогите скриптиком раздающим права доступа к расшаренной папке.
          Подмогните скриптом
          надо прописать пользователям домена
          альтнрнативный DNS
          доп. шлюз
            Цитата andrew307 @
            ... как получить в домене Win2003 имя компьютера его IP адрес имя активной учетной записи под которой залогинен пользователь и все это вывести в текстовый файл...
            Вот один из возможных вариантов:
            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 Computers_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 Computers_List(arrTemp)
              Dim objAD, objItem, strTemp, strList
              Dim strDomain, objWSNet
              Const strGroup = "Компьютеры домена"
              Set objWSNet = CreateObject("WScript.Network")
              strDomain = objWSNet.UserDomain
              Set objWSNet = Nothing
              Set objAD = GetObject("WinNT://" & strDomain & "/" & 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)
              ReDim Preserve arrTemp(UBound(arrTemp) - 1)
              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


            Добавлено
            Цитата avsen @
            Подмогните скриптом
            надо прописать пользователям домена
            альтнрнативный DNS
            доп. шлюз
            Вгляните для начала на сообщения #3 и #11 в данной теме.
            Сообщение отредактировано: Dmitrii -
              Цитата Dmitrii @
              Вгляните для начала на сообщения #3 и #11 в данной теме.


              Извините, но мне надо альтернативный DNS, т.е. должно быть основной и альтернативный
              у меня нет DHCP - все ip статические
                Цитата avsen @
                ... мне надо альтернативный DNS, т.е. должно быть основной и альтернативный...
                Сценарий Change_IP_mask_DNS_Gate_by_MAC.vbs, который предложил AlexJ, легко переделывается под Ваши нужды.
                В самом простом случае (когда известен список DNS-имён станций, на каждой из них стоит только один сетевой адаптер, все станции доступны) сценарий может выглядеть так:
                ExpandedWrap disabled
                  Dim objWMI, objCollection, objItem, intRes
                  Dim arrComputers, arrDNSServer, arrGateway, arrGatewaymetric
                  arrComputers = Array("station1", "station2", "station3")
                  For i = 0 To UBound(arrComputers)
                      Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")
                      Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
                      arrDNSServer = Array("192.168.1.1", "192.168.1.2")
                      arrGateway = Array("192.168.1.3", "192.168.1.4")
                      arrGatewaymetric = Array(1, 3)
                      For Each objItem In objCollection
                          intRes = objItem.SetDNSServerSearchOrder(arrDNSServer)
                          Select Case intRes
                              Case 0
                                  MsgBox "Список DNS-серверов настроен.", vbInformation, arrComputers(i)
                              Case 1
                                  MsgBox "Список DNS-серверов настроен. Требуется перезагрузка станции", vbInformation, arrComputers(i)
                              Case Else
                                  MsgBox "При настройке списка DNS-серверов возникла ошибка " & intRes, vbCritical, arrComputers(i)
                          End Select
                          intRes = objItem.SetGateways(arrGateway, arrGatewaymetric)
                          Select Case intRes
                              Case 0
                                  MsgBox "Список шлюзов настроен.", vbInformation, arrComputers(i)
                              Case 1
                                  MsgBox "Список шлюзов настроен. Требуется перезагрузка станции", vbInformation, arrComputers(i)
                              Case Else
                                  MsgBox "При настройке списка шлюзов возникла ошибка " & intRes, vbCritical, arrComputers(i)
                          End Select
                      Next
                  Next
                  MsgBox "Готово", vbInformation

                Учтите, что методы SetDNSServerSearchOrder и SetGateways не добавляют новые настройки к уже имеющимся, а заменяют старые на новые.
                  Цитата AlexLine @
                  Скрипт меняющий пароль локального админа на всех компьютерах домена:


                  этот скрипт нужно засунуть в стартап скрипты в ГП для компа, предварительно ессесено сздать саму ГП и применить ее для всех компьютеров домена.


                  а может кто подскажет, что нужно добавить чтобы не пихать этот скрипт на каждую локальную машину, а прицепить его на конктретную группу в АД. И чтобы он применялся, если пользователь из этой группы логинится на любой машине в домене?

                  Надеюсь не очень запутанно написал...
                  Заранее спасибо:)
                    ANdrewZ, в групповой политике нужного подразделения настройте политику Конфигурация пользователя - Конфигурация Windows - Сценарии.
                    Сообщение отредактировано: Dmitrii -
                      да, я все так и делаю
                      но про загрузке вот такая ошибка вываливается
                      user posted image

                      там где line, стоит цифра 3
                      Сообщение отредактировано: ANdrewZ -
                        все, понял где была моя ошибка, я все таки не туда скрипт цеплял. Спасибо за помощь!
                          Цитата Petrov @
                          Помогите скриптиком раздающим права доступа к расшаренной папке.
                          Если ещё актуально, то укажите тип сети (доменная или одноранговая).
                            Домен, Dmitrii.
                            :)
                            Нужно назначить разрешения на ДОСТУП к расшаренной папке (не перепутайте с безопастностью).
                              Привет всем, может кто может подсказать со скриптом который бы отключал учётную запись а по истечении допустим пару месяцев удалял её с AD и удалял папку с профилем с сервера??? Буду очень признателен, спасибо за раннее
                                Цитата Petrov @
                                Нужно назначить разрешения на ДОСТУП к расшаренной папке (не перепутайте с безопастностью).
                                Не перепутал. Кстати, настройка безопасности NTFS (для объекта файловой системы) мало чем отличается от настройки разрешений на сетевой доступ.
                                ExpandedWrap disabled
                                  '*************************************************************
                                  '* Имя: Share_Add_ACE.vbs                                    *
                                  '* Язык: VBScript                                            *
                                  '* Назначение: Добавление разрешений на доступ к общей папке *
                                  '*************************************************************
                                  Dim objWMI, objSecSettings, objSD, objItem, objWSNet
                                  Dim arrACE(), blnUserFound
                                  Dim objCollection, objSID, objTrustee, objNewACE
                                  Dim strComputer, strUser, strDomain, strUserSID
                                  Const FULL_ACCESS = 2032127
                                  Const READ_AND_MODIFY = 1245631
                                  Const READ_ONLY = 1179817
                                  Const ACCESS_ALLOWED = 0
                                  Const ACCESS_DENIED = 1
                                  Const strShareName = "Total_Folder"
                                   
                                  Set objWSNet = CreateObject("WScript.Network")
                                  strComputer = objWSNet.ComputerName
                                  strDomain = objWSNet.UserDomain
                                  Set objWSNet = Nothing
                                  strUser = "здесь - имя "учётки" пользователя"
                                  Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
                                  Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_LogicalShareSecuritySetting WHERE Name='" & strShareName & "'")
                                  If objCollection.Count > 0 Then
                                      Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Name='" & strUser & "' AND Domain='" & strDomain & "'")
                                      If objCollection.Count > 0 Then
                                          For Each objItem In objCollection
                                              strUserSID = objItem.SID
                                          Next
                                          Set objCollection = Nothing
                                          Set objSecSettings = objWMI.Get("Win32_LogicalShareSecuritySetting.Name='" & strShareName & "'")
                                          If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then
                                              If Not IsNull(objSD.DACL) Then
                                                  ReDim arrACE(UBound(objSD.DACL))
                                                  i = 0
                                                  For Each objItem In objSD.DACL
                                                      If objItem.Trustee.SIDString = strUserSID Then
                                                          objItem.AccessMask = READ_ONLY
                                                          blnUserFound = True
                                                          Exit For
                                                      Else
                                                          Set arrACE(i) = objItem
                                                          i = i + 1
                                                      End If
                                                  Next
                                                  If Not blnUserFound Then
                                                      Set objSID = objWMI.Get("Win32_SID.SID='" & strUserSID & "'")
                                                      Set objTrustee = objWMI.Get("Win32_Trustee").Spawninstance_()
                                                      objTrustee.Domain = strDomain
                                                      objTrustee.Name = strUser
                                                      objTrustee.SID = objSID.BinaryRepresentation
                                                      objTrustee.SidLength = objSID.SidLength
                                                      objTrustee.SIDString = strUserSID
                                                      Set objSID = Nothing
                                                      Set objNewACE = objWMI.Get("Win32_Ace").Spawninstance_()
                                                      objNewACE.AccessMask = READ_ONLY
                                                      objNewACE.AceType = ACCESS_ALLOWED
                                                      objNewACE.Trustee = objTrustee
                                                      Set objTrustee = Nothing
                                                      i = UBound(arrACE) + 1
                                                      ReDim Preserve arrACE(i)
                                                      Set arrACE(i) = objNewACE
                                                      objSD.DACL = arrACE
                                                      Set objNewACE = Nothing
                                                      Erase arrACE
                                                  End If
                                                  intResult = objSecSettings.SetSecurityDescriptor(objSD)
                                                  Select Case intResult
                                                      Case 0: WScript.Echo "Успешное завершение."
                                                      Case 2: WScript.Echo "Отсутствует доступ к необходимой информации."
                                                      Case 8: WScript.Echo "Неизвестная ошибка."
                                                      Case 9: WScript.Echo "Для выполнения операции нет достаточных прав."
                                                      Case 21: WScript.Echo "Заданы недопустимые значения параметров."
                                                  End Select
                                              Else
                                                  WScript.Echo "Дескриптор безопасности объекта не содержит ни одной записи DACL."
                                              End If
                                          Else
                                              WScript.Echo "Не удалось прочитать дескриптор безопасности объекта."
                                          End If
                                      Else
                                          WScript.Echo "Не обнаружена учётная запись пользователя " & UCase(strUser)
                                      End If
                                  Else
                                      WScript.Echo "Не обнаружен общий ресурс с именем " & UCase(strShareName)
                                  End If
                                  Set objSD = Nothing
                                  Set objSecSettings = Nothing
                                  Set objWMI = Nothing

                                ExpandedWrap disabled
                                  '***********************************************************
                                  '* Имя: Share_Remove_ACE.vbs                               *
                                  '* Язык: VBScript                                          *
                                  '* Назначение: Удаление разрешений на доступ к общей папке *
                                  '***********************************************************
                                  Dim objWMI, objSecSettings, objSD, objItem, objWSNet, objCollection
                                  Dim arrACE(), blnUserFound
                                  Dim strComputer, strUser, strDomain, strUserSID
                                  Const strShareName = "Total_Folder"
                                  Set objWSNet = CreateObject("WScript.Network")
                                  strComputer = objWSNet.ComputerName
                                  strDomain = objWSNet.UserDomain
                                  Set objWSNet = Nothing
                                  strUser = "здесь - имя "учётки" пользователя"
                                  Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
                                  Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_LogicalShareSecuritySetting WHERE Name='" & strShareName & "'")
                                  If objCollection.Count > 0 Then
                                      Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Name='" & strUser & "' AND Domain='" & strDomain & "'")
                                      If objCollection.Count > 0 Then
                                          For Each objItem In objCollection
                                              strUserSID = objItem.SID
                                          Next
                                          Set objCollection = Nothing
                                          Set objSecSettings = objWMI.Get("Win32_LogicalShareSecuritySetting.Name='" & strShareName & "'")
                                          If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then
                                              If Not IsNull(objSD.DACL) Then
                                                  ReDim arrACE(UBound(objSD.DACL))
                                                  i = 0
                                                  For Each objItem In objSD.DACL
                                                      If StrComp(objItem.Trustee.SIDString, strUserSID, vbTextCompare) <> 0 Then
                                                          Set arrACE(i) = objItem
                                                          i = i + 1
                                                      Else
                                                          blnUserFound = True
                                                      End If
                                                  Next
                                                  If blnUserFound Then
                                                      i = UBound(arrACE) - 1
                                                      ReDim Preserve arrACE(i)
                                                      objSD.DACL = arrACE
                                                      Erase arrACE
                                                  End If
                                                  intResult = objSecSettings.SetSecurityDescriptor(objSD)
                                                  Select Case intResult
                                                      Case 0: WScript.Echo "Успешное завершение."
                                                      Case 2: WScript.Echo "Отсутствует доступ к необходимой информации."
                                                      Case 8: WScript.Echo "Неизвестная ошибка."
                                                      Case 9: WScript.Echo "Для выполнения операции нет достаточных прав."
                                                      Case 21: WScript.Echo "Заданы недопустимые значения параметров."
                                                  End Select
                                              Else
                                                  WScript.Echo "Дескриптор безопасности объекта не содержит ни одной записи DACL."
                                              End If
                                          Else
                                              WScript.Echo "Не удалось прочитать дескриптор безопасности объекта."
                                          End If
                                      Else
                                          WScript.Echo "Не обнаружена учётная запись пользователя " & UCase(strUser)
                                      End If
                                  Else
                                      WScript.Echo "Не обнаружен общий ресурс с именем " & UCase(strShareName)
                                  End If
                                  Set objSD = Nothing
                                  Set objSecSettings = Nothing
                                  Set objWMI = Nothing

                                Примечания:
                                1. Предполагается, что сценарии будут запускаться на той же станции, где расположен управляемый ресурс.
                                2. Работоспособность сценариев проверена на Windows 2000 Pro/XP Pro/2003.
                                3. В принципе, для решения задачи можно воспользоваться не WMI, а ADSI.

                                Добавлено
                                Цитата tim01 @
                                ... со скриптом который бы отключал учётную запись...
                                Смотрите сообщение #5 данной темы.

                                Цитата tim01 @
                                ... удалял её с AD...
                                Один из вариантов:
                                ExpandedWrap disabled
                                  Dim objContainer, strUser, strPath
                                  On Error Resume Next
                                  strUser = "Кладовщик"
                                  strPath = "LDAP://ou=Пользователи,ou=Склад,dc=domain_name,dc=ru"
                                  Set objContainer = GetObject(strPath)
                                  If Err.Number = 0 Then
                                      Call objContainer.Delete("user", "cn=" & strUser)
                                      If Err.Number = 0 Then
                                          WScript.Echo "Готово"
                                      Else
                                          WScript.Echo Err.Number & vbCr & Err.Description
                                          Err.Clear
                                      End If
                                  Else
                                      WScript.Echo Err.Number & vbCr & Err.Description
                                      Err.Clear
                                  End If
                                  Set objContainer = Nothing
                                Сообщение отредактировано: Dmitrii -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (22) « Первая ... 6 7 [8] 9 10 ...  21 22


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