@@ -18,6 +18,48 @@ if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti
1818try {
1919 Set-ExecutionPolicy Bypass - Scope Process - Force
2020 $ErrorActionPreference = ' SilentlyContinue'
21+ $administratorsSid = " *S-1-5-32-544"
22+
23+ function Remove-ShortcutByTarget {
24+ param (
25+ [string []]$SearchRoots ,
26+ [string []]$TargetPatterns
27+ )
28+
29+ $wshShell = $null
30+ try {
31+ $wshShell = New-Object - ComObject WScript.Shell
32+ }
33+ catch {
34+ return
35+ }
36+
37+ foreach ($root in $SearchRoots ) {
38+ if (-not (Test-Path $root )) {
39+ continue
40+ }
41+
42+ Get-ChildItem - Path $root - Filter * .lnk - File - Recurse - ErrorAction SilentlyContinue | ForEach-Object {
43+ try {
44+ $shortcut = $wshShell.CreateShortcut ($_.FullName )
45+ $targetData = @ (
46+ $shortcut.TargetPath ,
47+ $shortcut.Arguments ,
48+ $shortcut.IconLocation ,
49+ $_.BaseName
50+ ) -join ' '
51+
52+ foreach ($pattern in $TargetPatterns ) {
53+ if ($targetData -like $pattern ) {
54+ Remove-Item - Path $_.FullName - Force - ErrorAction SilentlyContinue
55+ break
56+ }
57+ }
58+ }
59+ catch {}
60+ }
61+ }
62+ }
2163
2264 # Close Outlook processes
2365 Get-Process | Where-Object { $_.ProcessName -like " *outlook*" } | Stop-Process - Force
@@ -35,26 +77,24 @@ try {
3577 foreach ($folder in $outlookFolders ) {
3678 $folderPath = Join-Path $windowsAppsPath $folder.Name
3779 takeown / f $folderPath / r / d Y | Out-Null
38- icacls $folderPath / grant administrators:F / t | Out-Null
80+ icacls $folderPath / grant " ${administratorsSid} :F " / t / c | Out-Null
3981 Remove-Item - Path $folderPath - Recurse - Force
4082 }
4183
4284 # Remove shortcuts
43- $shortcutPaths = @ (
44- " $env: ProgramData \Microsoft\Windows\Start Menu\Programs\Outlook.lnk" ,
45- " $env: APPDATA \Microsoft\Windows\Start Menu\Programs\Outlook.lnk" ,
46- " $env: ProgramData \Microsoft\Windows\Start Menu\Programs\Microsoft Office\Outlook.lnk" ,
47- " $env: APPDATA \Microsoft\Windows\Start Menu\Programs\Microsoft Office\Outlook.lnk" ,
48- " $env: PUBLIC \Desktop\Outlook.lnk" ,
49- " $env: USERPROFILE \Desktop\Outlook.lnk" ,
50- " $env: PUBLIC \Desktop\Microsoft Outlook.lnk" ,
51- " $env: USERPROFILE \Desktop\Microsoft Outlook.lnk" ,
52- " $env: PUBLIC \Desktop\Outlook (New).lnk" ,
53- " $env: USERPROFILE \Desktop\Outlook (New).lnk" ,
54- " $env: ProgramData \Microsoft\Windows\Start Menu\Programs\Outlook (New).lnk" ,
55- " $env: APPDATA \Microsoft\Windows\Start Menu\Programs\Outlook (New).lnk"
85+ $shortcutRoots = @ (
86+ " $env: ProgramData \Microsoft\Windows\Start Menu\Programs" ,
87+ " $env: APPDATA \Microsoft\Windows\Start Menu\Programs" ,
88+ " $env: PUBLIC \Desktop" ,
89+ [Environment ]::GetFolderPath(' Desktop' )
90+ )
91+
92+ Remove-ShortcutByTarget - SearchRoots $shortcutRoots - TargetPatterns @ (
93+ " *OUTLOOK.EXE*" ,
94+ " *Microsoft.Office.Outlook*" ,
95+ " *Microsoft.OutlookForWindows*" ,
96+ " *Outlook*"
5697 )
57- $shortcutPaths | ForEach-Object { Remove-Item $_ - Force }
5898
5999 # Taskbar cleanup
60100 Set-ItemProperty - Path " HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" - Name " ShowTaskViewButton" - Value 0 - Type DWord - Force
@@ -84,11 +124,12 @@ try {
84124 & " $env: SystemRoot \System32\OneDriveSetup.exe" / uninstall
85125 }
86126
127+ Remove-ShortcutByTarget - SearchRoots $shortcutRoots - TargetPatterns @ (
128+ " *OneDrive.exe*" ,
129+ " *OneDrive*"
130+ )
131+
87132 @ (
88- " $env: ProgramData \Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" ,
89- " $env: APPDATA \Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" ,
90- " $env: PUBLIC \Desktop\OneDrive.lnk" ,
91- " $env: USERPROFILE \Desktop\OneDrive.lnk" ,
92133 " $env: USERPROFILE \OneDrive" ,
93134 " $env: LOCALAPPDATA \Microsoft\OneDrive" ,
94135 " $env: ProgramData \Microsoft\OneDrive" ,
@@ -107,4 +148,4 @@ try {
107148 Start-Process explorer
108149}
109150catch {}
110- exit
151+ exit
0 commit comments