用vbs找到映射到共享的所有驅(qū)動(dòng)器并重新映射它們
問:
您好,腳本專家!如何找到映射到 \\server1\share 的所有啟動(dòng)器,并將它們重新映射到 \\server2\share?
-- H T-S
答:
你好,H T-S。您知道,不久前 Malcolm Gladwell 出版了一本書,書名為《The Tipping Point》。簡單來說,該書做出了一種假設(shè):某一事物可能在很長一段時(shí)間內(nèi)被忽略,但是當(dāng)這種忽略至少達(dá)到所謂的引爆點(diǎn)時(shí),這個(gè)原來無人問津的事物就會(huì)忽然變成一種名副其實(shí)的時(shí)尚。就好像一夜之間它就從一件您從未聽說的事物變得似乎隨處可見。
這是個(gè)有趣的假設(shè),我們似乎在用于映射和取消映射網(wǎng)絡(luò)驅(qū)動(dòng)器的腳本上看到了這種現(xiàn)象。我們發(fā)布“您好,腳本專家!”專欄已經(jīng)一年多了,而從未提及網(wǎng)絡(luò)驅(qū)動(dòng)器,并且似乎沒有人注意這個(gè)問題。然后,突然之間,關(guān)于映射和取消映射網(wǎng)絡(luò)驅(qū)動(dòng)器的問題紛至沓來。我們在幾周前回答了第一個(gè)這種問題,現(xiàn)在又來回答另一個(gè)問題,我們有一個(gè)收件箱全都是其他關(guān)于網(wǎng)絡(luò)驅(qū)動(dòng)器的問題。先是呼啦圈,然后是喇叭褲,現(xiàn)在輪到網(wǎng)絡(luò)驅(qū)動(dòng)器了。自己去想吧。
那么重新映射網(wǎng)絡(luò)驅(qū)動(dòng)器如何呢?嗯,不論是好是壞,并沒有可以自動(dòng)重新映射網(wǎng)絡(luò)驅(qū)動(dòng)器的方法;因此,我們不得不退而求其次找出其他解決方法。但這并不是太槽糕:我們可以找到符合條件的所有驅(qū)動(dòng)器,取消映射這些驅(qū)動(dòng)器,然后將每個(gè)驅(qū)動(dòng)器重新映射到新的位置。
當(dāng)然,這聽起來挺復(fù)雜,但實(shí)際上很簡單。以下腳本可用來查找映射到 \\server1\share 的所有驅(qū)動(dòng)器,并將這些驅(qū)動(dòng)器重新映射到 \\server2\share:
Set objNetwork = CreateObject("Wscript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
For i = 0 to colDrives.Count-1 Step 2
If colDrives.Item(i + 1) = "\\server1\share" Then
strDriveLetter = colDrives.Item(i)
objNetwork.RemoveNetworkDrive strDriveLetter
objNetwork.MapNetworkDrive strDriveLetter, "\\server2\share"
End If
Next
該腳本將首先創(chuàng)建 Wscript.Network 對象實(shí)例。我們應(yīng)當(dāng)注意到了,無論何時(shí)當(dāng)我們要映射或取消映射網(wǎng)絡(luò)驅(qū)動(dòng)器時(shí),都需要使用 Windows Script Host,這是因?yàn)?nbsp;WMI 沒有任何映射或取消映射驅(qū)動(dòng)器的方法。沒關(guān)系,這只不過意味著我們的腳本必須在本地計(jì)算機(jī)上運(yùn)行。通常情況下都不能針對遠(yuǎn)程計(jì)算機(jī)來使用 WSH 方法。這是一個(gè)您不得不面臨的限制。(有一個(gè)方法可解決此問題:將該腳本作為登錄腳本運(yùn)行。登錄腳本將始終在本地運(yùn)行。)
創(chuàng)建 Network 對象之后,調(diào)用 EnumNetworkDrives 方法,以便返回計(jì)算機(jī)上的所有已映射網(wǎng)絡(luò)驅(qū)動(dòng)器的集合:
Set colDrives = objNetwork.EnumNetworkDrives
這將使我們親眼見到那個(gè)被稱為已映射網(wǎng)絡(luò)驅(qū)動(dòng)器集合的奇特的小東西。今天我們就不詳細(xì)介紹此集合的體系結(jié)構(gòu)了,請參閱關(guān)于網(wǎng)絡(luò)驅(qū)動(dòng)器的上一個(gè)專欄。只需說明每個(gè)已映射的驅(qū)動(dòng)器實(shí)際占用此集合中的兩項(xiàng):第一項(xiàng)為驅(qū)動(dòng)器號(hào),第二項(xiàng)為 UNC 路徑。如果計(jì)算機(jī)上有三個(gè)已映射的驅(qū)動(dòng)器,則集合內(nèi)容將如下所示:
X:
\\server1\share1
Y:
\\server2\share2
Z:
\\server3\share3
這就是我們必須使用看起來這么奇怪的 For Next 循環(huán)來遍歷集合的原因,此代碼行使我們在集合中每隔一項(xiàng)就跳過一項(xiàng),進(jìn)而確保我們僅查看各個(gè)驅(qū)動(dòng)器號(hào)項(xiàng):
For i = 0 to colDrives.Count-1 Step 2
然后,對于每個(gè)驅(qū)動(dòng)器號(hào),我們需要確定相應(yīng)的 UNC 路徑是否為 \\server1\share1。請記住,如果查看集合中的 0 項(xiàng)(集合中的第一項(xiàng)的索引號(hào)為 0),則看到的是驅(qū)動(dòng)器號(hào),相應(yīng)的 UNC 路徑將為該索引號(hào) (0) 加 1。因此,我們用如下代碼來確定第一個(gè)驅(qū)動(dòng)器是否正好被映射到 \\server1\share1:
If colDrives.Item(i + 1) = "\\server1\share" Then
讓我們假定就是這樣。在這種情況下,我們需要獲取驅(qū)動(dòng)器號(hào)(0 項(xiàng)),并將該值存儲(chǔ)在名為 strDriveLetter 的變量中。然后,調(diào)用 RemoveNetworkDrive 方法來取消映射該驅(qū)動(dòng)器,再調(diào)用 MapNetworkDrive 方法將同一驅(qū)動(dòng)器號(hào)重新映射到新的共享:
objNetwork.MapNetworkDrive strDriveLetter, "\\server2\share"
不,這并不是所謂的“引爆點(diǎn)”,因?yàn)槟鷦倓偼品嗽噲D遵循這一切的想法。我們知道是有點(diǎn)混亂,但這是由于已映射網(wǎng)絡(luò)驅(qū)動(dòng)器集合的特殊構(gòu)造方式而造成的。如果這對于您沒有任何意義,盡管忽略它好了,您應(yīng)當(dāng)看到事情整體上是有邏輯性的。也許,是有點(diǎn)混亂的邏輯,但仍然是邏輯。
因?yàn)檫@一點(diǎn)比較費(fèi)解,所以我們舉了一個(gè)最簡單的例子:將名為 \\server1\share 的共享重新映射到名為 \\server2\share 的共享。當(dāng)然還可以將 server1 上的任何共享重新映射到 server2 上任何名稱相似的共享。但是這對于今天來說可能有點(diǎn)過多了。但是,如果您感興趣,只需要讓我們知道,我們會(huì)在不久以后重新關(guān)注此主題。
上一篇:VBS ArrayList Class vbs中的數(shù)組類
欄 目:vb
下一篇:可以從一臺(tái)遠(yuǎn)程服務(wù)器運(yùn)行 SP2 安裝程序Install.vbs
本文標(biāo)題:用vbs找到映射到共享的所有驅(qū)動(dòng)器并重新映射它們
本文地址:http://mengdiqiu.com.cn/a1/vb/7871.html
您可能感興趣的文章
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10VBS中的正則表達(dá)式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語法速查及實(shí)例說明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?
- 01-10VBScript教程 第二課在HTML頁面中添加VBscript代碼


閱讀排行
本欄相關(guān)
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10飄葉千夫指源代碼,又稱qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個(gè)高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語法速查及實(shí)例說明
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery