我使用PowerShell映射我的网络驱动器,如下所示。
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "$Folder","FALSE","Domain\UserName", "Password")
但是我在这里发送驱动器号为r:
。如果已使用r:
驱动器,则会失败。
有没有办法将驱动器映射到未分配的驱动器号。 (例如,如果R:
已经分配但S:
不是,那么它应该自动映射到S:驱动器)
答案 0 :(得分:5)
首先,您需要获取下一个可用的驱动器号。以下是Archive of 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:
首先枚举字母D:到Z:的ASCII代码。该 然后,管道将这些ASCII代码转换为驱动器号。下一个, 查看管道如何使用驱动器的排除列表 不想用于映射(可选)。在此示例中,驱动器号 h:,k:和z:从未使用过。最后,管道使用.NET DriveInfo对象检查驱动器是否正在使用。
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive((Get-NextFreeDrive)[0], "$Folder","FALSE","Domain\UserName", "Password")
答案 1 :(得分:1)
我喜欢这种方式,原因如下:
它不需要WMI,只需要常规的PowerShell cmdlet 它非常清晰易读 它可以轻松地排除特定的驱动器 它可以让您轻松地按照您想要的任何顺序订购驱动器 它找到第一个未使用的驱动器并映射它,然后它就完成了。
$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
}
}