aws / aws/aws-tools-for-powershell

AWS.Tools.Installer v1.0.3 fails to Uninstall "Roamed" Modules if OneDrive Known Folder Move is Configured

Open
#399 4 comments 0 reactions 0 assignees View on GitHub
feature-request module/powershell-cmdlets p2 queued
Dominant language
C#
Stars
298
Forks
102
Avg merge
7d 17m
Merged PRs (30d)
2

Description

### Describe the bug

On Windows, OneDrive Known Folder Move redirects the Documents folder to OneDrive. Windows PowerShell 5.1 places its per-user-installed modules in %DOCUMENTS%\WindowsPowerShell\Modules and PowerShell 7.x places its in %DOCUMENTS%\PowerShell\Modules - therefore, per-user-installed modules sync to OneDrive and "roam" from computer to computer.

If a module is installed on "ComputerA" and roams to "ComputerB", ComputerB will be able to use the module, but it won't be registered in PowerShell's installed module manifest. Therefore, if the user uses `Install-AWSToolsModule` with the `-Cleanup` flag to uninstall old versions, the process will fail with errors like the following:

```text
PS C:\Users\flesniak> Install-AWSToolsModule AWS.Tools.Common, AWS.Tools.SecurityHub -CleanUp;

Confirm
Are you sure you want to perform this action?
Performing the operation "Uninstall-AWSToolsModule" on target "AWS Tools version 5.0.67".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): y
Uninstalling AWS.Tools version 5.0.67
Uninstalling module AWS.Tools.ConfigService
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.ConfigService'.
Uninstalling module AWS.Tools.IdentityManagement
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.IdentityManagement'.
Uninstalling module AWS.Tools.SecurityHub
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SecurityHub'.
Uninstalling module AWS.Tools.SSO
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SSO'.
Uninstalling module AWS.Tools.SSOOIDC
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SSOOIDC'.
Uninstalling module AWS.Tools.Common
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.Common'.
```

### Regression Issue

- [ ] Select this option if this issue appears to be a regression.

### Expected Behavior

If Install-AWSToolsModule is going to clean up old versions of modules, I would like it to be able to remove modules that were synced over from OneDrive.

### Current Behavior

```text
PS C:\Users\flesniak> Install-AWSToolsModule AWS.Tools.Common, AWS.Tools.SecurityHub -CleanUp;

Confirm
Are you sure you want to perform this action?
Performing the operation "Uninstall-AWSToolsModule" on target "AWS Tools version 5.0.67".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): y
Uninstalling AWS.Tools version 5.0.67
Uninstalling module AWS.Tools.ConfigService
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.ConfigService'.
Uninstalling module AWS.Tools.IdentityManagement
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.IdentityManagement'.
Uninstalling module AWS.Tools.SecurityHub
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SecurityHub'.
Uninstalling module AWS.Tools.SSO
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SSO'.
Uninstalling module AWS.Tools.SSOOIDC
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.SSOOIDC'.
Uninstalling module AWS.Tools.Common
Uninstall-Package: No match was found for the specified search criteria and module names 'AWS.Tools.Common'.
```

### Reproduction Steps

- Have two Windows systems, each configured with OneDrive Known Folder Move on a shared OneDrive account
- Install some modules on the first system, e.g., `Install-AWSToolsModule AWS.Tools.Common, AWS.Tools.SecurityHub -CleanUp;`
- Wait a few days for module updates to publish
- On the second system, run the command `Install-AWSToolsModule AWS.Tools.Common, AWS.Tools.SecurityHub -CleanUp;`

### Possible Solution

To fix this, the call to `PowerShellGet\Uninstall-Module @uninstallModuleParams` could be wrapped in a try-catch block, with a catch block specifically for this exception. In that catch block, enumerate the modules present in the modules folder and their versions, then for each module, sort by version and queue anything older than the most recent version for deletion. Then, use Remove-Item to remove it.

I use the following script to do this, which also serves as my workaround in the meantime:

https://frenchcries-my.sharepoint.com/:u:/p/flesniak/Ef0uvrVVsvdCv7Y3hgl34DQBjaOBbgygytdOW_D4rKsfbw?e=lfSWrR

It's a bit tricky because the versions of modules in the PowerShell Gallery are not version objects - they are strings. So, a version like 1.3.beta1 is allowed. I had to write a function to gracefully convert these sorts of strings into a proper version object for sorting purposes.

### Additional Information/Context

_No response_

### AWS Tools for PowerShell version used

AWS.Tools.Installer v1.0.3

### PowerShell version used

Name Value
---- -----
PSVersion 7.5.3
PSEdition Core
GitCommitId 7.5.3
OS Microsoft Windows 10.0.26100
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0

### Operating System and version

Windows 11 25H2

Contributor guide

Open the contributing guide

Research direction

Start at the Install-AWSToolsModule cleanup path and the PowerShellGet\Uninstall-Module call described in the report. Reproduce with OneDrive Known Folder Move and inspect the per-user module folders; done means cleanup handles modules that exist there but lack an installed-module manifest, including version ordering, without the reported uninstall errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
powershell
Domain
cli, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.