Элементы реестра удаляются с помощью скрипта

Всем доброе утро,

У меня есть интересная проблема с приведенным ниже кодом, но сначала немного предыстории.

Onedrive не любит работать с перемещаемыми профилями домена. Когда OneDrive устанавливается для пользователя, он устанавливает OneDrive в папку «Appdata \ local» компьютера, а не на весь компьютер. Это означает, что он будет использовать эту установленную версию для этого конкретного ПК, пока он не будет обновлен до более новой версии. Если пользователь переходит на hotdesk с другого компьютера, на котором его версия Onedrive старше или новее, Onedrive не сможет работать для него на этом компьютере, поскольку он извлекает информацию об учетной записи из перемещаемого профиля в реестре. Реестр сравнивает версию в перемещаемом профиле с версией, установленной в Appdata / Local, и не запускается.

Приведенный ниже сценарий, составленный мной и с помощью других (с обращением к томалак), должен делать следующее:

  • Удалите два слова в «HKCU: \ SOFTWARE \ Microsoft \ OneDrive».
  • Удалите ключ в «HKCU: \ SOFTWARE \ Microsoft \ OneDrive», который соответствует номеру версии, например 18.0289.187.
  • Удалите все новые папки в «LOCALAPPDATA \ Microsoft \ OneDrive».

Он выполнит последнюю задачу, потому что, когда вы удалите 2 слова и ключ из ключа Onedrive и запустите OneDrive, он создаст другую папку в «LOCALAPPDATA \ Microsoft \ OneDrive», размер которой составляет около 100 МБ. В идеале я хотел бы разместить этот скрипт в групповой политике, чтобы он запускался при входе в систему каждого пользователя.

$oneDriveInstallDir = "$env:USERPROFILE\appdata\local\Microsoft\OneDrive"
$Versionarray = 13..20

if (Test-Path $oneDriveInstallDir) {
  Stop-Process -Name "OneDrive" -Force
  $currentVersion = (Get-ItemProperty HKCU:\SOFTWARE\Microsoft\OneDrive -Name "Version").Version 
  Remove-ItemProperty HKCU:\SOFTWARE\Microsoft\OneDrive -Name "Version" -Force
  Remove-ItemProperty HKCU:\SOFTWARE\Microsoft\OneDrive -Name "CurrentVersionPath" -Force
  Remove-Item "HKCU:\SOFTWARE\Microsoft\OneDrive\$currentVersion" -Force
  Start-Process $oneDriveInstallDir/OneDrive.exe
  }  
  Get-ChildItem "$env:LOCALAPPDATA\Microsoft\OneDrive" -Recurse | Where-Object {
    $item = $_
    $item -is [System.IO.DirectoryInfo] -and (
        $Versionarray | Where-Object { $item.Name.Contains($_) }
    )
} | Remove-Item -Recurse -Force
Stop-Process –Name invalidprocess -ErrorAction SilentlyContinue -ErrorVariable ProcessError;

If ($ProcessError) {

    Write-Warning -Message "Some of these folders are in use.";
    }

Проблема

При запуске скрипта он спросит, хочу ли я продолжить и удалить запрошенные элементы. Я действительно не хочу, чтобы он спрашивал, даже несмотря на команды силы, которые он все еще запрашивает. Основная проблема заключается в том, что затем он начнет удалять все элементы в разделе реестра OneDrive, чего не следует делать. Я попытался выполнить отладку перед тем, как спросить, но не могу найти причину. См. Пример файлов, которые он пытается удалить ниже:

  • HKEY_CURRENT_USER \ Software \ Microsoft \ OneDrive \ ClientConfigTelemetryTimeStamp
  • HKEY_CURRENT_USER \ Software \ Microsoft \ OneDrive \ MigrationCompleted
  • HKEY_CURRENT_USER \ Software \ Microsoft \ OneDrive \ StandaloneUpdaterSafeMode
  • HKEY_CURRENT_USER \ Software \ Microsoft \ OneDrive \ UpdateXMLRescanTime

Спасибо, что посмотрели.

Ответ @TobyU не решил вашу проблему?

stackprotector 15.04.2020 19:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
209
2

Ответы 2

Подсказка

Используйте переключатель -Confirm:$false с командами Remove-ItemProperty и / или Remove-Item, чтобы избавиться от подсказки.

Удаление куста реестра OnDrive

Если для $currentVersion не задано значение, следующая часть вашего скрипта удалит куст реестра OnDrive:

Remove-Item "HKCU:\SOFTWARE\Microsoft\OneDrive\$currentVersion" -Force

Теперь вы можете установить его с помощью

OneDriveSetup.exe /allusers

который устанавливает его в "C: \ Program Files (x86)" один раз для каждой системы, а не в AppData для каждого пользователя.

Это рекомендуемый процесс установки MSFT. Эта установка также удалит предыдущие версии, установленные в AppData.

Другие вопросы по теме