WinProfileOps
0.3.0-preview0003
WinProfileOps integrates seamlessly with WinRegOps to query, validate, and manage user profile-related data from the Windows registry. This module is ideal for system administrators seeking to streamline profile management, especially in environments with many users and computers.
Dependencies:
- WinRegOps: WinProfileOps depends on WinRegOps for registry operations, such as querying, opening, and modifying registry keys related to user profiles.
Key features:
- Retrieve user profile information from both the registry and file system (local and remote).
- Detect orphaned profiles (e.g., missing profile folders or registry entries).
- Filter and exclude special accounts like system or service accounts.
- Remote profile management support for retrieving profiles from different systems.
- Robust error handling for permission issues or unreachable systems.
- Class-based profile objects for easy integration with automation tasks or scripts.
Typical use cases include:
- Cleaning up orphaned profiles after system migrations or user deactivations.
- Automating stale profile detection on local and remote systems to maintain system performance.
- Managing user profiles in large-scale, multi-user environments such as terminal servers and Citrix.
- Excluding critical system accounts from profile management tasks, ensuring important profiles remain unaffected.
- Providing profile management as part of system maintenance routines to enhance system health.
Upcoming Features:
- The `Remove-UserProfile` function is coming soon, offering safe removal of user profiles from both the file system and registry, with strong safeguards like `ShouldProcess`, `-WhatIf`, and `-Confirm` to prevent accidental deletions.
Minimum PowerShell version
5.1
See the version list below for details.
Installation Options
Owners
Copyright
(c) 2024 LarryWisherMan. All rights reserved.
Package Details
Author(s)
- LarryWisherMan
Tags
WindowsProfiles ProfileManagement OrphanedProfiles RegistryOperations FilesystemOperations RemoteManagement UserProfiles ProfileCleanup WindowsRegistry SystemAdministration Automation ProfileValidation WindowsManagement ITAdministration UserProfileTools
Functions
Get-OrphanedProfiles Get-UserProfilesFromFolders Get-UserProfilesFromRegistry Invoke-UserProfileAudit Remove-UserProfilesFromRegistry
Dependencies
Release Notes
## [0.3.0-preview0003] - 2024-09-24
### Fixed
- Removed bug from `Process-RegistryProfiles` regarding populating the `FolderName`
variable.
### Added
#### Functions
- New helper function `Validate-SIDFormat` to verify SID value upon retrieval in
`Get-ProfilePathFromSID`.
- **Admin Detection and Environment Variable**: Added logic to detect whether
the current user is an administrator and set an environment variable
`WinProfileOps_IsAdmin` accordingly.
- If the user is an administrator, `$env:WinProfileOps_IsAdmin` is set to
`$true`. If not, it's set to `$false`.
- The environment variable is automatically removed when the module is unloaded
or when PowerShell exits.
- Registered an `OnRemove` script block and a `PowerShell.Exiting` event to
ensure cleanup of the environment variable on module removal or session exit.
- **Remove-UserProfilesFromRegistry**: Added a new function to remove user profiles
from the Windows registry based on SIDs, Usernames, or UserProfile objects.
- Supports three parameter sets: `UserProfileSet`, `SIDSet`, and `UserNameSet`.
- Can be run in `AuditOnly` mode, where no actual deletion is performed, or
in deletion mode where profiles are removed.
- Includes a `Force` switch to bypass confirmation prompts and a
`ComputerName` parameter for targeting remote computers.
- Graceful error handling and logging for cases where the registry key cannot
be opened or profiles cannot be processed for specific computers.
#### Environment Variables
- **`$env:WinProfileOps_IsAdmin`**: A boolean value that determines if the current
user has administrative privileges. This is set by checking the user's security
role against the built-in Administrator group using Windows security principals.
- **`$env:WinProfileOps_RegistryPath`**: Specifies the registry path used to
manage user profiles. Default value: `"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"`.
- **`$env:WinProfileOps_RegistryHive`**: Defines the registry hive to use, which
is set to `LocalMachine` by default.
- **`$env:WinProfileOps_RegBackUpDirectory`**: Specifies the directory where
registry backups are stored. Default value: `"C:\LHStuff\RegBackUp"`.
- **`$env:WinProfileOps_ProfileFolderPath`**: The profile folder path, defaulting
to the system drive's `Users` folder. Example: `"C:\Users"`.
### Changed
- **Get-UserProfilesFromRegistry**: Updated the function to handle scenarios
where the current user does not have administrative privileges.
- The function now checks if the user is an administrator by evaluating the
`WinProfileOps_IsAdmin` environment variable.
- If the user has administrator privileges, the function retrieves user
profiles from the registry using `Get-SIDProfileInfo`.
- If the user lacks administrative privileges, the function falls back to the
`Get-SIDProfileInfoFallback` method, which retrieves user profiles using
CIM/WMI without requiring registry access.
- A warning is logged when the fallback method is used, indicating that special
system accounts are excluded.
- Refactored `Process-RegistryProfiles` to better account for access denied errors
when testing profile paths with `Test-FolderExists`.
- Updated `UserProfile` object creation in `Test-OrphanedProfile` for
`$AccessError` scenarios.
- The module is now using `WinRegOps` version `0.4.0` for more refined registry
value retrieval.
FileList
- WinProfileOps.nuspec
- Modules\WinRegOps\0.4.0\WinRegOps.psd1
- WinProfileOps.psd1
- Modules\WinRegOps\0.4.0\WinRegOps.psm1
- WinProfileOps.psm1
- Modules\WinRegOps\0.4.0\en-US\about_WinRegOps.help.txt
- en-US\about_WinProfileOps.help.txt
Version History
Version | Downloads | Last updated |
---|---|---|
0.3.0-previe... | 4 | 10/1/2024 |
0.3.0-previe... | 4 | 10/1/2024 |
0.3.0-previe... | 3 | 10/1/2024 |
0.3.0-previe... | 4 | 9/24/2024 |
0.3.0-previe... (current version) | 3 | 9/24/2024 |
0.3.0-previe... | 3 | 9/16/2024 |
0.3.0-previe... | 4 | 9/12/2024 |
0.2.0 | 13 | 9/12/2024 |
0.2.0-previe... | 2 | 9/12/2024 |
0.2.0-previe... | 2 | 9/11/2024 |
0.2.0-previe... | 3 | 9/9/2024 |