2013-07-09 244 views
1

我想要一個PowerShell /批處理腳本映射驅動器上的免費信。或者測試信件然後映射到一個免費的。Powershell /批量網絡映射驅動器

我確定有比這更容易的東西。

$tab = @() 

$tab = @('A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:', 'I:', 'J:', 'K:', 'L:', 'M:', 'N:', 'O,:', 'P:', 'Q:', 'R:', 'S:', 'T:', 'U:', 'V:', 'W' ,'X:', 'Y:', 'Z') 

for($i = 0;$i -lt 26;$i++){ 

    if(net use $tab[$i] > $null){ 
     Write-Host $tab[$i] "`tExists" 
    } 
    else{ 
     Write-Host $tab[$i] "`tDoesn't exist" 
    } 
} 

我需要我的PS腳本在.bat腳本中寫東西。因此,1)在我的PS腳本找到免費的信件,然後把它寫入這樣

$freeletter | Output-File -Append ....

或2)我的.bat腳本做類似的東西中的.bat腳本:

Is G: free ? 
    No Is H: free ? 
     Yes : Map It -> $mapdrive_1 = "H:" 
       Is I: free ? 
        No Is J: Free ? 
           Yes : Map it -> $mapdrive_2 = "J:" 

#Once it's done I got my ONLY 2 mapped drives 
$mapdrive_1 
$mapdrive_2 

#then i can do 
net use $mapdrive_1 "my\path1" 
net use $mapdrive_2 "my\path1" 
start robocopy $mapdrive_1 $mapdrive_2 /options 
net use $mapdrive_1 /DELETE 
net use $mapdrive_2 /DELETE 

net use $mapdrive_1 "my\path2" 
net use $mapdrive_2 "my\path2" 
start robocopy $mapdrive_1 $mapdrive_2 /options 
net use $mapdrive_1 /DELETE 
net use $mapdrive_2 /DELETE 

希望你明白我的意思:)

Regards,

Nico。

+0

使用cmd.exe,您可以使用net use'\\ servername \ share'這將使用第一個空白字母爲您映射網絡驅動器。之後Popd將刪除它。 –

回答

4

這將輸出全部免費字母,然後你可以管到選擇對象得到公正的第一個:

ls function:[a-z]: -name | where {-not (get-psdrive $_[0] -ea 0)} 
+0

這真是令人難以置信:D真是令人印象深刻! 我剛剛找到另一種解決方案,但比您的'Get-PSDrive | ?{$ _。Root -eq $ drive +「:\」}'和'If($ list.Root -ne $ drive +「:\」)'我的壞,我必須批量執行,因爲批處理腳本將作爲最後一個執行。 一個同事告訴我,net use * \ my \ path1/PERSISTENT:NO'會映射一個沒有字母的驅動器,我可以用'net use * \ my \ path1/DELETE'來刪除它 Can你確認這一點? :) 謝謝@ShayLevy你的聰明答案 Nico。 – Nico

+0

就*而言,將爲您選擇一封信件,但它不一定是第一個可用.. –

+0

是的,如果我只是刪除*它將掛載一個臨時驅動器,沒有任何字母。謝謝你@ShayLevy – Nico

0
$Mapdrive = "\\DRIVE NAME\My\Path\" 

使用驅動器的別名爲我所用有關使驅動器盤符無關其中如果由於某種原因或其他驅動器盤符改變而特別方便。

相關問題