如何使用PowerShell替换部分映射的网络驱动器路径?

时间:2014-01-16 23:49:00

标签: powershell windows-server-2012-r2

在我工作的公司,我们最近更改了文件服务器,旧的称为“EXAMPLE-FS-001”,典型的驱动器映射为\ example-fs-001 \ staff_directory \ staffname

新服务器名为companyname.local,典型的驱动器映射为\ companyname.local \ shares \ staff_directory \ staffname。

我们正在使用Server 2012 R2。

为了帮助IT帮助台受到关于“我的网络驱动器无法正常工作”的故障的轰炸,我想创建一个将在用户计算机上运行并更改网络驱动器路径的脚本,但只需替换\ example-fs -001 \ to \ companyname.local \ shares \ part。

主驱动器已经更改,这将取代手动设置的映射网络驱动器。

我一直在尝试跟随例子,但那里并不存在很多例子。

示例1。

Set objNetwork = CreateObject("Wscript.Network")

Set colDrives = objNetwork.EnumNetworkDrives

For (i = 0 to colDrives.Count-1 Step 2){}
If  (colDrives.Item(i + 1) = "\\EXAMPLE-FS-001")
    {strDriveLetter = colDrives.Item(i)
     objNetwork.RemoveNetworkDrive strDriveLetter
     objNetwork.MapNetworkDrive strDriveLetter, "\\companyname.local\shares"}
End If
Next

示例2。

On Error Resume Next
strOldServer = "EXAMPLE-FS-001"
strNewServer = "companyname.local\shares"
Set objNetwork = CreateObject("Wscript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objNetwork.EnumNetworkDrives
For i = 0 to colDrives.Count-1 Step 2
strThisServer = Left(Mid(colDrives.Item(i + 1), 3), InStr(Mid(colDrives.Item(i + 1), 3), "\") - 1)
If LCase(strThisServer) = LCase(strOldServer) Then
strDriveLetter = colDrives.Item(i)
strNewPath = "\\" $strNewServer "\" $Mid(colDrives.Item(i + 1), $Len("\\" & strOldServer       & "\") + 1)
If objFSO.FolderExists(strNewPath) = True Then
objNetwork.RemoveNetworkDrive strDriveLetter
objNetwork.MapNetworkDrive strDriveLetter, strNewPath
End If
End If
Next

我是PowerShell的新手,但看到它的出色用途,我很想知道我是否正在使用其中任何一个代码。

谢谢,

阿尔干

1 个答案:

答案 0 :(得分:2)

我相信这会让你走上正轨。保持-whatif在那里,直到你确定脚本适合你。

 $OldServer = "\\EXAMPLE-FS-001\"
 $NewServer = "\\companyname.local\shares\"

 $drives = Get-WmiObject win32_logicaldisk | 
    ? {$_.ProviderName -like "$($OldServer)*" } | 
        % { 
            $Name = (($_.DeviceID) -replace ":", "")
            $NewRoot = (($_.ProviderName) -replace $OldServer, $NewServer)
            Get-PSDrive $Name | Remove-PSDrive -Force -whatif
            New-PSDrive $Name -PSProvider FileSystem -Root $NewRoot -WhatIf
        }