将共享映射到powershell中未分配的驱动器号
问题描述:
我使用PowerShell来映射我的网络驱动器,如下所示。将共享映射到powershell中未分配的驱动器号
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "$Folder","FALSE","Domain\UserName", "Password")
但是,我在这里发送盘符为r:
。如果r:
驱动器已被使用,则会失败。
有没有办法将驱动器映射到未分配的驱动器号。 (例如,如果已经分配了R:
,但S:
不是,那么它应该自动映射到S:驱动器)
答
首先,您需要获取下一个可用的驱动器号。这里有一个例子是如何从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")
答
我喜欢这种方式,有以下原因:
它并不需要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
}
}
接受的答案不需要WMI。但是它需要'WScript.Network',因为**在写入时**(PoSH v2 - 检查日期),'New-PSDrive'对'-credential'的支持被破坏,没有其他方式为映射驱动器提供备用凭据。 – alroc 2014-05-14 12:56:24