Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Ошибка в VB-скрипте


Автор: YURETS 15.5.2008, 21:36
Имеется скрипт, который прекрасно работает на 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 ?

Автор: mihanik 16.5.2008, 06:28
Во-первых!
Ты сначала используешь 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  

Автор: YURETS 16.5.2008, 22:07
Такой скрипт прекрасно работает в Экспи, на 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 завершился без ошибок.
Попробую конечнор же

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

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

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

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

Автор: YURETS 19.5.2008, 11:52
Не сработало :(

На 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 точно существует, только как его применить ?

Автор: YURETS 20.5.2008, 16:10
Нам рекалама не нужна, ф топку однозначно ... smile 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)