Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 14

Формирование списка локальных администраторов

10.07.2013, 18:42. Показов 4521. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. С VBS работаю около недели и возникли следующие вопросы:

-я формирую список локальных администраторов на компьютере, сетевой адрес которого считывается с текстового файла. Результат выводится на экран и записывается в текстовый файл. Проблема в том, что уже для трех машин время выполнения скрипта составляет порядка 32 секунд, что меня категорически не устраивает (на этаже, с которого мне нужно собрать информацию порядка 150 машин). В текстовый файл информация записывается следующим образом:

Кликните здесь для просмотра всего текста

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор
OAO/Group-stosurgut-admins

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор
OAO/Group-stosurgut-admins
OAO/OAO Domain Administrators

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор
OAO/Group-stosurgut-admins
OAO/OAO Domain Administrators
OAO/Domain Admins

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор
OAO/Group-stosurgut-admins
OAO/OAO Domain Administrators
OAO/Domain Admins
OAO/Group-ASU-HelpDesk

В группу локальных администраторов на компьютере10.135.10.97 входят
ASU-02-SYA/Администратор
OAO/Domain Admins
OAO/OAO Domain Administrators
OAO/Group-ASU-HelpDesk
OAO/Saplinov_adm
OAO/Saplinov_YA
OAO/Group-STOCBPO-Admins
OAO/Group-stosurgut-admins
ASU-02-SITY/Администратор
OAO/Group-stosurgut-admins
OAO/OAO Domain Administrators
OAO/Domain Admins
OAO/Group-ASU-HelpDesk
OAO/Group-STOSurgut-SD


Сразу видно, что где-то ошибка в цикле самого скрипта (что само по себе может являться причиной долгой работы), где может быть загвоздка?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
On Error Resume Next
 
Const ForReading = 1
 
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("c:\ip.txt", ForReading)
i = 1
 
Dim fso, tf
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set tf = fso.CreateTextFile("c:\report.txt", True)
 
Do Until objTextFile.AtEndOfStream 
    strNextLine = objTextFile.Readline
    objDictionary.Add i, strNextLine
    i = i
 
For Each objItem in objDictionary
 
 
Set colAccounts = GetObject("winmgmts://" & strNextLine & "").ExecQuery("Select * From Win32_Group Where LocalAccount = TRUE And SID = 'S-1-5-32-544'")
   For Each objAccount in colAccounts
    strGroup = objAccount.Name
Set objGroup = GetObject("WinNT://" & strNextLine & "/" & strGroup)
bufer = bufer & objTextFile.Readline & VbCrLf &_
              " " & VbCrLf
  For Each objUser in objGroup.Members
    strUserPath = objUser.aDSPath
    strUserPath = Replace(strUserPath, "WinNT://", "")
    bufer = bufer & " " & strUserPath & VbCrLf
  Next
Next
Next
Loop
  tf.WriteLine(bufer)
Wscript.Echo bufer
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2013, 18:42
Ответы с готовыми решениями:

Получение списка членов группы администраторов на текущем компьютере
Подскажите как получить список членов группы администраторов с помощью VBS на текущем компьютере. И еще нужно узнать Wins в сетевых...

Удаление неизвестного SID из группы локальных администраторов
Добрый день. Помогите в в таком вопросе. Если на удаленной машине, в локальную группу администраторов была ранее добавлена эта доменная...

Формирование списка с остатками от деления целых чисел из исходного списка на заданное число N
люди помогите пожалуйста!!! Формирование списка с остатками от деления целых чисел из исходного списка на заданное число N.

