Issue: When running the tools against a domain with over 100k users, or large numbers of OUs and ACLs, script consumes upwards of 4GB or more of RAM, ~20% proc, and generally consumes all Disk IOPs which, when run from a laptop with 8GB of RAM, brought it to an unusable level. In the event the script consumes too much overhead, the system crashes, resulting in having to start completely over. On older domains (2008 R2), large queries can result in timeouts in the domain web services causing 'invalid enumeration context' errors.
Runtime Environment:
Windows 10 v1803
PowerShell v5.1
Module Versions - Latest of all dependent modules, pulled directly from GitHub
Expectations:
a) When possible, data for each area should be written out to files as it's pulled, and then cleared from memory, to minimize memory footprint.
b) Long running tasks, such as collecting OU ACLs, should have a progress bar to provide an indication of elapsed time and percent complete.
c) By making use of frequent data dumps to the file system, it should be possible to enable a resume in the event that a given run crashes the system, or some other factor causes the process to be interrupted.
Suggestion: It might be beneficial to pull a count of objects and performing some pre-analysis on the number of objects prior to initiation of a section run. For larger environments, it should be possible to break processing up into smaller chunks, perhaps using filters (ie found 100k objects, find all users with given name starting with a, b, or c, then do d,e,f, etc until all objects have been processed). This information can be dumped to disk, and then the files processed individually into the final formats at the end of the run. It may also be beneficial to switch from using the AD cmdlets to using the legacy ADSI interface in larger environments, since it doesn't have the same timeout limitations.
Issue: When running the tools against a domain with over 100k users, or large numbers of OUs and ACLs, script consumes upwards of 4GB or more of RAM, ~20% proc, and generally consumes all Disk IOPs which, when run from a laptop with 8GB of RAM, brought it to an unusable level. In the event the script consumes too much overhead, the system crashes, resulting in having to start completely over. On older domains (2008 R2), large queries can result in timeouts in the domain web services causing 'invalid enumeration context' errors.
Runtime Environment:
Windows 10 v1803
PowerShell v5.1
Module Versions - Latest of all dependent modules, pulled directly from GitHub
Expectations:
a) When possible, data for each area should be written out to files as it's pulled, and then cleared from memory, to minimize memory footprint.
b) Long running tasks, such as collecting OU ACLs, should have a progress bar to provide an indication of elapsed time and percent complete.
c) By making use of frequent data dumps to the file system, it should be possible to enable a resume in the event that a given run crashes the system, or some other factor causes the process to be interrupted.
Suggestion: It might be beneficial to pull a count of objects and performing some pre-analysis on the number of objects prior to initiation of a section run. For larger environments, it should be possible to break processing up into smaller chunks, perhaps using filters (ie found 100k objects, find all users with given name starting with a, b, or c, then do d,e,f, etc until all objects have been processed). This information can be dumped to disk, and then the files processed individually into the final formats at the end of the run. It may also be beneficial to switch from using the AD cmdlets to using the legacy ADSI interface in larger environments, since it doesn't have the same timeout limitations.