Как вы можете заменить несколько путей UNC подключенных дисков через реестр с помощью PowerShell?

Наша команда по серверам внедрила DFS, но пользователи в компании по-прежнему сопоставляют диски, используя имена серверов на разных сайтах. Я хотел бы выпустить сценарий PS, который обновляет значение реестра SINGLE (для каждого диска).

Моя цель - просмотреть каждый буквенный ключ диска, если ключ существует, а удаленный путь начинается с имени сервера, то замените его на имя 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" }}}

EDIT ^^^В настоящее время это работает, но только если имя сервера в RemotePath написано строчными буквами. т.е. переменные сервера чувствительны к регистру. Есть мысли о том, как определить переменные $OldServer и $NewServer, чтобы они работали с вариантами регистра???? например. Denvernas01, DENVERNAS01 (или что-то среднее между ними)

Я наткнулся на несколько тем, в которых обсуждались New-PSDrive, Get-WMIObject и т. д., но мне бы очень хотелось просто заменить это значение реестра. Это был бы хороший патч, который снял бы нагрузку с нашей команды поддержки настольных компьютеров. Поверьте мне, я буду выступать за то, чтобы GPO вытесняла обычные подключаемые диски, как только все это закончится.

Любая обратная связь очень ценится. Благодарю вас!


person aceventura    schedule 01.03.2021    source источник
comment
Кажется, групповая политика была бы лучшим инструментом для работы. Вы можете настроить объект групповой политики для удаления всех сопоставлений дисков (чтобы удалить даже сопоставленные вручную), а затем объекты групповой политики для сопоставления новых дисков по мере необходимости. То, как вы пытаетесь подойти к этому, потребует от вас проверки каждого пользовательского куста hku\ntuser.dat, включая монтирование тех, кто не вошел в систему, и размонтирование, когда вы закончите.   -  person Doug Maurer    schedule 02.03.2021
comment
@DougMaurer Спасибо за ваш вклад. Мы собираемся внедрить политики GPO для сопоставления общих дисков отделов, но многие пользователи вручную сопоставляют случайные каталоги на этих дисках. Например, у многих есть макросы, ссылающиеся на эти местоположения, поэтому эту работу необходимо будет выполнить либо в нашей службе поддержки, либо автоматически. Наш инструмент управления конечными точками может легко вызвать куст основного пользователя, чтобы внести изменения и запуститься в нужное время, независимо от того, подключен ли пользователь к домену или удаленно.   -  person aceventura    schedule 02.03.2021


Ответы (1)


Если кому-то интересно, это то, что у меня получилось, и это сработало как шарм. Думал поделиться...

$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
person aceventura    schedule 02.04.2021