2
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
12.07.2013, 09:51
isebolit, наиболее вероятные причины медленной работы заключаются не циклах, а в неполноте (предположительно) данных, содержащихся в файле ip.txt, и отсутствии проверки доступности узла перед попыткой подключения к нему.
Вот сценарий, который когда-то писал себе. Он предназначался не только для сбора сведений, но и для корректировки состава групп локальных администраторов. Фрагменты кода функции LocalAdmins_AuditorEx(), отвечающие за эту корректировку, закомментированы (на всякий случай).
Можете использовать его в качестве заготовки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
'************************************************************************************************************************
'* Имя: LocalAdmin_Groups_Revision.vbs                                                                                  *
'* Язык: VBScript                                                                                                       *
'* Назначение: Контроль групп локальных администраторов для заданного списка станций домена.                            *
'* Описание:                                                                                                            *
'* 1. Выполняемые действия.                                                                                             *
'* 1.1. Удаление "учёток", отсутствующих в контрольном списке.                                                          *
'* 1.2. Добавление "учёток", присутствующих в контрольном списке, но отсутствующих в списке членов группы админ-ов.     *
'* 2. Источники данных - две рабочие книги Excel.                                                                       *
'* 2.1. Первая - со списком проверяемых компьютеров, вторая - со списком допустимых "учёток" локальных администраторов. *
'* 2.2. Компьютеры представлены их NetBIOS-именами.                                                                     *
'*      Список располагается на первом рабочем листе книги, в первой колонке листа, начиная со второй строки            *
'*      (первая строка содержит шапку). В каждой ячейке - имя только одного компьютера.                                 *
'*      Вторая - четвёртая колонки предназначены для отражения результатов работы сценария:                             *
'*      - список обнаруженных "учёток" администраторов;                                                                 *
'*      - список удалённых "учёток" администраторов;                                                                    *
'*      - список "учёток" администраторов, которые должны были быть удалены, но не удалены из-за возникшей              *
'*        при выполнении данной операции ошибки;                                                                        *
'*      - список добавлённых "учёток" администраторов;                                                                  *
'*      - список "учёток" администраторов, которые должны были быть добавлены, но не добавлены из-за возникшей          *
'*        при выполнении данной операции ошибки.                                                                        *
'* 2.3. Допустимые "учётки" локальных администраторов предствалены строками в формате ПРЕФИКС + "/" + ИМЯ,              *
'*      где ПРЕФИКС - строка, обозначающая тип "учётки": Domain - для доменной, Local - для локальной.                  *
'*      Например:                                                                                                       *
'*      - Domain/Администраторы домена;                                                                                 *
'*      - Local/Администратор.                                                                                          *
'*      Список располагается на первом рабочем листе книги, в первой колонке листа, начиная со второй строки            *
'*      (первая строка содержит шапку). В каждой ячейке - только одна "учётка".                                         *
'* 2.4. Кавычки в списках нигде не используются.                                                                        *
'* 3. В том случае, когда книга со списком допустимых "учёток" локальных администраторов не указана,                    *
'*    будет выполняться просмотр состава групп без его корректировки.                                                   *
'* 4. Диалог выбора файлов рабочих книг организован с помощью свойства "FileDialog" объекта "Excel.Application".        *
'* 5. Сценарий ориентирован на работу в графическом режиме.                                                             *
'************************************************************************************************************************
 
Dim objShell, strBaseFolder
Dim strBookComputers, strAdminsList, strTemp, blnContinue
Dim objExcel, objWB, objDialog
 
