1

Background:

I'm working on a powershell script to automate installation from a USB stick via WinPE. Because the target systems have several drives, each possibly having a couple partitions, Windows quickly runs out of drive letters. Part of my script unassigns all drive letters, then reassigns only the necessary disks. Right now, I assign hard-coded letters to certain partitions, but I've run into a problem with one of the letters not being unassigned.

The issue is that I somehow have a volume with an assigned drive letter, yet there's apparently no underlying partition, and since Remove-PartitionAccessPath requires a partition object, there's no way to do it from powershell (without resorting to diskpart).

Here's the output of diskpart - you can see the selected disk has no partitions, yet somehow has a volume:

Microsoft DiskPart version 10.0.15063.0

Copyright (C) Microsoft Corporation.
On computer: MININT-6GI0UNM

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online         5589 GB      0 B        *
  Disk 1    Online         5589 GB      0 B        *
  Disk 2    Online         5589 GB      0 B        *
  Disk 3    Online         5589 GB      0 B        *
  Disk 4    Online         5589 GB      0 B        *
  Disk 5    Online         5589 GB      0 B        *
  Disk 6    Online         5589 GB      0 B        *
  Disk 7    Online         5589 GB      0 B        *
  Disk 8    Online         5589 GB      0 B        *
  Disk 9    Online         5589 GB      0 B        *
  Disk 10   Online         5589 GB      0 B        *
  Disk 11   Online         5589 GB      0 B        *
  Disk 12   Online          447 GB      0 B        *
  Disk 13   Online          447 GB      0 B        *
  Disk 14   Online          232 GB      0 B        *
  Disk 15   Online           29 GB    29 GB
  Disk 16   Online           28 GB      0 B        *

DISKPART> sel disk 15

Disk 15 is now the selected disk.

DISKPART> list part

There are no partitions on this disk to show.

DISKPART> detail disk

ATA Hypervisor USB Device
Disk ID: E0623CE6
Type   : USB
Status : Online
Path   : 0
Target : 0
LUN ID : 0
Location Path : UNAVAILABLE
Current Read-only State : No
Read-only  : No
Boot Disk  : No
Pagefile Disk  : No
Hibernation File Disk  : No
Crashdump Disk  : No
Clustered Disk  : No

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 20    E                       Removable       0 B  Unusable

DISKPART>

Here's what happens when I try to remove the letter from powershell:

PS X:\sources> Get-Volume -DriveLetter E | Remove-PartitionAccessPath -AccessPath "E:"
Remove-PartitionAccessPath : The input object cannot be bound to any parameters for the command either because the
command does not take pipeline input or the input and its properties do not match any of the parameters that take
pipeline input.
At line:1 char:29
+ ... t-Volume -DriveLetter E | Remove-PartitionAccessPath -AccessPath "E:"
+                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (MSFT_Volume (Ob...rosoft/Wind...):PSObject) [Remove-PartitionAccessPat
   h], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Remove-PartitionAccessPath

PS X:\sources> Get-Volume -DriveLetter E | fl *


OperationalStatus     : Unknown
HealthStatus          : Healthy
DriveType             : Removable
FileSystemType        : Unknown
DedupMode             : NotAvailable
ObjectId              : {1}\\MININT-6GI0UNM\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.ObjectId="{63585070-
                        3cd2-11e7-b877-806e6f6e6963}:VO:\\?\Volume{635850c4-3cd2-11e7-b877-806e6f6e6963}\"
PassThroughClass      :
PassThroughIds        :
PassThroughNamespace  :
PassThroughServer     :
UniqueId              : \\?\Volume{635850c4-3cd2-11e7-b877-806e6f6e6963}\
AllocationUnitSize    : 0
DriveLetter           : E
FileSystem            :
FileSystemLabel       :
Path                  : \\?\Volume{635850c4-3cd2-11e7-b877-806e6f6e6963}\
Size                  : 0
SizeRemaining         : 0
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/Storage:MSFT_Volume
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties



PS X:\sources> Get-Volume -DriveLetter E | Get-Partition
PS X:\sources> $null -eq (Get-Volume -DriveLetter E | Get-Partition)
True

Powershell version table:

PS X:\sources> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.15063.0
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.0
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

I can try to get more details about the contents of the disk in question if necessary.

What could be causing this? Is there a powershell workaround?

Note: I realize it would probably be better to have Windows pick drive letters instead of hard-coding them, but I'm still curious about the mysterious volume.

Drew McGowen
  • 11,471
  • 1
  • 31
  • 57
  • Looks like (for whatever reason) the entire device is being treated as a single volume rather than as a disk that should be partitioned. Some removable disks are traditionally unpartitioned, e.g., DVDs and floppy disks. Any chance that's a blu-ray drive or similar device? (I think USB drives can also be formatted as a single volume, but if that were the case it ought to show up as used space, not free space.) – Harry Johnston May 19 '17 at 22:43
  • Possible hardware isssue? Since you are only seeing it on this one USB drive. – Michael Timmerman May 20 '17 at 18:17

1 Answers1

-1

Try this:

Get-Volume -Drive 'E' | Get-Partition | Remove-PartitionAccessPath -AccessPath 'E:\'

Reference: https://blogs.technet.microsoft.com/heyscriptingguy/2015/12/07/powertip-use-powershell-to-remove-drive-letter/

Fabian Mendez
  • 512
  • 5
  • 15
  • I already tried this - you can see in my post where `Get-Partition` returns `$null`, i.e. there is no partition for the volume. – Drew McGowen May 24 '17 at 12:41