Доброе утро всем,
У меня есть интересная проблема с кодом, приведенным ниже, но сначала немного фона.
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
Спасибо за просмотр.