- Remove From My Forums
-
Question
-
Доброго времени суток.
В организации на 250+ машинах сетевые параметры адаптеров установлены статикой (sic), необходимо заставить брать их по DHCP. Нашел пару скриптов, наиболее подходящим показался VBS (с которым я совершенно не знаком), т.к.
другой предполагает указание имени сетевого подключения (например, «Подключение по локальной сети»). Сам скрипт:
WMIC Path Win32_NetworkAdapterConfiguration Where «IPEnabled = True» Call SetDNSServerSearchOrderWMIC Path Win32_NetworkAdapterConfiguration Where «IPEnabled = True» Call EnableDHCP
выдает: предполагается наличие окончания инструкции. строка1, символ 11.
пробовал использовать bat такого вида:
netsh interface ip set address name=»Подключение по локальной сети» source=dhcp
netsh interface ip set dnsservers name=»Подключение по локальной сети» source=dhcp
ощутил проблемы с кодировкой, 1 раз он отработал, хотя отписал козябру, НО я не могу понять как, т.к. повторить я этого не могу, пробовал 1251, 866, 869 — без толку.
Подскажите что-нибудь пожалуйста.
-
Edited by
Friday, September 19, 2014 8:19 AM
-
Edited by
Answers
-
Как я уже говорил с vbs не сталкивался, решение предложенное в той теме Aleksey.T
выдает: строка 1, символ 1, несоответствие типа ‘Code’, код: 800A000D
НО оказывается якобы vbs скрипт который я привел использует обычные команды wmic.exe, которые можно использовать в пакетном файле и это работает. Тема закрыта.
-
Marked as answer by
Копылов Анатолий
Friday, September 19, 2014 8:47 AM
-
Marked as answer by
- Remove From My Forums
-
Вопрос
-
Вот текст скрипта:
Const ADS_PROPERTY_DELETE = 4
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500DstrOU = «OU=Test,OU=Users,DC=name,DC=ru»
Set objConnection = CreateObject(«ADODB.Connection»)
objConnection.Open «Provider=ADsDSOObject;»
Set objCommand = CreateObject(«ADODB.Command»)
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
«<LDAP://dc=name,dc=ru>;(objectCategory=Group);» & _
«distinguishedName,primaryGroupToken;subtree»
Set objRecordSet = objCommand.Execute
objCommand.CommandText = _
«<LDAP://» & strOU & «>;» & _
«(&(objectclass=user)(objectcategory=person));» & _
«adspath,distinguishedname,sAMAccountName;subtree»
Set objRecordSet = objCommand.Executedim arrUsers()
dim intUserCount
intUserCount = -1Do Until objRecordSet.EOF
intUserCount = intUserCount + 1
ReDim Preserve arrUsers(intUserCount)
arrUsers(intUserCount) = «LDAP://DC1:389/» & objRecordSet.Fields(«distinguishedname»).Value
objRecordSet.MoveNextLoop
for i = 0 to UBound(arrUsers)
WScript.Echo «arrUsers(» & i & «) = » & arrUsers(i)
WScript.Echo
Set objUser = GetObject(arrUsers(i))
arrMemberOf = objUser.GetEx(«memberOf»)
‘ WScript.Echo arrMemberOf
If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
WScript.Echo «The memberOf attribute is not set.»
Else
For Each Group in arrMemberOf Set objGroup = GetObject(Group)_
objGroup.PutEx ADS_PROPERTY_DELETE, _
«member», arrUsers (i)
objGroup.SetInfo
Next
End If
nextПри запуске скрипта появляется Ошибка компиляции Microsoft VBScript: Предполагается наличие окончания инструкции
в строке For Each Group in arrMemberOf Set objGroup = GetObject(Group)_
Подскажите пожалуйста в чем моя ошибка?
Ответы
-
Вот финальный поправленный скрипт. Проверенно работает.
On Error Resume Next
Const ADS_PROPERTY_DELETE = 4
strOU = «OU=Test,OU=Users,OU=FMS,DC=noname,DC=com»
Set objConnection = CreateObject(«ADODB.Connection»)
objConnection.Open «Provider=ADsDSOObject;»
Set objCommand = CreateObject(«ADODB.Command»)
objCommand.ActiveConnection = objConnectionobjCommand.CommandText = _
«<LDAP://» & strOU & «>;» & _
«(&(objectclass=user)(objectcategory=person));» & _
«adspath,distinguishedname,sAMAccountName;subtree»
Set objRecordSet = objCommand.Executedim arrUsers()
dim intUserCount
intUserCount = -1Do Until objRecordSet.EOF
intUserCount = intUserCount + 1
ReDim Preserve arrUsers(intUserCount)
arrUsers(intUserCount) = objRecordSet.Fields(«distinguishedname»).Value
objRecordSet.MoveNextLoop
for i = 0 to UBound(arrUsers)
‘ WScript.Echo «arrUsers(» & i & «) = » & arrUsers(i)
WScript.Echo
‘»LDAP://» &
strLDAPUser = «LDAP://» & arrUsers(i)Set objUser = GetObject(strLDAPUser) ‘ <================================================
ErrNumber1 = Err.Number
ErrDescription1 = Err.DescriptionarrMemberOf = objUser.GetEx(«memberOf») ‘ <================================================
ErrNumber0 = Err.Number
ErrDescription0 = Err.Descriptionif ErrNumber0 = -2147463155 then
WScript.Echo «strLDAPUser = » & strLDAPUser
WScript.Echo «The memberOf attribute is not set.»
else
If not ErrNumber1 = 0 Then
WScript.Echo «strLDAPUser = » & strLDAPUser
WScript.Echo «Err.Number1 = » & ErrNumber1
WScript.Echo «Err.Description1 = » & ErrDescription1elseif ErrNumber1 = 0 then
For Each Group in arrMemberOf
strLDAP = «LDAP://» & Group
Set objGroup = GetObject(strLDAP) ‘ <================================================
ErrNumber2 = Err.Number
ErrDescription2 = Err.Descriptionif not ErrNumber2 = 0 then
WScript.Echo «strLDAPUser = » & strLDAPUser
WScript.Echo «Err.Number2 = » & ErrNumber2
WScript.Echo «Err.Description2 = » & ErrDescription2
WScript.Echo «strLDAP = » & strLDAP
else
objGroup.PutEx ADS_PROPERTY_DELETE, «member», Array(arrUsers(i))objGroup.SetInfo ‘ <================================================
ErrNumber3 = Err.Number
ErrDescription3 = Err.Description
if not ErrNumber3 = 0 then
WScript.Echo «strLDAPUser = » & strLDAPUser
WScript.Echo «Err.Number3 = » & ErrNumber3
WScript.Echo «Err.Description3 = » & ErrDescription3
else
‘
end if
end if
Next
Else
WScript.Echo «strLDAPUser = » & strLDAPUser
WScript.Echo «Err.Number1 = » & ErrNumber1
WScript.Echo «Err.Description1 = » & ErrDescription1
End If
end if
nextobjRecordSet.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
WScript.quit-
Помечено в качестве ответа
29 сентября 2011 г. 12:32
-
Помечено в качестве ответа
Товарищи помогите кто знает советом решить следующую проблему.
Попытался в 1с использовать MSScriptControl, следующим образом:
Script=Новый COMОбъект(«MSScriptControl.ScriptControl»);
Script.Language=»vbscript»;
СтрокаСкрипта=»Private Declare Function URLDownloadToFile Lib «»urlmon.dll»» Alias «»URLDownloadToFileA»» (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
|Sub GetFile
|Dim ret As Long
|ret = URLDownloadToFile(0, «»http://www.mail.ru»», «»c:1.html»», 0, 0)
|End Sub»;
Script.AddCode(СтрокаСкрипта);
При выполнении последнего оператора выдается ошибка:
{Форма.Форма(93)}: Ошибка при вызове метода контекста (AddCode): Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции
Script.AddCode(СтрокаСкрипта);
по причине:
Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции.
Этот же код написанный в екселе в качестве макроса прекрасно работает. Я так понимаю проблема в том, что я пытаюсь определить функцию URLDownloadToFile из библиотеки «urlmon.dll».
Не подскажите как правильно написать чтобы заработало?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
1 2018-03-21 00:46:44
- badhabit
- Участник
- Неактивен
- Рейтинг : [0|0]
Тема: VBS: не получается сделать массив структур с массивом )
Добрый день. Не знаю правильно ли я использовал терминологию в заголовке, все ж С/С++ ближе… Но есть потребность сделать динамический массив структур, в свою очередь каждая из которых тоже содержит «мембером» динамический массив… Попробовал вот так:
Option Explicit
Main
Function Main
Dim arr(), i
For i = 0 To 10
ReDim Preserve arr(i)
Set arr(i) = New struct
arr(i).sVar1 = "str" & i & " var1"
arr(i).sVar2 = "str" & i & " var2"
Dim j
For j = 0 To 10
ReDim Preserve arr(i).aArr(j)
arr(i).aArr(j) = 121212 + j
Next
Next
For i = 0 To UBound(arr)
WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
Next
End Function
Class struct
Public aArr()
Public sVar1
Public svar2
End Class
На строке
ReDim Preserve arr(i).aArr(j)
валится с ошибкой:
Ошибка компиляции Microsoft VBScript: Предполагается наличие окончания инструкции
Подскажите, что делаю не так…
2 Ответ от Xameleon 2018-03-21 14:37:31
- Xameleon
- Разработчик
- Неактивен
Re: VBS: не получается сделать массив структур с массивом )
badhabit, а можно увидеть скрипт целиком ? А то объявления struct не видно.
На первый взгляд, как я понимаю, беда в том, что Вы пытаетесь «редимить» свойство объекта. К сожалению, VBScript хочет после Redim получить прямую ссылку на массив. Думаю в Вашем случае может помочь что-то типа:
Option Explicit
Main
Function Main
Dim arr(), i, propArray
For i = 0 To 10
ReDim Preserve arr(i)
Set arr(i) = New struct
arr(i).sVar1 = "str" & i & " var1"
arr(i).sVar2 = "str" & i & " var2"
Dim j
propArray = arr(i).aArr
For j = 0 To 10
ReDim Preserve propArray(j)
propArray(j) = 121212 + j
Next
arr(i).aArr = propArray
Next
For i = 0 To UBound(arr)
WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
Next
End Function
Не уверен, что Вы выбрали правильный путь. Думаю всё-таки стоит взглянуть на всю картину целиком.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !
3 Ответ от badhabit 2018-03-21 16:28:20 (изменено: badhabit, 2018-03-21 19:29:16)
- badhabit
- Участник
- Неактивен
- Рейтинг : [0|0]
Re: VBS: не получается сделать массив структур с массивом )
Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct
Пс. Ваш способ попробую
4 Ответ от badhabit 2018-03-21 20:32:29
- badhabit
- Участник
- Неактивен
- Рейтинг : [0|0]
Re: VBS: не получается сделать массив структур с массивом )
Option Explicit
Main
Function Main
Dim arr(), i, propArray
For i = 0 To 10
ReDim Preserve arr(i)
Set arr(i) = New struct
arr(i).sVar1 = "str" & i & " var1"
arr(i).sVar2 = "str" & i & " var2"
Dim j
propArray = arr(i).aArr
For j = 0 To 10
ReDim Preserve propArray(j)
propArray(j) = 121212 + j
Next
arr(i).aArr = propArray
Next
Dim k
For i = 0 To UBound(arr)
WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
Dim zzz()
zzz = arr(i).aArr
For k = 0 To UBound(zzz) - 1
WScript.Echo zzz(k)
Next
Next
End Function
Class struct
Public aArr()
Public sVar1
Public svar2
End Class
теперь ругается тут
говрит
несоответствие типа
5 Ответ от Xameleon 2018-03-22 13:37:20
- Xameleon
- Разработчик
- Неактивен
Re: VBS: не получается сделать массив структур с массивом )
badhabit,
badhabit пишет:
Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct
Прошу прощения. Не заметил.
Тогда вот так можно сделать:
Option Explicit
Main
Function Main
Dim arr(), i, propArray
For i = 0 To 10
ReDim Preserve arr(i)
Set arr(i) = New struct
arr(i).sVar1 = "str" & i & " var1"
arr(i).sVar2 = "str" & i & " var2"
Dim j
propArray = arr(i).aArr
For j = 0 To 10
ReDim Preserve propArray(j)
propArray(j) = 121212 + j
Next
arr(i).aArr = propArray
Next
Dim k
For i = 0 To UBound(arr)
WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
Dim zzz
zzz = arr(i).aArr
For k = 0 To UBound(zzz) - 1
WScript.Echo zzz(k)
Next
Next
End Function
Class struct
Public aArr
Public sVar1
Public svar2
Private Sub Class_Initialize()
aArr = Array()
End Sub
End Class
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !
6 Ответ от badhabit 2018-03-25 11:45:39
- badhabit
- Участник
- Неактивен
- Рейтинг : [0|0]
Re: VBS: не получается сделать массив структур с массивом )
Xameleon, спасибо большое. Все заработало. Вот ещё ссылка по теме https://stackoverflow.com/questions/480 … n-vbscript
7 Ответ от Xameleon 2018-03-25 16:19:00
- Xameleon
- Разработчик
- Неактивен
Re: VBS: не получается сделать массив структур с массивом )
badhabit, рад, что пригодилось. Вообще, ИМХО, VBS классы больше подразумеваются под объектную модель, нежели под структуры. Возможно Вашу задачу можно решить иначе. Если поведаете о конечной цели, возможно смогу посоветовать что-то более подходящее.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !
8 Ответ от badhabit 2018-03-25 17:35:12
- badhabit
- Участник
- Неактивен
- Рейтинг : [0|0]
Re: VBS: не получается сделать массив структур с массивом )
Да в принципе надо было получить то — что получилось, без разницы как это называть.)) Получился динамический массив «объектов» и в каждом еще по одному динамическому массиву… Добавив в «структуру» конструктор и метод, в принципе получил класс))
Просто писать на vbs самый, в настоящий момент, удобный вариант, а синтаксис я его не шибко хорошо знаю, так что еще раз спасибо за помощь!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
|
eremeev23rus Пользователь Сообщений: 24 |
#1 15.09.2015 11:10:40 Добрый день.
|
||
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
eremeev23rus, здравия. Можно в ВБА написать этот макрос, отладить и после перенести в ВБС. <#0> |
|
JayBhagavan, Спасибо, а данный макрос необходимо преобразовывать? |
|
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
eremeev23rus, а Вы попробуйте его так в ВБА запустить и узнаете. <#0> |
|
eremeev23rus Пользователь Сообщений: 24 |
#5 15.09.2015 11:29:20 JayBhagavan,
Подскажите, пожалуйста, что не так я сформировал? |
||
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
eremeev23rus, что не так я сходу не скажу. (у меня нет Вашего файла, с которым работает макрос) А что Вас не устраивает или на чём ошибка возникает, если она есть? <#0> |
|
JayBhagavan, при выполнении отображается ошибка: Предполагается наличие окончания инструкции, Код: 800A0401, ошибка компиляции. |
|
|
Влад Пользователь Сообщений: 1189 |
Нет в ВБС такие понятий как «Sheets» и «Cells» — это объекты книги/листа, поэтому должна быть указана полная ссылка на них. |
|
Влад, а можно пример? Для лучшего понимания. |
|
|
Влад Пользователь Сообщений: 1189 |
#10 15.09.2015 12:04:12 Пример:
|
||
|
Не удается сделать описаным методом. Может можно сделать, чтобы нажималась кнопка на листе в Excel? |
|
|
Hugo Пользователь Сообщений: 23101 |
Rows.Count возможно тоже непонятно для vbs. Изменено: Hugo — 15.09.2015 13:38:29 |
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#13 15.09.2015 13:43:25
Изменено: JayBhagavan — 15.09.2015 14:09:42 <#0> |
|
|
Hugo Пользователь Сообщений: 23101 |
Ну и для vbs первой строкой нужно написать |
|
Hugo Пользователь Сообщений: 23101 |
Нашёл ещё нестыковку — в vbs нельзя писать |
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#16 15.09.2015 13:55:51
Исправил.
То есть нужно убрать Sub, () и End Sub? <#0> |
||||
|
Hugo Пользователь Сообщений: 23101 |
Ещё — xlUp нужно заменить на -4162 |
|
Hugo Пользователь Сообщений: 23101 |
#18 15.09.2015 14:00:43
Да, или первой строкой вызывать этот sub |
||
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#19 15.09.2015 14:10:23 Hugo, благодарю за Ваши замечая. Вроде все учёл. <#0> |