2012-01-10 108 views
2

我使用PowerShell来映射我的网络驱动器,如下所示。将共享映射到powershell中未分配的驱动器号

$net = new-object -ComObject WScript.Network 
$net.MapNetworkDrive("r:", "$Folder","FALSE","Domain\UserName", "Password") 

但是,我在这里发送盘符为r:。如果r:驱动器已被使用,则会失败。

有没有办法将驱动器映射到未分配的驱动器号。 (例如,如果已经分配了R:,但S:不是,那么它应该自动映射到S:驱动器)

回答

4

首先,您需要获取下一个可用的驱动器号。这里有一个例子是如何从PowerShell.com

function Get-NextFreeDrive { 
    68..90 | ForEach-Object { "$([char]$_):" } | 
    Where-Object { 'h:', 'k:', 'z:' -notcontains $_ } | 
    Where-Object { 
    (new-object System.IO.DriveInfo $_).DriveType -eq 'noRootdirectory' 
    } 
} 

从PowerShell.com:

它首先通过列举ASCII码为字母d:到Z :.然后管道将把这些ASCII码转换成驱动器号。接下来, 检查管道如何使用排除列表与 不想用于映射的驱动器(可选)。在此示例中,驱动器号 h:,k:和z:从不使用。最后,管道使用一个.NET DriveInfo对象来检查驱动器是否正在使用。

$net = new-object -ComObject WScript.Network 
$net.MapNetworkDrive((Get-NextFreeDrive)[0], "$Folder","FALSE","Domain\UserName", "Password") 
1

我喜欢这种方式,有以下原因:

它并不需要WMI,只需定期PowerShell命令 这是非常清楚的,易于阅读 它很容易让你排除特定的履历表 它可以轻松地让您按任何您想要的顺序订购履历表 它找到第一个未使用的驱动函并将其映射,然后完成。

$share="\\Server\Share" 
$drvlist=(Get-PSDrive -PSProvider filesystem).Name 
Foreach ($drvletter in "DEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()) { 
    If ($drvlist -notcontains $drvletter) { 
     $drv=New-PSDrive -PSProvider filesystem -Name $drvletter -Root $share 
     break 
    } 
} 
+0

接受的答案不需要WMI。但是它需要'WScript.Network',因为**在写入时**(PoSH v2 - 检查日期),'New-PSDrive'对'-credential'的支持被破坏,没有其他方式为映射驱动器提供备用凭据。 – alroc 2014-05-14 12:56:24

相关问题