Pergunta

Estou lançando WinPE 2 de um UFD inicializável, e eu preciso para detectar a letra da unidade, a fim de contar ImageX onde encontrar o WIM. No entanto, dependendo da máquina que eu sou de imagem, existem diferentes unidades montadas.

Eu preciso de uma maneira de montar de forma consistente o UFD, digamos, P: ou algo assim. Existe uma maneira de detectar a letra da unidade a partir do qual a máquina foi inicializado, ou outra forma de passar o local do meu arquivo WIM a uma variável acessível a partir startnet.cmd?

O Aqui alguém com o mesmo problema em cima da TechNet.

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

Foi útil?

Solução

Esta VBScript mostrará uma mensagem para cada unidade removível (letra: Descrição)., Poderia ser facilmente modificado para procurar uma unidade específica e retornar a 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

não sei se isso ajuda em tudo.

Outras dicas

É uma solução menos genérica do que os outros mencionados aqui, mas parece haver uma maneira específica para determinar quais subjacente volume de um "RAM-drive-inicializado" Windows PE OS foi iniciado a partir. A partir da documentação no Windows PE no Instalação Windows Advanced Kit :

Se você não estiver fazendo a inicialização do Windows Serviços de implantação, a melhor maneira de determinar onde Windows PE iniciado a partir é a primeira seleção para PEBootRamdiskSourceDrive chave de registro. Se ele não estiver presente, verificar as unidades do PEBootType correta e olhar para algum tipo de arquivo de marca que identifica a unidade de inicialização.

(O valor de registo em questão fica sob HKLM \ SYSTEM \ CurrentControlSet \ Control.)

Aqui está uma solução não-ideal. Neste caso, a UFD tem que ter um nome específico, que é passado para o script que busca a cada letra de unidade possível para um jogo. Provavelmente não é prático para contar com as unidades flash todos com o mesmo nome.

Ainda esperando que alguém pops por uma resposta melhor!

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top