First MCP server package release since v0.2.5. This cycle touched both
the collector (already released separately as v1.7.0) and the server
package itself — Live Mode (live.py), the boolean/UAC normalization
fixes in tools/users.py, tools/computers.py, and tools/fsp.py
(_normalize.py), and the new Live Mode warning channel (_clixml.py)
— see "MCP Server" below.
Collector
- Collector bumped to v1.7.0.
- Removed the silent
-Limitcaps on Users/Computers collection (previously
5,000/10,000); collection is now unlimited by default, with-Limit
available only for opt-in test/debug use. Enabled,PasswordNeverExpires,TrustedForDelegation, and
TrustedToAuthForDelegationnow report explicit null — instead of a
fabricated value — whenuserAccountControlcannot be read for a user
(typically caused by a non-elevated collector session; task #131).- Added a non-blocking elevation check: the collector now warns when run
from a non-elevated PowerShell session, since some AD environments
return a nulluserAccountControlwithout one (task #137). - Fixed forest/domain name resolution to anchor to the target server
(-Server) instead of the calling machine's own identity — previously
produced wrong output filenames and an incorrectforest/fsmo_roles
section in cross-forest and trust scenarios (task #132). - New
Membership.psm1: group membership is now resolved member-by-member
instead of failing an entire group on a single broken reference.
Unresolvable members are recorded as placeholder rows instead of
disappearing ingroup_membersandprivileged_groups(different field
casing between the two).groupsstays accurate too, by counting raw
member DNs directly.privileged_accountsis the one exception:
unresolvable members are excluded from it on purpose, to keep its count
accurate -- they remain visible inprivileged_groups/group_members
(task #134). - New
Logging.psm1: shared fallback logging so warnings from collector
modules are never silently lost regardless of invocation style. Schema.psm1: schema extensions collection is now capped via a-Limit
parameter (default500,0= unlimited) instead of a fixed cap with
no override; a warning is logged throughWrite-SafeCollectorLogwhen
the cap actually truncates the result. Theschemasection in Live
Mode applies the identical 500 cap, with no-Limitoverride on that
side — use the offline collector with-Limit 0for a complete
collection in an environment that exceeds it (task #130).- Fixed an ADWS enumeration timeout on large group/DC counts by
materializing collections before iterating. installer/Manage-Workspaces.ps1: fixed array-collapse bugs causing
incorrect behavior with a single forest and a crash with zero forests
configured (-RepairMetadata,-Validate -Name).
MCP Server
PasswordNotRequirednow reports explicitnull— instead of a
fabricatedfalse— whenuserAccountControlcannot be read for a
user, matching the other 4 UAC-derived fields already fixed in task
#131. Fixed identically in the collector and in Live Mode (task #135).get_user_summary:disabledno longer counts accounts with unreadable
userAccountControlas disabled. Newuac_unreadable_countfield
reports that population explicitly, soenabled + disabled + uac_unreadable_count == totalalways holds (task #136).get_users: theenabledandpassword_never_expiresfilters no
longer misclassify accounts with unreadableuserAccountControlinto
thefalsebranch; newpassword_not_requiredfilter added for
symmetry; newuac_unreadablefilter to query that population
explicitly, combinable with every non-UAC filter (task #136).- Live Mode: warnings and non-fatal errors from PowerShell were being
silently discarded on every successful call —stderrwas only
inspected after a failure, so a non-blocking warning (e.g. unreadable
userAccountControl, the new Schema cap, unresolved group members)
never reached the caller or the EventLog.stderris now always read,
parsed with a new shared CLIXML parser (_clixml.py). Every warning is
logged to the EventLog unconditionally; most tools additionally surface
it in their JSON response via an optionalwarningsfield, present
only when that specific call actually degraded — see
docs/tools-reference.mdfor the exact list of tools this applies to.
Failure-path error messages shown to the caller are now extracted with
the same parser instead of a raw CLIXML blob (task #141).