我有数百个用户,每个用户都已将驱动器手动映射到文件服务器上的各种位置/文件夹。

我正在将数据迁移到具有新名称的新服务器,但保持相同的文件夹结构,因此需要编写驱动器重新映射的脚本,如果它们遵循统一的映射模式,则可以使用简单的脚本来完成此操作,但是正如我所说的那样都是唯一的手动映射。

因此,我需要询问其当前映射,并将服务器名称从\ server1.ourdomain \ whatever路径更改为\ server2.ourdomain \ whatever路径等,因为该结构相当合理,我说这些路径将主要指向各种文件夹和级别深刻而复杂。

我打算使用VB脚本并将其作为GPO在用户站点上运行。

最佳答案

尝试这样的事情:

oldserver = "\\server1.ourdomain"
newserver = "\\server2.ourdomain"

Set net = CreateObject("WScript.Network")
Set drives = net.EnumNetworkDrives

For i = drives.Count - 1 To 0 Step -2
  If LCase(Left(drives(i), Len(oldserver))) = oldserver Then
    net.RemoveNetworkDrive drives(i-1), True, True
    net.MapNetworkDrive drives(i-1), Replace(drives(i), oldserver, newserver), True
  End If
Next

编辑:由于您的所有示例都附加了.ourdomain,因此我假设您一直在使用FQDN。如果还使用NetBIOS名称,则上面的脚本当然对它们不起作用。但是,您不能仅将oldserver缩短为\\server1,因为这样的指令
Replace(drives(i), oldserver, newserver)

会将UNC路径\\server1.ourdomain\share更改为\\server2.ourdomain.ourdomain\share,这显然不起作用。从oldservernewserver中都删除域部分,或者(如果要实施FQDN)使用类似以下内容的方法:
domain    = ".ourdomain"
oldserver = "\\server1"
newserver = "\\server2" & domain

Set net = CreateObject("WScript.Network")
Set drives = net.EnumNetworkDrives

For i = drives.Count - 1 To 0 Step -2
  net.RemoveNetworkDrive drives(i-1), True, True
  If InStr(1, drives(i), domain, vbTextCompare) > 0 Then
    newpath = Replace(drives(i), oldserver & domain, newserver)
  Else
    newpath = Replace(drives(i), oldserver, newserver)
  End If
  net.MapNetworkDrive drives(i-1), newpath, True
Next

08-07 20:02