Элементы реестра удаляются скриптом - PullRequest
0 голосов
/ 15 ноября 2018

Доброе утро всем,

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

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

Сценарий, приведенный ниже, составленный мной и другими людьми (с приветом tomalak *)1008 *) должен делать следующее:

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

Это выполнит последнюю задачу, потому что когда выудалите 2 DWords и ключ из ключа 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 \ MigrationCompleted1032 * HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ OneDrive \ StandaloneUpdaterSafeMode
  • HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ OneDrive \ UpdateXMLRescanTime

Спасибо за просмотр.

1 Ответ

0 голосов
/ 15 ноября 2018

Подсказка

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

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

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

Remove-Item "HKCU:\SOFTWARE\Microsoft\OneDrive\$currentVersion" -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...