Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в VB-скрипте, Почему скрипт работает только на XP 
:(
    Опции темы
YURETS
Дата 15.5.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Имеется скрипт, который прекрасно работает на XP SP3, но вываливается на ошибку на Windows 2000 SP4 RU
 
Ошибка такая:
Невозможно создание объекта контейнером ActiveX: 'Shell.LocalMachine'
 
Скрипт такой:

Код

'on error resume next
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Dim WshShell
Dim objComputer
Dim strComputer
Dim objUser
strUserName = "Pupkin"
strPassword = "123"
 
 
    On Error Resume Next
 
    Set objComputer = CreateObject("Shell.LocalMachine")
        strComputer = objComputer.MachineName
    Set objComputer = Nothing
 
    Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName & ", user")
        objUser.SetPassword strPassword
        objUser.SetInfo
    Set objUser = Nothing
 
    If Err.Number Then
        WScript.Echo "Ошибка №" & Err.Number  & " , " & Err.Description
        MyErr = Err.Number
        Err.Clear
    End If
 

В чем может быть причина и как исправить этот скрипт для работы в Windows 2000 Sp4 RU ?


Это сообщение отредактировал(а) YURETS - 15.5.2008, 21:38
PM MAIL   Вверх
mihanik
Дата 16.5.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 61
Всего: 109



Во-первых!
Ты сначала используешь WshShell, а потом её объявляешь.
Код

Set WshShell = Wscript.CreateObject("Wscript.Shell")
Dim WshShell

Надо делать наоборот.
Код

Dim WshShell
Set WshShell = Wscript.CreateObject("Wscript.Shell")


Во-вторых!
Далее нигде(!) WshShell не используешь!!!

В-третьих!
Приведи код в порядок, а потом попробуй его запустить с закоментированной строкой "   On Error Resume Next".
При наличии ошибок выложи их сюда.

В-четвёртых!
Какой сервер сценариев используется?
Cscript?
Wscript?

В-пятых!
Попробуй перерегистировать на Win 2000 скрипты
Код

regsvr32/s jscript.dll 
regsvr32/s vbscript.dll 
regsvr32/s scrobj.dll  



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
YURETS
Дата 16.5.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Такой скрипт прекрасно работает в Экспи, на 2000-ом еще не проверял.
Тольк не пойму, для чего нужно присваивать массивам значение Nothing.
Ксати на 2000-ой станции потушена служба "Сервер", это может как-то повлиять на выполнение скрипта ?

Код

'on error resume next
Dim MyShell
Set MyShell = WScript.CreateObject("WScript.Shell")
Dim objComputer
Dim objUser
strUserName = "Pupkin"
strNewUserName = "Petrov"
strPassword = "123"
        strComputer = "."
    Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName & ", user")
        Set objComputer = GetObject("WinNT://" & strComputer)
    objComputer.MoveHere objUser.AdsPath, strNewUserName
    Set objComputer = Nothing
    Set objUser = Nothing
    Set objUser = GetObject("WinNT://" & strComputer & "/" & strNewUserName & ", user")
        objUser.SetPassword strPassword
        objUser.SetInfo
    Set objUser = Nothing


Сервер сценариев - на XP CSCRIPT 5.7  (делал Cscript.exe //H:CScript)
на 2000-ой по умолчанию WScript, 5.6

regsvr32/s vbscript.dll 

Это мне кажется не нужно, потому как на 2к другие скрипты прекрасно работаеют, даже 4-меговый WMIDiag.vbs завершился без ошибок.
Попробую конечнор же

PM MAIL   Вверх
mihanik
Дата 17.5.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 61
Всего: 109



Цитата(YURETS @  16.5.2008,  22:07 Найти цитируемый пост)
потушена служба "Сервер", 

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

С другой стороны...
Ты же обращаешься к компу по имени?
Возможно, что эта служба как-то и задействована в этом запросе...



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
YURETS
Дата 17.5.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Есть один момент, когда потушена служба сервер то невозможно например пользователю убрать или добавить права.
Но переименовать пользователя и задать ему пароль можно и с потушенной службой сервера.
В любом случае запрос должен сработать.
В понедельник протестирую на 2K и сообщу результаты.

PM MAIL   Вверх
YURETS
Дата 19.5.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Не сработало :(

На 2000-ой этот скрипт выругался на ошибку:

Строка: 13
Символ: 2
Ошибка: 0x80005000
Код: 80005000
Источник: (null)

Ему не нравится такая строка:
Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName & ", user")

Или что-то не находит, не может создать объект.

Я вот что думаю, может быть попробовать переименовать пользователя и сменить ему пароль при помощи WMI.

Что-то типа такого:
Код

Set UzverZ = objWMIService.ExecQuery ("Select * from Win32_UserAccount Where Domain = '" & DomNme & "'")
For Each objSoftware in UzverZ
If objSoftware.Name = "Pupkin"
      objSoftware.Rename("Pupkin","Petrov")
EndIf


В классе Win32_UserAccount  метод Rename точно существует, только как его применить ?

PM MAIL   Вверх
YURETS
Дата 20.5.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Нам рекалама не нужна, ф топку однозначно ... smile 

По теме, разобрался, там оказалось всё просто - ошибка из-за неверного количества аргументов.
Добавил домен и старое имя пользователя и всё прекрасно заработало  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.