麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > VBScript > 正文

用vbs找到映射到共享的所有驅動器并重新映射它們

2020-07-26 12:01:39
字體:
來源:轉載
供稿:網友
問:
您好,腳本專家!如何找到映射到 //server1/share 的所有啟動器,并將它們重新映射到 //server2/share?

-- H T-S

答:
你好,H T-S。您知道,不久前 Malcolm Gladwell 出版了一本書,書名為《The Tipping Point》。簡單來說,該書做出了一種假設:某一事物可能在很長一段時間內被忽略,但是當這種忽略至少達到所謂的引爆點時,這個原來無人問津的事物就會忽然變成一種名副其實的時尚。就好像一夜之間它就從一件您從未聽說的事物變得似乎隨處可見。

這是個有趣的假設,我們似乎在用于映射和取消映射網絡驅動器的腳本上看到了這種現象。我們發布“您好,腳本專家!”專欄已經一年多了,而從未提及網絡驅動器,并且似乎沒有人注意這個問題。然后,突然之間,關于映射和取消映射網絡驅動器的問題紛至沓來。我們在幾周前回答了第一個這種問題,現在又來回答另一個問題,我們有一個收件箱全都是其他關于網絡驅動器的問題。先是呼啦圈,然后是喇叭褲,現在輪到網絡驅動器了。自己去想吧。

那么重新映射網絡驅動器如何呢?嗯,不論是好是壞,并沒有可以自動重新映射網絡驅動器的方法;因此,我們不得不退而求其次找出其他解決方法。但這并不是太槽糕:我們可以找到符合條件的所有驅動器,取消映射這些驅動器,然后將每個驅動器重新映射到新的位置。 

當然,這聽起來挺復雜,但實際上很簡單。以下腳本可用來查找映射到 //server1/share 的所有驅動器,并將這些驅動器重新映射到 //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) = "http://server1/share" Then
        strDriveLetter = colDrives.Item(i)
        objNetwork.RemoveNetworkDrive strDriveLetter
        objNetwork.MapNetworkDrive strDriveLetter, "http://server2/share"
    End If
Next

該腳本將首先創建 Wscript.Network 對象實例。我們應當注意到了,無論何時當我們要映射或取消映射網絡驅動器時,都需要使用 Windows Script Host,這是因為 WMI 沒有任何映射或取消映射驅動器的方法。沒關系,這只不過意味著我們的腳本必須在本地計算機上運行。通常情況下都不能針對遠程計算機來使用 WSH 方法。這是一個您不得不面臨的限制。(有一個方法可解決此問題:將該腳本作為登錄腳本運行。登錄腳本將始終在本地運行。)

創建 Network 對象之后,調用 EnumNetworkDrives 方法,以便返回計算機上的所有已映射網絡驅動器的集合:

Set colDrives = objNetwork.EnumNetworkDrives

這將使我們親眼見到那個被稱為已映射網絡驅動器集合的奇特的小東西。今天我們就不詳細介紹此集合的體系結構了,請參閱關于網絡驅動器的上一個專欄。只需說明每個已映射的驅動器實際占用此集合中的兩項:第一項為驅動器號,第二項為 UNC 路徑。如果計算機上有三個已映射的驅動器,則集合內容將如下所示:

X:
//server1/share1
Y:
//server2/share2
Z:
//server3/share3

這就是我們必須使用看起來這么奇怪的 For Next 循環來遍歷集合的原因,此代碼行使我們在集合中每隔一項就跳過一項,進而確保我們僅查看各個驅動器號項:

For i = 0 to colDrives.Count-1 Step 2

然后,對于每個驅動器號,我們需要確定相應的 UNC 路徑是否為 //server1/share1。請記住,如果查看集合中的 0 項(集合中的第一項的索引號為 0),則看到的是驅動器號,相應的 UNC 路徑將為該索引號 (0) 加 1。因此,我們用如下代碼來確定第一個驅動器是否正好被映射到 //server1/share1:

If colDrives.Item(i + 1) = "http://server1/share" Then

讓我們假定就是這樣。在這種情況下,我們需要獲取驅動器號(0 項),并將該值存儲在名為 strDriveLetter 的變量中。然后,調用 RemoveNetworkDrive 方法來取消映射該驅動器,再調用 MapNetworkDrive 方法將同一驅動器號重新映射到新的共享:

objNetwork.MapNetworkDrive strDriveLetter, "http://server2/share"

不,這并不是所謂的“引爆點”,因為您剛剛推翻了試圖遵循這一切的想法。我們知道是有點混亂,但這是由于已映射網絡驅動器集合的特殊構造方式而造成的。如果這對于您沒有任何意義,盡管忽略它好了,您應當看到事情整體上是有邏輯性的。也許,是有點混亂的邏輯,但仍然是邏輯。

因為這一點比較費解,所以我們舉了一個最簡單的例子:將名為 //server1/share 的共享重新映射到名為 //server2/share 的共享。當然還可以將 server1 上的任何共享重新映射到 server2 上任何名稱相似的共享。但是這對于今天來說可能有點過多了。但是,如果您感興趣,只需要讓我們知道,我們會在不久以后重新關注此主題。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人免费看视频 | 精品亚洲在线 | 国产精品无码久久久久 | 日本xxxx视频| 羞羞视频免费网站含羞草 | www.54271.com| 久久久久久久久久91 | 91短视频网址 | 久草在线小说 | 日韩黄色av | 黄色免费小视频网站 | 色屁屁xxxxⅹ免费视频 | 爱爱插插视频 | 九九色精品| 性盈盈盈影院 | 国产成人精品午夜视频' | 中文有码一区二区 | 一级做a爱视频 | 自拍偷拍999 | 亚洲视频成人 | 国产一级中文字幕 | 久久国产精品区 | 黄色大片大毛片 | 中文字幕在线观看视频一区 | 欧美一级做一a做片性视频 日韩黄色片免费看 | 男女无套免费视频 | 亚洲精品久久久久久 | 亚洲天堂在线电影 | 蜜桃视频网站在线观看 | 91精品国产综合久久久欧美 | 国产自91精品一区二区 | 免费视频a| 91www成人久久 | 精品av在线播放 | 失禁高潮抽搐喷水h | 久久久日韩av免费观看下载 | chengrenyingshi | 91精品欧美一区二区三区 | 午夜精品久久久久久久99热浪潮 | 国产激情视频在线 | 黄色一级片在线免费观看 |