2012-01-10 110 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

相關問題