问题描述
我们的服务器团队实施了 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