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

    Итак, начинаю первый...

    Скрипт меняющий пароль локального админа на всех компьютерах домена:


    этот скрипт нужно засунуть в стартап скрипты в ГП для компа, предварительно ессесено сздать саму ГП и применить ее для всех компьютеров домена.
    ExpandedWrap disabled
      strComputer = "."
      Set objUser = GetObject("WinNT://" & strComputer & "/Администратор,user")
      objUser.SetPassword "krut'nesusvetnaya"
      objUser.SetInfo



    а этот скрипт нужно просто запустить на контроллере домена, он поменяет пароль на всех компах - членах домена (ессесено на тех что будут в онлайне)
    тока один минус - он долго обрабатывается, ибо он пытается поменять пароль даже если тачка в оффлайне, есесено не получив ответа отваливается по таймауту.

    ExpandedWrap disabled
      Set WshShell = WScript.CreateObject("WScript.Shell")
      Set FileSys = CreateObject("Scripting.FileSystemObject")
      Set FileTxt = FileSys.OpenTextFile("c:\psw_local_adm.log", 8, TRUE)
      Set colComputers = GetObject("WinNT://company.ru")
      colComputers.Filter = Array("computer")
      On Error Resume Next
      For Each objComputer In colComputers
      strComputer = objComputer.Name
      If Not strComputer = "SERVANT" Then
      Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user")
      objUser.SetPassword "123456"
      objUser.SetInfo
      If Err.Number =0 Then
      FileTxt.WriteLine strComputer & " - password changed"
      Else
      FileTxt.WriteLine strComputer & " - computer is offline or error occured"
      End If
      End If
      Next
      FileTxt.Close
      intReturn = WshShell. Run("notepad.exe c:\psw_local_adm.log", 4, false)


    Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
      ExpandedWrap disabled
        '/********************************************************************/
        '/* Имя: ListProcesses.vbs                                            */
        '/* Язык: VBScript                                                    */
        '/* Описание: Вывод на экран списка всех запущенных на локальной     */
        '/*           рабочей станции процессов                              */
        '/********************************************************************/
         
        Dim WMI              ' //Экземпляр WMI
        Dim  Process            ' //Экземпляр коллекции
        dim  SQuery
        Dim SList                 ' //Строка для вывода на экран
        dim  WShell '
        Dim Processes 'Коллекция процессов
        Dim ListFile 'имя файла вывода
        Dim FSO 'объект файловой системы
        Dim sOwnerUser, sOwnerDomain
        Dim Ret
        '  //Соединяемся с WMI
         
        Set FSO=CreateObject("Scripting.FileSystemObject")
        Set WShell=CreateObject("Wscript.Shell")
        set WMI=GetObject("winMgmts:")
         
                'Формируем текст запроса  
                SQuery="SELECT * FROM Win32_Process  WHERE Name<>'EXPLORER.EXE'"
                'Создаем коллекцию-результат запроса
                set Processes=WMI.ExecQuery(SQuery)
                'Цикл по всем элементам коллекции
                for each Process in Processes
        '  //Формируем строку с именами процессов
          SList=SList & "Имя процесса: " & Process.Name & vbcrlf
         '// Отобразим хендл процесса
          SList=SList & "Хендл процесса: " & Process.Handle & vbcrlf
          'Получим PID процесса (по нему мы ниже сможем через Shell.AppActivate
          'управлять приложением через SendKeys
          SList=SList & "Process ID (PID): " & Process.ProcessId & vbcrlf
          'Получим полный путь к исполняемому файлу
          SList = SList & "ExecutablePath: " & Process.ExecutablePath & vbcrlf
          'Получим имя пользователя от которого запущен процесс
          Process.GetOwner sOwnerUser,sOwnerDomain
          SList=SList & "Запущено от имени: " & sOwnerDomain & "\" & sOwnerUser & vbcrlf
          SList=SList & "- - - - - - - - - - - -" & vbcrlf
         'Следующие строки показывают - имеет ли процесс хоть одно видимое окно
        '  WShell.popup "Попытка активировать приложение " & vbcrlf & _
        '  Process.name & vbcrlf & _
        '  "(" & Process.executablepath & ")", 2
          'Если процесс имеет видимое окно - то Ret после вызова нижележащей строки
          'получит значение больше нуля. Если меньше нуля - значит процесс или не имеет окон
          'или все окна у него невидимы
          ret = WShell.AppActivate (Process.processid)
          'сделаем небольшую паузу, чтобы приложение успело активироваться.
         
          If Ret> 0 Then
                  WScript.Sleep 1000
          '        WShell.Popup "Удачная попытка активации " & Process.name, 3
          'Else
          '        WShell.Popup "Неудачная попытка активации " & Process.name, 5
          End If
        Next
         
         
        '//Выводим информацию на экран
        'MsgBox SList,,"Список запущенных процессов."
        '// или выводим информацию в файл
        Set ListFile=FSO.CreateTextFile("C:\ListProcess.txt")
        ListFile.write(SList)
        ListFile.close
         
        Set ListFile=Nothing
        Set FSO=Nothing
        Set WMI=nothing
        WScript.Quit
        '/*************  Конец *********************************************/


      Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
      char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
      for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


      user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
        ExpandedWrap disabled
          '************************************************************************
          '* Имя: Change_IP_mask_DNS_Gate_by_MAC.vbs                              *
          '* Язык: VBScript                                                       *
          '* Назначение: Изменить static-IP, Mask, DNS, Gateway для определенного *
          '*             сетевого адаптера по MAC-адресу                          *
          '************************************************************************
           
          strComputer = "."  ' "."-локальный комп или можно имя удаленного компа
           
          Set objWMIService = GetObject( _
              "winmgmts:\\" & strComputer & "\root\cimv2")
          Set colNetAdapters = objWMIService.ExecQuery _
              ("Select * from Win32_NetworkAdapterConfiguration " _
                  & "where IPEnabled=TRUE")
           
          strIPAddress  = Array("192.168.1.180") ' Новый IP
          strSubnetMask = Array("255.255.255.0") ' Новая маска подсети
          strGateway    = Array("192.168.1.15")  ' Новый шлюз
          strDNSserver  = Array("192.168.1.15")  ' Новый DNS-server
          strMACadapter = "00:12:23:45:67:89"    ' MAC-address сетевого адаптера для
                                                 ' которого устанавливаем новые значения
           
          strGatewayMetric = Array(1)
           
          For Each objNetAdapter in colNetAdapters
            If objNetAdapter.MACAddress = strMACadapter then
              errEnable = objNetAdapter.EnableStatic( _
                  strIPAddress, strSubnetMask)
              errGateways = objNetAdapter.SetGateways(_
                  strGateway, strGatewaymetric)
              errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNSServer)
            end if
          Next


        Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
        Сообщение отредактировано: AlexLine -
          AlexLine, я бы сделал дополнение к твоему первому скриптику вот такое:

          ExpandedWrap disabled
            strComputer = "."
            Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user")
            objUser.SetPassword "vashe_krutoy_pass"
            objUser.SetInfo

          ибо не у всех русский админ на тачках.

          Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
            ExpandedWrap disabled
              '******************************************************************
              '* Имя: Account_Status.vbs                                        *
              '* Язык: VBScript                                                 *
              '* Назначение: Определение состояния (вкл.|выкл.) учётных записей *
              '*             пользователей домена для заданных групп            *
              '******************************************************************
               
              'Предполагается, что в структуре AD существуют объекты типа "ПОДРАЗДЕЛЕНИЕ"
              'первого уровня вложенности (в примере - значения массива grpNames),
              'в каждый из которых вложен одноимённый объект типа "ГРУППА БЕЗОПАСНОСТИ".
              Const ForWriting = 2
              grpNames = Array("Бухгалтерия", "Менеджеры", "Склад")
              Set fsObj = CreateObject("Scripting.FileSystemObject")
              Set myFile = fsObj.OpenTextFile("c:\stat_file.txt", ForWriting, True)
              For i = LBound(grpNames) To UBound(grpNames)
                  curGroup = grpNames(i)
                  Set objGroup = GetObject("LDAP://cn=" & curGroup & ",ou=" & curGroup & ",dc=domain_name,dc=ru")
                  For Each curUser In objGroup.Members
                      xName = Mid(curUser.Name, 4)
                      If curUser.AccountDisabled Then
                          xStatus = "Отключена"
                      Else
                          xStatus = "Включена"
                      End If
                      myFile.WriteLine(curGroup & "," & xName & "," & xStatus)
                  Next
              Next
              myFile.Close
              Set myFile = Nothing
              Set objGroup = Nothing
              Set fsObj = Nothing

            ExpandedWrap disabled
              '*****************************************************************
              '* Имя: UserAccount_OnOff.vbs                                    *
              '* Язык: VBScript                                                *
              '* Назначение: Управление состоянием (вкл.|выкл.) учётной записи *
              '*             заданного пользователя домена                     *
              '*****************************************************************
               
              'Предполагается, что в структуре AD существуют объект типа "ПОДРАЗДЕЛЕНИЕ"
              'первого уровня вложенности (в примере - "Склад"), в который вложен
              'однотипный объект (в примере - "Пользователи").
              'В подразделение "Пользователи" вложен объект типа "ПОЛЬЗОВАТЕЛЬ"
              '(в примере - значение константы usrName).
              Const usrName = "Кладовщик"
              Const usrLocate = ",ou=Пользователи,ou=Склад"
              Set objUser = GetObject("LDAP://cn=" & usrName & usrLocate & ",dc=domain_name,dc=ru")
              Set scrShell = CreateObject("WScript.Shell")
              curStatus = objUser.AccountDisabled
              If CBool(curStatus) Then
                  sQuest = " отключена." & vbCr & "Включить?"
                  sRes = " включена."
              Else
                  sQuest = " включена." & vbCr & "Отключить?"
                  sRes = " отключена."
              End If
              selAction = scrShell.Popup("Сейчас учётная запись пользователя " & UCase(usrName) & sQuest, , _
                                         "Выбор действия", vbQuestion + vbYesNo)
              If selAction = vbYes Then
                  objUser.AccountDisabled = Not CBool(curStatus)
                  objUser.SetInfo
                  WScript.Echo "Учётная запись пользователя " & UCase(usrName) & sRes
              End If
              Set scrShell = Nothing
              Set objUser = Nothing


            Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
            Сообщение отредактировано: Dmitrii -
              Цитата AlexLine @
              Коллеги, призываю вас использовать теги [code] в соответствии тому языку, на котором написан публикуемый скрипт

              Просто если использовать тег VB вместо VB Script код становится намного читабельней.

              Добавлено


              Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
              [А что Если… КонецЕсли]
                Цитата Rust @
                Просто если использовать тег VB вместо VB Script код становится намного читабельней.
                Пожалуй, так. Впрочем, лично для меня большой разницы нет.
                ExpandedWrap disabled
                  '*************************************************************************
                  '* Имя: Details_About_File.vbs                                           *
                  '* Язык: VBScript                                                        *
                  '* Назначение: Получение расширенного списка свойств для заданного файла *
                  '*************************************************************************
                   
                  Dim propNames(37), propValues(37)
                  nameFolder = "C:\WINNT"
                  nameItem = "clock.avi"
                  Set objShell = CreateObject("Shell.Application")
                  Set objFolder = objShell.Namespace(nameFolder)
                  Set objItem = objFolder.Items.Item(nameItem)
                  lstProperties = vbNullString
                  For i = LBound(propNames) to UBound(propNames)
                      propNames(i) = objFolder.GetDetailsOf(objFolder.Items, i)
                      propValues(i) = objFolder.GetDetailsOf (objItem, i)
                      lstProperties = lstProperties & i & ": " & propNames(i) & " = " & propValues(i) & vbCr
                  Next
                  WScript.Echo lstProperties

                ExpandedWrap disabled
                  '************************************************************
                  '* Имя: Shortcut_Create.vbs                                 *
                  '* Язык: VBScript                                           *
                  '* Назначение: Создание и настройка ярлыка на рабочем столе *
                  '************************************************************
                   
                  Set objShell = CreateObject("Shell.Application")
                  Set objDesktop = objShell.NameSpace(&H0)
                  desktopDir = objDesktop.Self.Path & "\"
                  Set objDesktop = Nothing
                  Set objShell = Nothing
                  Set objWShell = CreateObject("WScript.Shell")
                  Set objSC = objWShell.CreateShortcut(desktopDir & "ДубльГИС, Новосибирск.lnk")
                  objSC.Description = "План города"
                  objSC.IconLocation = "shell32.dll, 13"
                  objSC.TargetPath = "C:\Program Files\2gis\Nsk\grym.exe"
                  objSC.WindowStyle = 1
                  objSC.WorkingDirectory = "C:\Program Files\2gis\Nsk"
                  objSC.Save
                  Set objSC = Nothing
                  Set objWShell = Nothing

                ExpandedWrap disabled
                  '**********************************************************
                  '* Имя: Shortcut_Targets.vbs                              *
                  '* Язык: VBScript                                         *
                  '* Назначение: Определение объектов, на которые ссылаются *
                  '*             ярлыки рабочего стола                      *
                  '**********************************************************
                  Set objShell = CreateObject("Shell.Application")
                  Set objDeskTop = objShell.NameSpace(&H0)
                  lstTargets = vbNullString
                  i = 1
                  For Each curObj In objDeskTop.Items
                      If curObj.IsLink Then
                          Set objSC = curObj.GetLink
                          lstTargets = lstTargets & i & ": " & curObj.Name & vbCr & vbTab & objSC.Path & vbCr
                          i = i + 1
                      End If
                  Next
                  WScript.Echo lstTargets


                Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                Сообщение отредактировано: Dmitrii -
                  Цитата AlexJ @
                  '* Назначение: Изменить static-IP, Mask, DNS, Gateway для определенного *
                  '* сетевого адаптера по MAC-адресу *

                  интересно, это что любому юзеру в сети удаленно можно поменять? Это баг или нужен логин/пароль ?

                  Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                    Цитата P.O.D @
                    интересно, это что любому юзеру в сети удаленно можно поменять? Это баг или нужен логин/пароль ?

                    Нет, только имея достаточные права в системе, не забывай, чтьо если скрипт запущен без доп параметров, то он запускается от имени текущего пользователя.

                    Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                      ExpandedWrap disabled
                        '*************************************************************************
                        '* Имя: SetManualSystemRestorePoint.vbs                                  *
                        '* Язык: VBScript                                                        *
                        '* Назначение: Ручная установка новой точки отката системы               *
                        '*************************************************************************
                         
                        strComp="."
                         
                        Set sr = getobject("winmgmts:\\" & strComp & "\root\default:Systemrestore")
                        Set WshShell = WScript.CreateObject("WScript.Shell")
                         
                        If ( sr.createrestorepoint( "Manual Restore Point", 0, 100 ) ) = 0 Then
                          msg = "New Restore Point successfully created." & vbCrLf & vbCrLf
                          msg = msg & "It is listed as: " & Time & " Manual Restore Point"
                          WshShell.PopUp msg, 3, "Manual Restore Point", vbOKOnly
                        Else
                          MsgBox "Restore Point creation Failed!", vbOKOnly, "Manual Restore Point"
                        End If


                      Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                        :yes:

                        C vba-тегом читается значительно понятней (at least видны коментарии)

                        ExpandedWrap disabled
                          '*************************************************************************
                          '* Имя: SetAllNetworkAdapters2DHCP.vbs                                   *
                          '* Язык: VBScript                                                        *
                          '* Назначение: Установить на всех сетевых адаптерах сетевую конфигурацию *
                          '*             через DHCP                                                *
                          '*************************************************************************
                           
                          strComputer = "."
                           
                          Set objWMIService = GetObject(_
                              "winmgmts:\\" & strComputer & "\root\cimv2")
                          Set colNetAdapters = objWMIService.ExecQuery _
                              ("Select * from Win32_NetworkAdapterConfiguration " _
                                  & "where IPEnabled=TRUE")
                           
                          For Each objNetAdapter In colNetAdapters
                              errEnable = objNetAdapter.EnableDHCP()
                          Next



                        ExpandedWrap disabled
                          '*************************************************************************
                          '* Имя: GetIPaddressOfParticularConnection.vbs                           *
                          '* Язык: VBScript                                                        *
                          '* Назначение: Получить IP-адрес для определённого сетевого соединения   *
                          '*************************************************************************
                           
                          strComputer  =  "."
                          strNetworkConnection = "'Local Area Connection'" ' <- редактировать под нужное
                                                                           '    имя сетевого конекта
                           
                          Set objWMIService = GetObject( _
                              "winmgmts:\\" & strComputer & "\root\cimv2")
                          Set colNics = objWMIService.ExecQuery _
                              ("Select * From Win32_NetworkAdapter " _
                                  & "Where NetConnectionID = "  &   strNetworkConnection)
                           
                          For Each objNic in colNics
                              Set colNicConfigs = objWMIService.ExecQuery _
                                ("ASSOCIATORS OF " _
                                    & "{Win32_NetworkAdapter.DeviceID='" & _
                                objNic.DeviceID & "'}" & _
                                " WHERE AssocClass=Win32_NetworkAdapterSetting")
                              For Each objNicConfig In colNicConfigs
                                  For Each strIPAddress in objNicConfig.IPAddress
                                      Wscript.Echo "IP Address: " &  strIPAddress
                                  Next
                              Next
                          Next


                        Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                        Сообщение отредактировано: AlexJ -
                          У меня есть еще дополнение, нельзя ли сделать в этой ветке для скриптов
                          под-темы и разбить их по назначению (ну к примеру как на мелкософте)

                          Accounts and Domains
                          Computer Hardware
                          Computer Software
                          Dates and Times
                          Desktop Management
                          Disks and File Systems
                          Event Logs
                          Files and Folders
                          Networking
                          Operating Systems
                          Performance Monitoring
                          Processes
                          Printers and Printing Manage
                          Registry
                          Scheduled Tasks
                          Services

                          иначе среди сплошной простыни перемешенного по назначению кода фиг что найдешь если понадобиться.
                          Ну или хотя бы давайте в заголовках писать к какому разделу будет относиться скрипт.

                          Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                            Цитата AlexJ @
                            У меня есть еще дополнение, нельзя ли сделать в этой ветке для скриптов
                            под-темы и разбить их по назначению (ну к примеру как на мелкософте)

                            поддерживаю, сам об этом думал!
                            так и сделаем, как хотя бы скриптов 30 наберем общих

                            Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                              ExpandedWrap disabled
                                '*************************************************************
                                '* Имя: CopyFolder_with_Progress.vbs                         *
                                '* Язык: VBScript                                            *
                                '* Назначение: Копирование каталога с отображением           *
                                '*             индикатора процесса.                          *
                                '*             Сценарий предназначен для работы в режиме GUI *
                                '*************************************************************
                                Const PARAM_DIALOG = 0
                                Const targetDirSpec = "F:\"
                                Const sourceDirSpec = "C:\BORLANDC"
                                Set objShell = CreateObject("Shell.Application")
                                Set objFolder = objShell.NameSpace(targetDirSpec)
                                objFolder.CopyHere sourceDirSpec, PARAM_DIALOG

                              ExpandedWrap disabled
                                '********************************************************************
                                '* Имя: TreeView_from_CmdLine.vbs                                   *
                                '* Язык: VBScript                                                   *
                                '* Назначение: Составление списка содержимого дерева катлогов       *
                                '*             с имитацией индикатора процесса.                     *
                                '*             Сценарий предназначен для работы из командной строки *
                                '********************************************************************
                                Dim objFS, resFile
                                Const resFileSpec = "C:\ListObjects.txt"
                                Const sourceDirSpec = "C:\BORLANDC"
                                 
                                Set objFS = CreateObject("Scripting.FileSystemObject")
                                Wscript.Echo "Идёт чтение данных."
                                If objFS.FolderExists(sourceDirSpec) Then
                                    Set resFile = objFS.OpenTextFile(resFileSpec, 2, True)
                                    Call ViewFolder(sourceDirSpec)
                                    resFile.Close
                                    Wscript.StdOut.WriteLine
                                    WScript.Echo "Готово."
                                Else
                                    WScript.Echo "Не найден каталог-источник: " & UCase(sourceDirSpec)
                                End If
                                Set objFS = Nothing
                                '===
                                Function ViewFolder(dirSource)
                                Dim objFS, pntDir, curSubDir
                                Set objFS = CreateObject("Scripting.FileSystemObject")
                                Set pntDir = objFS.GetFolder(dirSource)
                                Call EnumFiles(dirSource)
                                For Each curSubDir In pntDir.SubFolders
                                    Wscript.StdOut.Write(".")
                                    Call ViewFolder(dirSource & "\" & curSubDir.Name)
                                Next
                                Set pntDir = Nothing
                                Set objFS = Nothing
                                End Function
                                '===
                                Function EnumFiles(dirSource)
                                Dim objFS, pntDir, curFile
                                Set objFS = CreateObject("Scripting.FileSystemObject")
                                Set pntDir = objFS.GetFolder(dirSource)
                                For Each curFile In pntDir.Files
                                    resFile.WriteLine (curFile.Path)
                                    Wscript.StdOut.Write(".")
                                Next
                                Set pntDir = Nothing
                                Set objFS = Nothing
                                End Function


                              Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                              Сообщение отредактировано: Dmitrii -


                                Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты"
                                [А что Если… КонецЕсли]
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (22) [1] 2 3 ...  21 22


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,2769 ]   [ 17 queries used ]   [ Generated: 16.11.19, 02:25 GMT ]