PDA

Показать полную графическую версию : Разбивка диска на T-13, T-12 установки WindowsXP - Критическая ошибка 8004100a WMI


dany2k
10-06-2010, 07:19
Всем здравствуйте.

Мучаюсь с проблемой разбиения жесткого диска на T-13, T-12 установки WindowsXP (сетевая установка через RIS/WDS)
Кто-нибудь пробовал запускать vbs-скрипт из CMDLINES.TXT, который обращается к WMI через GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") ???

При попытке обратиться к любому из классов "Win32_" или "CIM_", например простейший запрос из VBS objService.ExecQuery("SELECT * FROM Win32_DiskDrive )
Почему-то выдает: Критическая ошибка 8004100a swbemobjectset

Может где-то какие-нить права нужно выставить, или что-то запустить, или дополнительно установить на T-13, T-12 установки WindowsXP, чтобы нормально заработал WMI?
Причем интересно, что "SELECT * FROM __namespace" - работает на ура (т.е. минимальные операции выборок WMI можно производить)

Скрипт проверен, в обычной среде (на установленной операционке WindowsXP) работает без проблем, все отрабатывает четко, а вот во время установки на T-13, T-12 не хочет... :(

Поиски информации особо никчему не привели, нашел на нескольких форумах, где вскользь об этом говорится, но что-конкретно сделать - ничего не сказано:
http://us.generation-nt.com/answer/w...12.html?page=2
http://programming.itags.org/active-server-page/128945/

Отсюда вопрос, возможно ли вообще на T13, T12 обратиться к WMI и если нет, то тогда при помощи чего автоматизрованно можно разбить жесткие диски на паритиции, передвинуть буквы устройств?
diskpart умеет разбивать, передвигать, но для того, чтобы знать что куда двигать и что на компьютере из накопителей есть - нужна логика управления.

Т.е. если на компьютере 1 диск-драйв и на этом диске 1 партиция - сделать так-то. Если два и более диск-драйва - сделать так-то.

amel27
10-06-2010, 09:24
возможно ли вообще на T13, T12 обратиться к WMI »
из этой темы (http://forum.oszone.net/showthread.php?p=1238122) следует, что скорее всего нет

diskpart умеет разбивать, передвигать, но для того, чтобы знать что куда двигать и что на компьютере из накопителей есть - нужна логика управления »а в чем логика управления?

dany2k
10-06-2010, 11:05
Передвинуть буквы CD-ROM(ов) из пула свободных букв (Z,X,Y,W,V)
Если на компьютере 1 диск-драйв и на этом драйве 1 системная праймари-партиция и есть неразмеченное место - создать Extended партицию.
Если на компьютере 1 диск-драйв и на этом драйве 1 системная праймари-партиция и нет неразмеченного места - ничего не делать
Если два и более диск-драйва - выбрать неразмеченный дискдрайв где нет системной праймари-партиция, создать на выбранном драйве партицию.

Выборка диск-драйвов производится среди подключеных через IDE/SCSI, т.е. отметаем флэш-диски, HDD-USB

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

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

Ладно если нельзя на T12,T13 обратитья к WMI, тогда будем через vbs запускать diskpart и анализировать StdOUT, если конечно других вариантов больше нет...
Или есть?


Пробую сейчас анализировать из текстового файла StdOUT diskpart'а, возникли 2 проблемы:

1) не могу поймать перевод строки, чтоб загнать в массив: alines = Split(alines, vbNewline)
Пробовал: VbCrLf, VbCr, chr(13) - не сплитится и все-тут.
2) На T12,T13 - вместо русских букв вылезают кракозябры (как я понял кодировка CP866), как анализировать эти кракозябры??
Быть может тогда имеет смысл использовать diskpart от английской винды, но заработает ли он в русской устанавливаемой WindowsXP ?

amel27
10-06-2010, 11:42
1. на Win2003 vbCrLf, на WinXP (RUS) vbLf
2. на WinXP (RUS) работает следующий вызов (на Win2003 не работает):
CMD /C "chcp 1251|(echo list disk|diskpart)"

dany2k
11-06-2010, 11:06
>>на WinXP (RUS) vbLf

С этим разделителем split работает.
Как я понял - это аналог chr(10)


>>CMD /C "chcp 1251|(echo list disk|diskpart)"

Что-то не прокатывает chcp 1251 - все-равно кракозябры выводятся в коносоль... :(

amel27
14-06-2010, 05:02
Что-то не прокатывает chcp 1251 - все-равно кракозябры выводятся в коносоль... »
- для CMD-скриптов никакой перекодировки не требуется, там "родной" является OEM, в ней и выводит diskpart;
- Вами заявлена категория WSH, для которой "родной" является ANSI, поэтому для консольных команд потребуется перекодировка 866->1251, предложенный вызов diskpart делает это ДО передачи в скрипт, пример на VBS:

Dim oShell, oExec, sInput
Set oShell = CreateObject("WScript.Shell")

Set oExec = oShell.Exec("CMD /C ""chcp 1251|(echo list disk|diskpart)""")

Do While True
If oExec.StdOut.AtEndOfStream Then Exit Do
sInput = sInput & oExec.StdOut.ReadAll()
WScript.Sleep 100
Loop

WScript.Echo sInput




© OSzone.net 2001-2012