powershell 如何完全卸载OneDrive并删除C:\ Drive上的OneDrive相关文件夹?

6qqygrtg  于 2023-06-23  发布在  Shell
关注(0)|答案(3)|浏览(276)

我正在努力删除一些计算机上预装的膨胀软件。
我已经能够创建一个小脚本来删除从Microsoft Store预安装的项目,并完全卸载Teams。
然而,我在创建一个可靠的脚本来完全卸载OneDrive时遇到了一些麻烦。
到目前为止,我有以下内容:

#Instructions found on https://www.wintips.org/how-to-disable-uninstall-install-onedrive-in-windows-10-8-7/]
#Modified slightly for simplicity and to kill the OneDrive process before uninstallation of application

#To Kill OneDrive.exe process
taskkill /f /im OneDrive.exe

#To uninstall OneDrive if using 64-bit System:
C:\windows\SysWOW64\OneDriveSetup.exe /uninstall

#To uninstall Onedrive if using a 32-bit system:
C:\windows\System32\OneDriveSetup.exe /uninstall

#Added to Removes the OneDrive Folders that are on the laptop.

$dirpath = "C:\Users\$env:UserName\OneDrive"
$dirpath2 = "C:\Users\$env:UserName\OneDrive - CompanyName"

#conditional to delete OneDrive related folders of C Drive. This is where I run into trouble
if ((test-path -LiteralPath $dirpath) -or (test-path -LiteralPath $dirpath2)) {(remove-Item -LiteralPath $dirpath) -or (remove-Item -LiteralPath $dirpath2)}

#Remove-Item -LiteralPath "C:\Users\$env:UserName\OneDrive" -Force -Recurse
#Remove-Item -LiteralPath "C:\Users\$env:UserName\OneDrive - CompanyName" -Force -Recurse

exit

我的条件语句似乎有逻辑问题。当我运行这个脚本时,它确实删除了我打算删除的两个文件夹,但它返回“False”而不是我期望的“True”。
我认为发生的事情是,它在能够到达逻辑运算符之前运行remove-Item -LiteralPath $dirpath部分。我有这种印象,因为如果我使用-and操作符,它只会删除第一个文件夹"C:\Users\$env:UserName\OneDrive"
任何建议,以解决这个问题或改善脚本整体将不胜感激。谢谢你。

ndh0cuux

ndh0cuux1#

你应该用foreach

$dirpaths = "C:\Users\$env:UserName\OneDrive", "C:\Users\$env:UserName\OneDrive - CompanyName"
Foreach ($dirpath in $dirpaths) {
if (test-path -LiteralPath $dirpath) {remove-Item -LiteralPath $dirpath}
}
gmxoilav

gmxoilav2#

if ((test-path -LiteralPath $dirpath) -or (test-path -LiteralPath $dirpath2)) {(remove-Item -LiteralPath $dirpath) -or (remove-Item -LiteralPath $dirpath2)}

这个逻辑被打破了。
试试这个:

if (test-path -LiteralPath $dirpath) {

  Remove-Item -LiteralPath $dirpath
  }
  
  elseif (test-path -LiteralPath $dirpath2){
    remove-Item -LiteralPath $dirpath2
  }
  else {
    Write-Error -Message "We ain't found shit!"
  }

最终

你不需要做任何事情,因为Remove-Item不会在找不到文件/路径/目录时停止-它会继续。

Remove-Item  c:\thisisafakepath\, e:\anotherfakepath\, C:\Powershell\TestCSVs\out.csv -WhatIf -ErrorAction SilentlyContinue

Write-Host "Script continues..."

输出:

C:> . 'C:\Powershell\Scripts\trydelete.ps1'
What if: Performing the operation "Remove File" on target "C:\Powershell\TestCSVs\out.csv".
Script continues...
mnowg1ta

mnowg1ta3#

删除OneDrive还有更多内容。卸载后,您可能希望先将其内容移动到“常规”用户文件夹,然后再删除它们,而不是删除OneDrive文件夹。在这样做的时候,你可能会有合并问题,这取决于机器的新鲜程度。
我知道的另一件事是Windows如何解释shell文件夹。在注册表中查找
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
和/或
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Windows将用于“文档”、“图片”、“下载”、“音乐”等目录。前者使用绝对路径,而后者在路径上使用%USERPROFILE%\前缀。
我最终更新了所有这些(包括具有GUID名称的值),以使一切正常工作。

相关问题