On Error Resume Next
Set objExcel = CreateObject("Excel.Application")
If Err.Number = 0 Then
    MsgBox "Укажите файл книги EXCEL со списком проверяемых компьютеров.", vbQuestion, "Контроль групп локальных администраторов"
    Set objShell = CreateObject("Shell.Application")
    strBaseFolder = objShell.NameSpace(&H5).Self.Path
    If Err.Number <> 0 Then
        Err.Clear
        strBaseFolder = "C:\"
    End If
    Set objShell = Nothing
    Set objDialog = objExcel.FileDialog(3)
    objDialog.Filters.Add "Книга MS Excel 97-2003", "*.xls", 1
    objDialog.Filters.Add "Книга MS Excel 2007-2010", "*.xlsx", 2
    objDialog.InitialFileName = strBaseFolder
    objDialog.AllowMultiSelect = False
    objDialog.InitialFileName = vbNullString
    objDialog.Show
    If objDialog.SelectedItems.Count = 1 Then
        strBookComputers = objDialog.SelectedItems(1)
        MsgBox "Укажите файл книги EXCEL с допустимым списком локальных администраторов.", vbExclamation, "Контроль групп локальных администраторов"
        objDialog.Show
        If objDialog.SelectedItems.Count = 1 Then
            strTemp = objDialog.SelectedItems(1)
            Set objWB = objExcel.Workbooks.Open(strTemp)
            If Err.Number = 0 Then
                For i = 2 To objWB.Worksheets(1).Range("a1").CurrentRegion.Rows.Count
                    strAdminsList = strAdminsList & objWB.Worksheets(1).Cells(i, 1).Value & ";"
                Next
                objWB.Close
                blnContinue = True
            Else
                MsgBox "Не удалось открыть файл книги " & UCase(strTemp), vbCritical, "Контроль групп локальных администраторов"
                Err.Clear
            End If
        Else
            MsgBox "Файл книги EXCEL с допустимым списком локальных администраторов не выбран." & vbNewLine & _
                    "Корректировка списка выполняться не будет.", vbExclamation, "Контроль групп локальных администраторов"
            blnContinue = True
        End If
        If blnContinue Then
            Set objWB = objExcel.Workbooks.Open(strBookComputers)
            If Err.Number = 0 Then
                objExcel.Visible = True
                Call LocalAdmins_AuditorEx(objWB, strAdminsList)
                objWB.Save
                objWB.Close
                MsgBox "Готово.", vbInformation, "Контроль групп локальных администраторов"
            Else
                MsgBox "Не удалось открыть файл книги " & UCase(strBookComputers), vbCritical, "Контроль групп локальных администраторов"
                Err.Clear
            End If
            Set objWB = Nothing
        End If
    End If
    Set objDialog = Nothing
    objExcel.Quit
Else
    MsgBox "Не удалось создать экземпляр приложения EXCEL.", vbCritical, "Контроль групп локальных администраторов"
    Err.Clear
End If
Set objExcel = Nothing
WScript.Quit 0
 
'======
 
Function LocalAdmins_AuditorEx(objBook, strAdmins)
Dim objWsNet, strDomain
Dim objTemp, strTemp, arrTemp, blnModify, strAdmins2, strListFull, intRes
Dim strListRemoved, strListNotRemoved, strListAdded, strListNotAdded
Dim objGroup, objMember
 
Set objWsNet = CreateObject("WScript.Network")
strDomain = objWsNet.UserDomain
Set objWsNet = Nothing
If Len(strAdmins) > 0 Then
    blnModify = True
    strAdmins = Replace(strAdmins, "Domain", strDomain, 1, -1, vbTextCompare)
Else
    blnModify = False
