Pregunta

Estoy iniciando WinPE 2 desde un UFD de arranque y necesito detectar la letra de la unidad para indicarle a ImageX dónde encontrar el WIM.Sin embargo, dependiendo de la máquina que estoy imaginando, hay diferentes unidades montadas.

Necesito una manera de montar consistentemente el UFD en, digamos, P:o algo.¿Existe alguna forma de detectar la letra de la unidad desde la que se inició la máquina u otra forma de pasar la ubicación de mi archivo WIM a una variable accesible desde startnet.cmd?

Aquí hay alguien más con el mismo problema en TechNet.

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

¿Fue útil?

Solución

Este VBScript mostrará un mensaje para cada unidad extraíble (letra: descripción), podría modificarse fácilmente para buscar una unidad en particular y devolver la letra.

 
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

No sé si eso ayuda en algo.

Otros consejos

Es una solución menos genérico que los otros mencionados aquí, pero parece que hay una manera específica para determinar qué cantidad involucrada en un "RAM-drive-arrancado" OS de Windows PE se inicia desde. De la documentación en Windows PE en el Kit de instalación de windows avanzada :

  

Si no está arrancando de Windows   Los servicios de implementación, la mejor manera de   determinar dónde Windows PE arranca desde   es la primera comprobación de   clave de registro PEBootRamdiskSourceDrive.   Si no está presente, analizar las unidades   del PEBootType correcta y buscar   algún tipo de archivo de etiqueta que identifica   la unidad de arranque.

(El valor del registro en cuestión se encuentra en HKLM \ SYSTEM \ CurrentControlSet \ Control).

Esto es una solución no óptima. En este caso, la unidad flash USB tiene que tener un nombre específico, que se pasa a la secuencia de comandos, que busca en todas las posibles letra de unidad para un partido. Probablemente no sea práctico para confiar en las unidades flash todos con el mismo nombre.

Todavía esperando que alguien aparece por una mejor respuesta!

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top