Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assign a mount point folder path to a drive using PowerShell

I have a server that is provisioned with several disks. One for an OS, one for programs etc., and the remaining are to be mounted to empty NTFS folders.

Disk 0: C:
Disk 1: G:
Disk 2: G:\Folder01\
Disk 3: G:\Folder02\

This is fairly straightforward through the GUI: https://technet.microsoft.com/en-us/library/cc753321.aspx

But, I need to automate so I need to figure out how to do this with PowerShell. I have hit several dead ends:

I thought I was making some progress with Get-Disk, Initialize-Disk, and New-Partition

$Disk = Get-Disk 2
$Disk | Initialize-Disk -PartitionStyle MBR
$Disk | New-Partition -UseMaximumSize -MbrType IFS
$Partition = Get-Partition -DiskNumber $Disk.Number

From here, I was hoping to do something like:

New-Volume $Partition -FriendlyName Folder01 -AccessPath F:\Folder01 -FileSystem NTFS

But that doesn't produce any output and I noticed that earlier when I created a partition, it created a volume as well.

I'm thinking that New-Volume might be the wrong command because the help indicates that the input object should be a MSFT_StoragePool object.

I tried to go down that path a little ways with commands like: Get-PhysicalDisk, New-StoragePool, Get-StoragePool

$Disk = Get-PhysicalDisk -FriendlyName PhysicalDisk2
New-StoragePool -FriendlyName Pool2 -StorageSubsystemFriendlyName "Storage Spaces*" -PhysicalDisks $Disk
$Pool = Get-StoragePool Pool2
New-Volume -FriendlyName Folder01 -AccessPath G:\Folder01 -FileSystem NTFS -InputObject $Pool

But I just get an error message at this point for invalid parameters, which I think is weird because I was able to use Get-Member to confirm that $Pool is a MSFT_StoragePool.

I've also noticed that after creating that storage pool, my disk disappeared from Disk Management and no longer shows up with Get-Disk

I think that shows that Storage Pools are something completely different from what I want to actually do.

How do I assign a drive to an NTFS Folder with Powershell?

like image 339
William Nelson Avatar asked Aug 24 '15 22:08

William Nelson


Video Answer


3 Answers

The Commandlet that I needed was Add-PartitionAccessPath

I set things up the way I wanted through the GUI on disk 2, created a partion on Disk 3 and then carefully compared the properties. The key was here:

(Get-Partition -DiskNumber 2).AccessPaths
(Get-Partition -DiskNumber 3).AccessPaths

There was an additional AccessPath for Disk2, which led me across a number of MSDN articles looking for a method, until I finally found that there already is a command for it.

The following command sealed the deal:

$Partition | Add-PartitionAccessPath -AccessPath "G:\Folder01"

For reference, here's the full solution:

$Disk = Get-Disk 3
# $Disk | Clear-Disk -RemoveData -Confirm:$false
$Disk | Initialize-Disk -PartitionStyle MBR
$disk | New-Partition -UseMaximumSize -MbrType IFS
$Partition = Get-Partition -DiskNumber $Disk.Number
$Partition | Format-Volume -FileSystem NTFS -Confirm:$false
New-Item -ItemType Directory -Path "G:\Folder01"
$Partition | Add-PartitionAccessPath -AccessPath "G:\Folder01"
like image 156
William Nelson Avatar answered Nov 09 '22 07:11

William Nelson


How to assign a drive to a NTFS Folder in Powershell using Command Line:

cmd /c 'subst G: "C:\Folder1"'

Note: Explorer is showing the same size of the folder as the C:.

like image 42
lloyd Avatar answered Nov 09 '22 07:11

lloyd


If you're looking at putting files into some folder, and expect them to end up being stored on some disk then there's MOUNTVOL.

To find drive/volume name:

MOUNTVOL

TO remove the drive letter & instead mount on an empty NTFS folder:

mountvol e: /d
mountvol c:\<path> <volume name> 
eg. mountvol c:\fakedisk\ \\?\Volume{########-####-####-####-############}\

So in above example, everytime to write to c:\fakedisk\ folder, the data will end up in what used to be e: drive (disk/device). This is opposite to subst, which "Associates a path with a drive letter ", so writing data to the drive will get stored in that path/folder.

Tested on Win 10 CMD

like image 22
Zimba Avatar answered Nov 09 '22 07:11

Zimba