End If
On Error Resume Next
With objBook.Worksheets(1)
    For i = 2 To .Range("a1").CurrentRegion.Rows.Count
        strListFull = vbNullString: strListRemoved = vbNullString: strListNotRemoved = vbNullString
                strListAdded = vbNullString: strListNotAdded = vbNullString
        .Cells(i, 1).Activate
        strTemp = .Cells(i, 1).Value
        .Range("c" & i & ":f" & i).ClearContents
        If Available(strTemp) Then
            Set objGroup = GetObject("WinNT://" & strDomain & "/" & strTemp & "/Администраторы,group")
            If Err.Number <> 0 Then
                Err.Clear
                Set objGroup = GetObject("WinNT://" & strDomain & "/" & strTemp & "/Administrators,group")
                If Err.Number <> 0 Then
                    Err.Clear
                End If
            End If
            If Not objGroup Is Nothing Then
                If blnModify Then strAdmins2 = Replace(strAdmins, "Local", strDomain & "/" & strTemp, 1, -1, vbTextCompare)
                For Each objMember In objGroup.Members
                    strTemp = Mid(objMember.ADsPath, 9) & ";"
                    strListFull = strListFull & strTemp
                    'If blnModify Then
                    '    If InStr(1, strAdmins2, strTemp, vbTextCompare) = 0 Then
                    '        intRes = objGroup.Remove(objMember.ADsPath)
                    '        If intRes = 0 Then
                    '            strListRemoved = strListRemoved & strTemp
                    '        Else
                    '            strListNotRemoved = strListNotRemoved & strTemp
                    '        End If
                    '    End If
                    'End If
                Next
                .Cells(i, 2).Value = Left(strListFull, Len(strListFull) - 1)
                'If blnModify Then
                '    arrTemp = Split(Left(strAdmins2, Len(strAdmins2) - 1), ";")
                '    For j = 0 To UBound(arrTemp)
                '        If InStr(1, strListFull, arrTemp(j), vbTextCompare) = 0 Then
                '            Set objTemp = GetObject("WinNT://" & arrTemp(j))
                '            If Err.Number = 0 Then
                '                intRes = objGroup.Add("WinNT://" & arrTemp(j))
                '                If intRes = 0 Then
                '                    strListAdded = strListAdded & arrTemp(j) & ";"
                '                Else
                '                    strListNotAdded = strListNotAdded & arrTemp(j) & ";"
                '                End If
                '                Set objTemp = Nothing
                '            Else
                '                strListNotAdded = strListNotAdded & arrTemp(j) & " (не найден);"
                '                Err.Clear
                '            End If
                '        End If
                '    Next
                '    .Cells(i, 3).Value = Left(strListRemoved, Len(strListRemoved) - 1)
                '    .Cells(i, 4).Value = Left(strListNotRemoved, Len(strListNotRemoved) - 1)
                '    .Cells(i, 5).Value = Left(strListAdded, Len(strListAdded) - 1)
                '    .Cells(i, 6).Value = Left(strListNotAdded, Len(strListNotAdded) - 1)
                'End If
            Else
                .Cells(i, 2).Value = "Ошибка подключения"
            End If
        Else
            .Cells(i, 2).Value = "Не отвечает или не существует"
        End If
        Set objMember = Nothing
        Set objGroup = Nothing
    Next
    .Columns("b:f").AutoFit
End With
End Function
 
'======
 
Function Available(strName)
Dim objWMI, objItem
 
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strName & "'")
For Each objItem In objWMI
    If IsNull(objItem.StatusCode) Then
        Available = False
    Else
        Available = (objItem.StatusCode = 0)
    End If
Next
Set objItem = Nothing
Set objWMI = Nothing
End Function
1
0 / 0 / 1
Регистрация: 22.09.2009
Сообщений: 101
04.12.2020, 11:44
Классный скрипт. Спасибо большое, помогло!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2020, 11:44
Помогаю со студенческими работами здесь

Формирование списка, состоящего из списка самого низшего уровня
Написать программу формирования списка, состоящего из списков самого низшего уровня для заданного списка.

Дублирование вхождения каждого элемента списка One и формирование из этих значений списка Double (пояснить условие)
Здравствуйте. Вот собственно само задание: В составе программы описать функцию, которая дублирует вхождение каждого элемента списка One и...

Формирование списка из N первых элементов исходного списка
Предикат proc выводит первые N элементов исходного списка. Как его переделать, чтобы он не выводил, а формировал новый список в переменной...

Формирование и просмотр списка и функция, которая изменяет каждое значение информационной части элемента списка на его квадрат
Написать программу, содержащую процедуры формирования и просмотра списка и функцию, которая изменяет каждое значение информационной части...

Формирование списка + выборка из этого же списка
Сформировать список, состоящий из 5-10 записей в соответствии с вариантом задания: Список личной библиотеки студента: автор,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru