Тут по некотором размышлении родился джобик, который делает то же самое "без лишнего шума и пыли":
X++:
#define.UserAccountControl ('userFlags')
#define.UF_ACCOUNTDISABLE (0x0002)
Counter numTotal;
Counter numNotFound;
Counter numDisabled;
UserInfo userInfo;
int userAccControl;
COM dirObject;
str dirPath;
;
while select userInfo
where userInfo.networkAlias
&& userInfo.networkDomain
{
numTotal++;
dirPath = strfmt(@"WinNT://%1/%2,User", userInfo.networkDomain, userInfo.networkAlias);
dirObject = COM::getObjectEx(dirPath);
if (dirObject)
{
if (userInfo.enable)
{
userAccControl = dirObject.get(#UserAccountControl);
if (bitTest(userAccControl, #UF_ACCOUNTDISABLE))
{
numDisabled++;
info(strfmt("%2\%1 disabled in AD, but not in AX", userInfo.networkAlias, userInfo.networkDomain));
}
}
dirObject.finalize();
dirObject = null;
}
else
{
numNotFound++;
warning(strfmt(@"%2\%1 - not found", userInfo.networkAlias, userInfo.networkDomain));
}
}
info(strfmt(@"Total: %1, not found: %2, disabled in AD, but not in AX: %3", numTotal, numNotFound, numDisabled));