web-dev-qa-db-fra.com

Accès à un lecteur de disque à l'aide d'un ID de volume au lieu d'une lettre de lecteur sous Windows

Puis-je accéder à un lecteur de disque en utilisant l'ID de volume au lieu d'une lettre de lecteur sous Windows? Cela pourrait être très utile pour les lecteurs externes.

29
olvin

Vous pouvez utiliser mountvol dans la commande Invite pour obtenir l'ID du volume auquel vous souhaitez accéder.

enter image description here

Cet identifiant peut être utilisé pour ouvrir une fenêtre de l'explorateur, indépendamment de la lettre du lecteur.

enter image description here

Pour créer un raccourci sur le lecteur, créez un nouveau fichier de commandes avec ce contenu:

start \\?\Volume{1b3b1146-4076-11e1-84aa-806e6f6e6963}\
40
Gene

Dans PowerShell , utilisez Get-Volume transmis par le biais de Format-List comme ceci:

get-volume | fl 

vous donnera tout ce dont vous avez besoin, par exemple ce SYSTEM RESERVED volume sur l’une de mes machines:

ObjectId             : {1}\\Acer-M3900\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.ObjectId="{5b16a307-de54-11e7-8aeb-806e6f6e6963}:VO:\\?\Volume{b41b0670-0000-0000-00e8-0e8004000000}\"
PassThroughClass     :
PassThroughIds       :
PassThroughNamespace :
PassThroughServer    :
UniqueId             : \\?\Volume{b41b0670-0000-0000-00e8-0e8004000000}\
AllocationUnitSize   : 4096
DedupMode            : NotAvailable
DriveLetter          :
DriveType            : Fixed
FileSystem           : NTFS
FileSystemLabel      : SYSTEM RESERVED
FileSystemType       : NTFS
HealthStatus         : Healthy
OperationalStatus    : OK
Path                 : \\?\Volume{b41b0670-0000-0000-00e8-0e8004000000}\
Size                 : 105058304
SizeRemaining        : 33992704
PSComputerName       :
9
Aaron

Je préfère utiliser des lettres de lecteur absolues pour les lecteurs flash. Il existe des affectations adéquates pour à peu près n'importe qui, sauf si vous avez 20 lecteurs flash ou plus.

Sous Windows 7, utilisez Windows pour formater et attribuer une étiquette de lecteur. Si le lecteur en contient déjà une, utilisez la ligne de commande "Label" (lettre du lecteur) pour lui attribuer une étiquette de votre choix.

Cliquez ensuite sur Panneau de configuration, Système et sécurité, Outils d'administration, Gestion de l'ordinateur, Gestion du disque pour sélectionner le lecteur avec l'étiquette que vous avez créée en cliquant avec le bouton droit de la souris sur le lecteur, sélectionnez Modifier la lettre du lecteur et les chemins d'accès, puis affectez le volume à une lettre de lecteur spécifique. Il sera toujours monté sur cette lettre de lecteur si elle est disponible.

J'ai étiqueté des lecteurs contenant des données en temps réel et cet étiquetage n'a eu aucune incidence sur les données existantes. Cela semble fonctionner comme sur des disquettes au bon vieux temps

4
Bud

Utiliser une étiquette

Vous pouvez accéder à un lecteur de disque en utilisant son étiquette dans PS comme ceci:

ls -l (Get-Volume | ? FileSystemLabel -eq "Barry Allen drive").Path

C'est raccourci, utilisez le format complet dans un script pour une meilleure lisibilité - voir ci-dessous

Utiliser GptType

GPT utilise des ID fixes pour les partitions spéciales. Nous pouvons utiliser ceux-ci pour écrire des scripts portables, accéder aux volumes de restauration ou système sur n’importe quel ordinateur sans lui attribuer une lettre:

Volume du système:
ls -l (Get-Partition | ? GptType -eq "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}").AccessPaths[0]

Volume de récupération:
ls -l (Get-Partition | ? GptType -eq "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}").AccessPaths[0] -Force
cd "$((Get-Partition | ? GptType -eq "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}").AccessPaths[0])Recovery"

MSR: sur UEFI, il y a (devrait être) aussi une partition MSR, mais vous ne pouvez pas y accéder car elle ne possède ni volume ni système de fichiers:
Erreur : ls -l ((Get-Partition | ? GptType -eq "{e3c9e316-0b5c-4db8-817d-f92df00215ae}").AccessPaths[0]) -Force



Trois mises en garde:

Get-Volume ne listera pas les volumes cachés à moins que son exécution soit élevée, Get-Partition les listera non élevés, mais vous ne pourrez pas y accéder de manière non-élevée.

Avec Get-ChildItem (ls) Device Path doit être passé à l'aide de l'argument -LiteralPath (-l). Ce n'est pas à cause de '?' Caractère spécial. -Path ne fonctionne tout simplement pas avec Device Path, même si '?' est échappé.

Il n'est pas possible de créer un CD à la racine de Device Path. Mais il est possible de CD dans son dossier.



Explication et format complet des déclarations ci-dessus

Toujours utiliser le format complet dans un script pour une meilleure lisibilité

ls -l ((Get-Partition | ? GptType -eq "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}").AccessPaths[0])

est l'abréviation de:

Get-ChildItem -LiteralPath ((Get-Partition | Where-Object { $_.GptType -eq "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}" }).AccessPaths[0])

ls est un alias de Get-ChildItem
-l est raccourci -LiteralPath
? *attribute* -eq "*value*" est une construction abrégée de ? { $_.*attribute* -eq "*value*" }
? est un alias de Where-Object
-Force est utilisé pour voir les fichiers cachés sur le volume de récupération

Utilisation de Get-Partition et Get-Volume:
Get-Partition fournit le paramètre GptType, mais pas Label, Get-Volume donne Label, mais pas GptType

0
papo