使用脚本删除注册表项

时间:2018-11-15 11:31:43

标签: powershell registry onedrive

早上好,

下面的代码有一个有趣的问题,但首先要介绍一下背景。

Onedrive不喜欢使用域漫游配置文件。为用户安装OneDrive后,它将在PC的“ Appdata \ local”文件夹中而不是整个PC上安装OneDrive。这意味着它将使用该特定PC的安装版本,直到将其更新为较新版本为止。如果用户从另一台PC上的Onedrive版本较旧或较新的PC转到Hotdesk,则Onedrive将无法从该PC上为他们工作,因为它会从注册表中的漫游配置文件中提取帐户信息。注册表会将漫游配置文件中的版本与Appdata / Local中安装的版本进行比较,并且无法启动。

以下由我和其他人帮助(并向tomalak大喊大叫)一起整理的脚本应该执行以下操作:

  • 删除“ HKCU:\ SOFTWARE \ Microsoft \ OneDrive”中的两个DWord
  • 在“ HKCU:\ SOFTWARE \ Microsoft \ OneDrive”中删除与版本号相对应的密钥,例如18.0289.187
  • 删除“ LOCALAPPDATA \ Microsoft \ OneDrive”中的所有新文件夹

它将执行最后一个任务,因为当您从Onedrive密钥中删除2个DWords和Key并启动OneDrive时,它将在“ LOCALAPPDATA \ Microsoft \ OneDrive”中创建另一个大约100MB的文件夹。理想情况下,我希望将此脚本放入组策略中,以便在每个用户登录时运行。

$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

谢谢您的光临。

2 个答案:

答案 0 :(得分:1)

提示

-Confirm:$false开关与Remove-ItemProperty和/或Remove-Item命令一起使用以摆脱提示。

删除OnDrive注册表配置单元

如果没有为$currentVersion设置任何值,则脚本的下面部分将删除OnDrive Registry Hive:

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

答案 1 :(得分:0)

现在您可以使用

进行安装
OneDriveSetup.exe /allusers

,每个系统将其安装在“ C:\ Program Files(x86)”中一次,而不是每个用户安装在AppData中。

这是MSFT建议的安装过程。此安装还将删除AppData中安装的先前版本。