На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Windows
1. Указывайте версию Вашей ОС.
2. Запрещается размещать запросы и ссылки на кряки, серийники и т.п., а также вопросы нарушения лицензии ПО и его взлома.
3. Не разрешается давать советы из разряда "Поставь Linux".
4. Переустановка ОС - крайнее и безотказное лекарство, которое знают все. В таких советах никто не нуждается.
5. При публикации скриптов пользоваться тегами code. Тип подсветки кода выбирать строго в соответствии с языком публикуемого кода.
6. Прежде чем задать вопрос, обязательно загляните в FAQ и следуйте написанным рекомендациям для устранения проблемы. И если не помогло, а поиск по разделу не дал результатов - только тогда задавайте вопрос на форуме.
7. Вопросы, связанные с проблемами ПО, задавайте в разделе Программное обеспечение
Модераторы: Akina
Страницы: (22) « Первая ... 13 14 [15] 16 17 ...  21 22  ( Перейти к последнему сообщению )  
> Полезные скрипты , WSH (js, vbs) + WMI
    Цитата illus @
    я так понимаю что бы скрипт законектился к домену необходимо прописать имя домена в strDomain?..
    В таком варианте сценария имя домена определяется автоматически. Вот этот фрагмент:
    ExpandedWrap disabled
      Set objWSNet = CreateObject("WScript.Network")
      strDomain = objWSNet.UserDomain

    Цитата illus @
    ... Потому как скрипт утверждает что сетевой путь не найден.
    У меня сценарий прекрасно работает.
    Если ошибка возникает при использовании именно такого варианта сценария, то попробуйте выражение
    Set objAD = GetObject("WinNT://" & strDomain & "/" & strGroup & ",group")
    заменить на
    Set objAD = GetObject("WinNT://" & strDomain & "/" & strPDC & "/" & strGroup & ",group")
    Здесь strPDC - это DNS-имя основного контроллера домена.
      Народ помогите написать скрипт.
      Нужно отсканировать все компы в домене на наличие документов (doc/xls/ и т.д.).
      Нужно что бы выдавался список содержащий компы и список документов на них
        Цитата Dark-Dragon @
        Нужно отсканировать все компы в домене на наличие документов (doc/xls/ и т.д.).
        Нужно что бы выдавался список содержащий компы и список документов на них
        Сценарий для решения такой задачи и не самый быстрый, и не самый удобный инструмент.
        Но если сильно надо, то вот одна из возможных реализаций (на VBS):
        ExpandedWrap disabled
          On Error Resume Next
          Dim objWMI, objCollection, objItem, objWSNet, objFS, objFile
          Dim arrComputers, arrDrives
          Dim strSource, lngFiles, blnErrFlag, i, j
          Const strResFile = "C:\ListObjects.txt"
          Call Comuters_List(arrComputers)
          Set objWSNet = CreateObject("WScript.Network")
          Set objFS = CreateObject("Scripting.FileSystemObject")
          Set objFile = objFS.OpenTextFile(strResFile, 2, True)
          For i = 0 To UBound(arrComputers)
              If Available(arrComputers(i)) Then
                  Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")
                  Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3")
                  ReDim arrDrives(objCollection.Count - 1)
                  j = 0
                  For Each objItem In objCollection
                      arrDrives(j) = objItem.DeviceID
                      j = j + 1
                  Next
                  WScript.Echo arrComputers(i) & vbNewLine & "-----"
                  objFile.WriteLine arrComputers(i)
                  For j = 0 To UBound(arrDrives)
                      strSource = Free_Letter
                      lngFiles = 0
                      If Len(strSource) > 0 Then
                          strSource = strSource & ":"
                          objWSNet.MapNetworkDrive strSource, "\\" & arrComputers(i) & "\" & Left(arrDrives(j), 1) & "$"
                          WScript.Echo "Просмотрено файлов на диске " & arrDrives(j)
                          Call View_Folder(strSource & "\", arrDrives(j))
                          objWSNet.RemoveNetworkDrive strSource, True
                          WScript.Echo
                      Else
                          WScript.Echo "Нет свободных имён для назначения сетевому тому. Продолжение работы невозможно."
                          blnErrFlag = True
                          Exit For
                      End If
                  Next
                  Erase arrDrives
                  WScript.Echo "====="
              Else
                  objFile.WriteLine arrComputers(i) & " не отвечает."
              End If
              If blnErrFlag Then Exit For
          Next
          Erase arrComputers
          If Not objFile Is Nothing Then
              objFile.Close
              Set objFile = Nothing
          End If
          Set objFS = Nothing
          Set objWSNet = Nothing
          Set objCollection = Nothing
          Set objWMI = Nothing
          WScript.Echo "Готово."
          WScript.Quit 0
          '===
          Function Comuters_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 Sorting_Array(arrTemp)
          Dim blnStopSort, intNumChange, strTemp, i, j
          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
          '===
          Function Available(strComputer)
          Dim objShell, objExec, objOutStream
          Dim strResPing, intResFind
          Set objShell = CreateObject("WScript.Shell")
          Set objExec = objShell.Exec("ping -n 1 -w 300 " & strComputer)
          Set objOutStream = objExec.StdOut
          strResPing = vbNullString
          While Not objOutStream.AtEndOfStream
              strResPing = strResPing & Trim(objOutStream.ReadLine())
          Wend
          If InStr(1, strResPing, "TTL", vbTextCompare) > 1 Then
              Available = True
          Else
              Available = False
          End If
          Set objOutStream = Nothing
          Set objExec = Nothing
          Set objShell = Nothing
          End Function
          '===
          Function View_Folder(strSource, strDrive)
          Dim objDir, objItem
          Set objDir = objFS.GetFolder(strSource)
          Call Enum_Files(strSource, strDrive)
          For Each objItem In objDir.SubFolders
              Call View_Folder(strSource & "\" & objItem.Name, strDrive)
          Next
          Set objDir = Nothing
          End Function
          '===
          Function Enum_Files(strSource, strDrive)
          Dim objDir, objItem, strTemp
          Set objDir = objFS.GetFolder(strSource)
          For Each objItem In objDir.Files
              If Err.Number <> 0 Then
                  Err.Clear
              Else
                  strTemp = UCase(objFS.GetExtensionName(objItem.Name))
                  If strTemp = "DOC" Or strTemp = "XLS" Then
                      objFile.WriteLine strDrive & "\" & Mid(objItem.Path, 4)
                  End If
              End If
              lngFiles = lngFiles + 1
              WScript.StdOut.Write lngFiles & Chr(13)
          Next
          Set objItem = Nothing
          Set objDir = Nothing
          End Function
          '===
          Function Free_Letter()
          Dim objWMIServ, objDrives, objDrive
          Dim arrTemp(25), i
          Set objWMIServ = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
          Set objDrives = objWMIServ.ExecQuery("SELECT DeviceID FROM Win32_LogicalDisk")
          For Each objDrive In objDrives
              arrTemp(Asc(UCase(objDrive.DeviceID)) - 65) = True
          Next
          Set objDrive = Nothing
          Set objDrives = Nothing
          Set objWMIServ = Nothing
          For i = 3 To 25
              If Not arrTemp(i) Then Exit For
          Next
          If i < 26 Then
              Free_Letter = Chr(i + 65)
          Else
              Free_Letter = vbNullString
          End If
          Erase arrTemp
          End Function

        Примечания:
        1. Сценарий предназначен для работы в консольном режиме.
        2. Проверок для "отлова" возможных ошибок работы сценария здесь самый минимум. Так что, если захотите возиться с этой "портянкой", то все прочие проверки Вам придётся добавлять самостоятельно.
        Сообщение отредактировано: Dmitrii -
          Всем привет!
          Помогите найти скрипт, нужно выгрузить из AD пользователей с Display name, account, e-mail в файл excel или notepad.
          Нигде не могу найти... :(
            grusiner, а экспортом не пробовал воспользоваться?
              Экспорт e-mail адреса не экспортирует.
                Цитата grusiner @
                ... нужно выгрузить из AD пользователей с Display name, account, e-mail в файл excel или notepad...
                Так, например:
                ExpandedWrap disabled
                  Dim objRoot, objConnection, objCommand, objRSet
                  Dim objFS, objFile
                  Dim strDomain, strAttributes, intNumFields
                  Const strResFile = "C:\Users.txt"
                  Set objRoot = GetObject("LDAP://RootDSE")
                  strDomain = objRoot.Get("DefaultNamingContext")
                  Set objRoot = Nothing
                  strAttributes = "DisplayName,UserPrincipalName,SamAccountName,Mail"
                  Set objConnection = CreateObject("ADODB.Connection")
                  objConnection.Provider = "ADsDSOObject"
                  objConnection.Open "Active Directory Provider"
                  Set objCommand = CreateObject("ADODB.Command")
                  Set objCommand.ActiveConnection = objConnection
                  objCommand.Properties("Page Size") = 1000
                  objCommand.Properties("Timeout") = 30
                  objCommand.Properties("Sort On") = "DisplayName"
                  Set objFS = CreateObject("Scripting.FileSystemObject")
                  Set objFile = objFS.CreateTextFile(strResFile, True)
                  objCommand.CommandText = "<LDAP://" & strDomain & ">;(&(objectCategory=Person)(objectClass=User));" _
                                          & strAttributes & ";Subtree"
                  Set objRSet = objCommand.Execute
                  If objRSet.RecordCount > 0 Then
                      objRSet.MoveFirst
                      intNumFields = objRSet.Fields.Count
                      Do Until objRSet.EOF
                          If Len(objRSet.Fields("UserPrincipalName").Value) > 0 Then
                              For i = 0 To intNumFields - 2
                                  objFile.Write(objRSet.Fields(i).Value & vbTab)
                              Next
                              objFile.Write(objRSet.Fields(intNumFields - 1).Value & vbNewLine)
                          End If
                          objRSet.MoveNext
                      Loop
                  End If
                  objFile.Close
                  Set objFile = Nothing
                  Set objFS = Nothing
                  Set objRSet = Nothing
                  Set objCommand = Nothing
                  Set objConnection = Nothing
                  WScript.Echo "Готово."
                  WScript.Quit 0
                  Здравствуйте!
                  Помогите пожалуйста со скриптом. У нас домен, есть принт сервер. Периодически приезжают в контору люди из других организаций и им нужно печатать документы.
                  Но на сервер они зайти не могут без Login и Password. И как следствие не могут получить доступ к принтеру.
                  Раньше у нас был батничек с Net Usе'ом, в котором был прописан пароль и пользователь для печати. Но теперь этот батник не работает.
                  Попробовал использовать VBS с AddWindowsPrinterConnection, но у этой функции нет возможности передачи логина (и соответственно получаю сообщение об ошибке при доступе к принтеру). AddPrinterConnection требует порт, - это тоже не подходит.

                  Нет ли возможности использовать что-то вроде этого?

                  On Error Resume Next
                  Set WshNetwork = WScript.CreateObject("WScript.Network")
                  wshNetwork.AddWindowsPrinterConnection "\\Server\Printer", User, Pass
                  wshNetwork.SetDefaultPrinter "\\Server\Printer"

                  Заранее спасибо.
                  Сообщение отредактировано: Amorphus -
                    Dmitrii

                    Спасибо за скрипт!!! :)
                      Подскажите скрипт изменения настроек энергосбережения.

                      Добавлено
                      Что-то много винда в реестре правит :wall: :blink:

                      CreateKey HKCU\Control Panel\PowerCfg\GlobalPowerPolicy (null) Key: 0xE13EAB98
                      CreateKey HKLM\Software\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy (null) Key: 0xE5AB5EA0
                      CreateKey HKLM\Software\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\3 (null) Key: 0xE13EAB98
                      CreateKey HKCU\Control Panel\PowerCfg\PowerPolicies\3 (null) Key: 0xE5AB84F8
                      CreateKey HKLM\Software\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\3 (null) Key: 0xE5C63C88
                      CreateKey HKCU\Control Panel\PowerCfg\GlobalPowerPolicy (null) Key: 0xE5FD4828
                      CreateKey HKLM\Software\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy (null) Key: 0xE13EAB98
                      CreateKey HKLM\SYSTEM\CURRENTCONTROLSET\Control\Session Manager\Power (null) Key: 0xE5FD4828
                      CreateKey HKCU\Control Panel\PowerCfg (null) Key: 0xE13EAB98

                      Добавлено
                      Но судя по тому, что параметры спячки экрана нразные под разныи пользователями, то нас интересует только ветки HKCU\Control Panel\PowerCfg\
                        Цитата ^D^ima @
                        Подскажите скрипт изменения настроек энергосбережения.

                        http://technet.microsoft.com/ru-ru/library/cc748940.aspx
                        надеюсь, построить строку запуска сможешь?
                          попробуем. cpl c правами админа не меняла у пользователей
                            Стоит небольшая задача
                            Например у человека в настройках сетевого подключения прописан ip
                            адрес 10.2.5.1, маска подсети 255.128.0.0, основной шлюз 10.0.0.100,
                            днс сервер 10.0.0.100.
                            А мне необходимо сменить у человека маску подсети на 255.255.0.0 и
                            шлюз на 10.2.0.100, а остальные настройки оставить без изменений.
                            И причем скрипт у меня должен содержать обработку по ip адресам, то
                            есть если у человека первые две цифры ip адреса 10.2, то шлюз у него должен
                            измениться на 10.2.0.100, а если ip адрес начинается 10.3, то шлюз у него должен
                            измениться на 10.3.0.100, а маска посдети 255.255.0.0 и днс 10.0.0.100
                            Скрипт смены настроек сетевого подключения нашел на вашем форуме Полезные скрипты
                            но в программировании vbs скриптов не силен, прошу помощи
                            Сообщение отредактировано: lumenok -
                              Здравствуйте. Помогите жалуйста найти ошибку. Скрипты ругаются и не работают.
                              Вот например. Скрипт сгенерированный WMI Code Creator



                              strComputer = "."
                              Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
                              ' Obtain an instance of the the class
                              ' using a key property value.
                              Set objShare = objWMIService.Get("Win32_TerminalServiceSetting.ReplaceKeyProperty=ReplacePropertyValue")

                              ' Obtain an InParameters object specific
                              ' to the method.
                              Set objInParam = objShare.Methods_("SetAllowTSConnections"). _
                              inParameters.SpawnInstance_()


                              ' Add the input parameters.
                              objInParam.Properties_.Item("AllowTSConnections") = 1

                              ' Execute the method and obtain the return status.
                              ' The OutParameters object in objOutParams
                              ' is created by the provider.
                              Set objOutParams = objWMIService.ExecMethod("Win32_TerminalServiceSetting.ReplaceKeyProperty=ReplacePropertyValue", "SetAllowTSConnections", objInParam)

                              ' List OutParams
                              Wscript.Echo "Out Parameters: "
                              Wscript.echo "ReturnValue: " & objOutParams.ReturnValue

                              Ругается : Ошибка код 8004103A Недопустимый путь к обекту. Источник SWbemSevicesEx. Строка 6 символ 1.
                              Это - Set objShare = objWMIService.Get("Win32_TerminalServiceSetting.ReplaceKeyProperty=ReplacePropertyValue")

                              Заранее спасибо
                                Узнать баланс МТС. Работает с несколькими номерами... Записать всё в файл phones.txt и кинуть рядом со ь скриптом. Запись формата:

                                Мой_телефон +79160000000 0000

                                Где последние 0000 пароль от учётки Интернет помощника МТС.

                                ЗЫ в Интернет помощник нужно заранее войти из IE.
                                ExpandedWrap disabled
                                  Const PhonePrefix = "+7"      ' +7...
                                  PhoneLen = 12                 ' полная длина телефонного номера
                                  PrefixLen = Len(PhonePrefix)  ' = 2
                                   
                                  'PrefixLen = 0               ' установить, если в форму надо вводить полный номер телефона (с +7)
                                   
                                  Const Curr = " руб."
                                   
                                  Const ForReading = 1
                                  Const ForWriting = 2
                                   
                                  Function GetBalance(phone, password, balance)
                                   Set objIE = CreateObject("InternetExplorer.Application")
                                   objIE.Visible = False
                                   'objIE.Navigate "https://www.spb.mts.ru/selfcare/" ' МТС Санкт-Петербург
                                   objIE.Navigate "https://ihelper.mts.ru/selfcare/" ' МТС Москва
                                   While objIE.Busy
                                      WScript.Sleep 10
                                   Wend
                                   Set objForm = objIE.Document.forms("aspnetForm")
                                   objForm.elements("ctl00$phContent$tbPhoneNumber").value = phone
                                   objForm.elements("ctl00$phContent$tbPassword").value = password
                                   objForm.elements("ctl00_phContent_btnEnter").click
                                   
                                   While objIE.Busy
                                      WScript.Sleep 10
                                   Wend
                                   
                                   Set objForm = objIE.Document.forms("aspnetForm")
                                   
                                   balance = objForm.elements.all("customer-info-balance").InnerHTML
                                   objIE.quit
                                   
                                  End Function
                                   
                                  Set objFSO = CreateObject("Scripting.FileSystemObject")
                                  Set PhoneFile = objFSO.OpenTextFile("phones.txt", ForReading)
                                   
                                  Set objExplorer = CreateObject("InternetExplorer.Application")
                                  objExplorer.Navigate "about:blank"  
                                  objExplorer.ToolBar = 0
                                  objExplorer.StatusBar = 0
                                  objExplorer.Width = 300
                                  objExplorer.Height = 400
                                  objExplorer.Left = 0
                                  objExplorer.Top = 0
                                   
                                  Do While (objExplorer.Busy)
                                      Wscript.Sleep 10
                                  Loop    
                                   
                                  objExplorer.Document.Title = "Balance Information"  
                                  objExplorer.Visible = 1  
                                  objExplorer.Document.Body.InnerHTML = ""
                                   
                                  With PhoneFile
                                      Do Until .AtEndOfStream
                                          strLine = .ReadLine
                                          If (Trim(strLine) <> "")  and (Instr(strLine,PhonePrefix) > 0) Then
                                             alias = mid(strline,1,Instr(strLine,PhonePrefix)-1)                   ' название телефона
                                             tmp = mid(strline,Instr(strLine,"+7")+PrefixLen,255)                  ' эта строка начинается с номера телефона (без +7)
                                             phone = mid(tmp,1,Instr(tmp," ")-1)                                   ' телефон тут (без +7)
                                             tmp = Trim(mid(strline,Len(alias) + Len(phone) + 1 + PrefixLen,255))  ' эта строка начинается с пароля
                                             pass = Trim(mid(tmp,1,Instr(tmp," "))) ' если после пароля еще есть пробелы - отделим их
                                             if pass = "" Then                      ' если нету - и не надо...
                                               pass = tmp
                                             End If
                                   
                                             alias = Trim(alias)                    ' обрезаем пробелы
                                   
                                  '           wscript.echo alias & ":" & phone& ":" & pass & ":"   ' ****************** отладка
                                             If (Len(phone) = PhoneLen - PrefixLen) Then
                                                Call GetBalance(phone,pass, sum)
                                                objExplorer.Document.Body.InnerHTML = objExplorer.Document.Body.InnerHTML & "<B>" & alias & "</B>" & ": " & sum & Curr & "<BR>"
                                  '              wscript.echo alias & ":" & phone & ":" & sum  ' ****************** отладка
                                             End If
                                          End If
                                      Loop
                                      
                                      .Close
                                  End With
                                   
                                  objExplorer.Document.Body.InnerHTML = objExplorer.Document.Body.InnerHTML & "<BR><B>OK</B>"
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (22) « Первая ... 13 14 [15] 16 17 ...  21 22


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