2012-01-10 3 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から:

それはDの文字のためのASCIIコードを列挙することによって開始さ

: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

関連する問題