2009-04-06 5 views
4

Je lance WinPE 2 à partir d'un disque mémoire flash amorçable, et j'ai besoin de détecter la lettre de lecteur pour indiquer à ImageX où trouver le WIM. Cependant, en fonction de la machine que j'imagine, il existe différents lecteurs montés.Comment puis-je détecter la lettre de lecteur d'un lecteur USB démarré à partir du script?

J'ai besoin d'un moyen de monter de manière cohérente la fonction UFD sur, disons, P: ou quelque chose comme ça. Y at-il un moyen de détecter la lettre du lecteur à partir de laquelle la machine a été démarrée, ou un autre moyen de passer l'emplacement de mon fichier WIM à une variable accessible depuis startnet.cmd?

Voici quelqu'un d'autre qui a le même problème sur TechNet.

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

Répondre

3

Ce VBScript affiche un message pour chaque lecteur amovible (lettre: description), pourrait être facilement modifié pour rechercher un lecteur particulier et renvoyer la lettre.


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 

Je ne sais pas si cela aide du tout.

+0

Cette solution semble évidente maintenant que vous la présentez. Je parie que cela signifie que c'est la bonne réponse. Je dois attendre le matin pour l'implémenter, cependant. Merci!! –

+0

Cela a fonctionné très bien! Merci encore. –

+0

Les solutions les plus simples sont généralement les meilleures, heureux que je puisse aider. – Tester101

0

est ici une solution non optimale. Dans ce cas, l'UFD doit avoir un nom spécifique, qui est transmis au script qui recherche chaque lettre de lecteur possible pour une correspondance. Il n'est probablement pas pratique de s'appuyer sur les lecteurs flash ayant tous le même nom.

Toujours en espérant que quelqu'un arrive avec une meilleure réponse!

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 
+0

En utilisant cette solution a soulevé un autre casse-tête - la première fois ce script a couru, par erreur sélectionné le volume de démarrage (X :, le disque RAM) en tant que disque amovible. Si je réexécutais le script, il sélectionnerait le bon disque. Juste une note pour les futurs lecteurs. –

2

C'est une solution moins générique que les autres mentionnés ici, mais il semble y avoir une façon spécifique de déterminer le volume sous-jacent à partir duquel un système d'exploitation Windows PE "démarré par RAM" a été démarré. De la documentation sur Windows PE dans le Windows Advanced Installation Kit:

Si vous n'êtes pas le démarrage de Windows Services de déploiement, la meilleure façon de déterminer où Windows PE démarré à partir est d'abord pour vérifier clé de Registre PEBootRamdiskSourceDrive. Si ce n'est pas le cas, balayez les lecteurs du PEBootType correct et recherchez un type de fichier de balise identifiant le lecteur de démarrage.

(La valeur de Registre en question se trouve sous HKLM \ SYSTEM \ CurrentControlSet \ Control.)

Questions connexes