【问题标题】:Assign a mount point folder path to a drive using PowerShell使用 PowerShell 将装载点文件夹路径分配给驱动器
【发布时间】:2015-08-24 22:04:07
【问题描述】:

我有一台配置有多个磁盘的服务器。一个用于操作系统,一个用于程序等,其余的将挂载到空的 NTFS 文件夹。

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

这通过 GUI 相当简单:https://technet.microsoft.com/en-us/library/cc753321.aspx

但是,我需要自动化,所以我需要弄清楚如何使用 PowerShell 来做到这一点。 我遇到了几个死胡同:

我以为我在 Get-DiskInitialize-DiskNew-Partition 方面取得了一些进展

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

从这里开始,我希望做类似的事情:

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

但这不会产生任何输出,而且我注意到在我之前创建分区时,它也创建了一个卷。

我认为New-Volume 可能是错误的命令,因为帮助表明输入对象应该是 MSFT_StoragePool 对象。

我尝试使用以下命令沿着这条路走一小段路:Get-PhysicalDiskNew-StoragePoolGet-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

但此时我只收到一条关于无效参数的错误消息,我认为这很奇怪,因为我能够使用 Get-Member 来确认 $Pool 是一个 MSFT_StoragePool。

我还注意到,在创建该存储池后,我的磁盘从磁盘管理中消失了,并且不再出现在 Get-Disk 中

我认为这表明存储池与我真正想做的完全不同。

如何使用 Powershell 将驱动器分配给 NTFS 文件夹?

【问题讨论】:

    标签: powershell windows-server-2012 windows-server-2012-r2 disk-partitioning


    【解决方案1】:

    我需要的 Commandlet 是 Add-PartitionAccessPath

    我通过磁盘 2 上的 GUI 按照我想要的方式进行设置,在磁盘 3 上创建了一个分区,然后仔细比较了属性。 关键在这里:

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

    Disk2 有一个额外的 AccessPath,这导致我翻阅了许多 MSDN 文章寻找方法,直到我最终发现已经有一个命令。

    以下命令达成交易:

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

    作为参考,这里是完整的解决方案:

    $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"
    

    【讨论】:

      【解决方案2】:

      如何在 Powershell 中使用 Command Line 将驱动器分配给 NTFS 文件夹:

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

      注意:资源管理器显示的文件夹大小与 C: 相同。

      【讨论】:

      • 我不认为这会达到我想要的效果,但我会试一试,看看结果是否与我通过 GUI 获得的结果相同。我初始化了一个磁盘并将其分配给 J:,然后我尝试了命令:subst J: G:\Folder01 并得到 Invalid parameter - J: I'm running sfc /scannow 以查看是否可以解决该问题。
      • 好的,我知道为什么这对我不起作用。 Subst 允许我获取当前未分配的驱动器号并将其用作到另一条路径的快捷方式。这很酷,但不是我在这里真正想要做的。我想取一个“驱动器”,我指的是物理或虚拟磁盘,并将其挂载到一个文件夹中,这样当我将文件放入该文件夹时,它们就会存储在该磁盘上。
      【解决方案3】:

      如果您正在考虑将文件放入某个文件夹,并希望它们最终存储在某个磁盘上,那么可以使用 MOUNTVOL

      查找驱动器/卷名:

      MOUNTVOL
      

      删除驱动器号并安装在一个空的 NTFS 文件夹上:

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

      所以在上面的例子中,每次写入 c:\fakedisk\ 文件夹时,数据最终都会保存在原来的 e: 驱动器(磁盘/设备)中。这与subst 相反,后者“将路径与驱动器号相关联 ",因此将数据写入驱动器将存储在该路径/文件夹中。

      在 Win 10 上测试 命令行

      【讨论】:

      • 这可能在运行中很有用,但我试图解决的问题的一个关键部分是自动化/脚本化任务。要将此命令链接到脚本的其余部分,您需要提供 guid。我认为您可以在原始示例中使用$Partition.guid 获得它,但我尚未对其进行测试。我认为 Add-PartitionAccessPath 更直接,但有多种解决问题的方法总是有帮助的。
      • 要查找驱动器/卷名 (GUID):键入 MOUNTVOL。它将列出“VolumeName 的值以及当前安装点”。然后选择与驱动器或文件夹路径的挂载点关联的 GUID。
      • 当然,但同样,这里的任务是自动化该过程。 PowerShell 被列为问题中的一项要求,但如果需要,当然可以合并非 PowerShell 命令。如果要使用MOUNTVOL,那么下一步就是解析输出,老实说,这似乎是一项具有挑战性的任务。如果我要手动完成所有操作,我还不如只使用 GUI。
      • 您的意思是自动选择所选驱动器的 GUID?
      【解决方案4】:

      在运行此命令之前确保文件夹存在:

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

      【讨论】:

      • 您可能应该将其作为评论添加到我上面的解决方案中,而不是作为单独的答案。我已修改我的解决方案以包含创建文件夹的步骤。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 2018-02-11
      相关资源
      最近更新 更多