我正在努力删除一些计算机上预装的膨胀软件。
我已经能够创建一个小脚本来删除从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"
任何建议,以解决这个问题或改善脚本整体将不胜感激。谢谢你。
3条答案
按热度按时间ndh0cuux1#
你应该用foreach
gmxoilav2#
这个逻辑被打破了。
试试这个:
最终
你不需要做任何事情,因为Remove-Item不会在找不到文件/路径/目录时停止-它会继续。
输出:
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名称的值),以使一切正常工作。