Как я могу определить букву диска загруженного USB-накопителя по сценарию? - PullRequest
4 голосов
/ 06 апреля 2009

Я запускаю WinPE 2 с загрузочного UFD, и мне нужно определить букву диска, чтобы сообщить ImageX, где найти WIM. Однако, в зависимости от машины, которую я создаю, существуют разные установленные диски.

Мне нужен способ последовательно смонтировать UFD, скажем, в P: или что-то в этом роде. Есть ли способ определить букву диска, с которого была загружена машина, или другой способ передать местоположение моего WIM-файла в переменную, доступную из startnet.cmd?

Вот еще один человек с такой же проблемой на TechNet.

http://social.technet.microsoft.com/Forums/en-US/itprovistadeployment/thread/3e8bb8db-a1c6-40be-b4b0-58093f4833be?prof=required#

Ответы [ 3 ]

3 голосов
/ 07 апреля 2009

Этот VBScript покажет сообщение для каждого съемного диска (буква: описание), может быть легко изменено для поиска определенного диска и возврата буквы.

 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk where MediaType = 11")

For Each objDisk in colDisks
    Wscript.Echo objDisk.DeviceID & objDisk.Description
Next

Не знаю, помогает ли это вообще.

2 голосов
/ 17 апреля 2009

Это менее общее решение, чем другие, упомянутые здесь, но, похоже, существует особый способ определить, с какого базового тома была загружена операционная система Windows PE. Из документации по Windows PE в Windows Advanced Installation Kit :

Если вы не загружаете Windows Службы развертывания - лучший способ определить, откуда загружается Windows PE это сначала проверить на Раздел реестра PEBootRamdiskSourceDrive. Если его нет, отсканируйте диски правильного PEBootType и ищите какой-то файл тегов, который идентифицирует загрузочный диск.

(Соответствующее значение реестра находится в папке HKLM \ SYSTEM \ CurrentControlSet \ Control.)

0 голосов
/ 06 апреля 2009

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

Все еще надеясь, что кто-то придет с лучшим ответом!

setlocal

:: Initial variables
set TMPFILE=%~dp0getdrive.tmp
set driveletters=abcdefghijklmnopqrstuvwxyz
set MatchLabel_res=

for /L %%g in (2,1,25) do call :MatchLabel %%g %*

if not "%MatchLabel_res%"=="" echo %MatchLabel_res%

goto :END

:: Function to match a label with a drive letter. 
::
:: The first parameter is an integer from 1..26 that needs to be 
:: converted in a letter. It is easier looping on a number
:: than looping on letters.
::
:: The second parameter is the volume name passed-on to the script
:MatchLabel

:: result already found, just do nothing 
:: (necessary because there is no break for for loops)
if not "%MatchLabel_res%"=="" goto :eof

:: get the proper drive letter
call set dl=%%driveletters:~%1,1%%

:: strip-off the " in the volume name to be able to add them again further
set volname=%2
set volname=%volname:"=%

:: get the volume information on that disk
vol %dl%: > "%TMPFILE%" 2>&1

:: Drive/Volume does not exist, just quit
if not "%ERRORLEVEL%"=="0" goto :eof

set found=0
for /F "usebackq tokens=3 delims=:" %%g in (`find /C /I "%volname%" "%TMPFILE%"`) do set found=%%g

:: trick to stip any whitespaces
set /A found=%found% + 0


if not "%found%"=="0" set MatchLabel_res=%dl%:
goto :eof

:END

if exist "%TMPFILE%" del "%TMPFILE%"
endlocal
...