如何使用 PowerShell 通过注册表替换映射驱动器的多个 UNC 路径?

问题描述

我们的服务器团队实施了 DFS,但公司内的用户仍然使用不同站点的服务器名称映射驱动器。我想推出一个更新 SINGLE 注册表值(每个驱动器)的 PS 脚本。

我的目标是查看每个驱动器号键,如果键存在并且远程路径以服务器名称开头,然后将其替换为 DFS 名称 \\domain.com\SITE\+路径的其余部分。这样用户就可以保持相同的驱动器号而不必“重新映射”他们的驱动器

以丹佛办公室为例...

$OldServer = "\\denvernas01\"
$NewServer = "\\domain.com\DEN\"

$DriveLetterArray = "A","B","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
    foreach ($DriveLetter in $DriveLetterArray)
        { $Drives = Get-ItemPropertyValue HKCU:\Network\$DriveLetter -Name RemotePath -ErrorAction SilentlyContinue 
          $RemainingPath = $Drives.Replace($OldServer,"")
    foreach ($Drive in $Drives)
        { if ($Drive -like "*$OldServer*")
        { Set-ItemProperty HKCU:\Network\$DriveLetter -Name RemotePath -Value "$NewServer"+"$RemainingPath" }}}

编辑 ^^^目前有效,但前提是 RemotePath 中的服务器名称全部为小写。 IE。服务器变量区分大小写。 关于如何定义 $OldServer 和 $NewServer 变量的任何想法,以便它适用于大小写变化???? 例如Denvernas01、DENVERNAS01(或任何介于两者之间)

我遇到了一些讨论 New-PSDrive、Get-WMIObject 等的话题,但我真的很想只替换这个注册表值。这将是一个很好的“补丁”,可以减轻我们桌面支持团队的压力。相信我 - 一旦这一切结束,我将提倡 GPO 推出常见的映射驱动器。

非常感谢任何反馈。谢谢!

解决方法

如果有人对此感兴趣,这就是我最终得到的结果,而且效果很好。以为我会分享...

$OldServer = '\\denvernas01'
$NewServer = '\\Domain.com\DEN'

$DriveLetterArray = "A","B","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
foreach ($DriveLetter in $DriveLetterArray){
    $DrivePath = $null; $ConvertedPath = $null
    $DrivePath = Get-ItemPropertyValue -Path "HKCU:\Network\$DriveLetter" -Name "RemotePath" -ErrorAction SilentlyContinue
    if ($DrivePath -eq $null) {continue}
    #Replace Old Drive Path
    if ($DrivePath -like "*${OldServer}*") {
        $ConvertedPath = $DrivePath -ireplace [regex]::Escape("$Oldserver"),$NewServer
        $ConvertedPath
        Set-ItemProperty -Path "HKCU:\Network\$DriveLetter" -Name "RemotePath" -Value "${ConvertedPath}"
    } else { 
    #Write-Host "no match"
    continue
    }
    #Write-Host ""
}
#Remove previous mountpoints 
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\* | Where-Object Name -Match "##denvernas" | Remove-Item

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...