Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разбивка диска на T-13, T-12 установки WindowsXP - Критическая ошибка 8004100a WMI (http://forum.oszone.net/showthread.php?t=177806)

dany2k 10-06-2010 07:19 1431233

Разбивка диска на T-13, T-12 установки WindowsXP - Критическая ошибка 8004100a WMI
 
Всем здравствуйте.

Мучаюсь с проблемой разбиения жесткого диска на 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 1431290

Цитата:

Цитата dany2k
возможно ли вообще на T13, T12 обратиться к WMI »

из этой темы следует, что скорее всего нет

Цитата:

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

а в чем логика управления?

dany2k 10-06-2010 11:05 1431356

Передвинуть буквы 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 1431391

1. на Win2003 vbCrLf, на WinXP (RUS) vbLf
2. на WinXP (RUS) работает следующий вызов (на Win2003 не работает):
Код:

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

dany2k 11-06-2010 11:06 1432035

>>на WinXP (RUS) vbLf

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


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

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

amel27 14-06-2010 05:02 1433661

Цитата:

Цитата dany2k
Что-то не прокатывает 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



Время: 23:58.

Время: 23:58.
© OSzone.net 2001-