예제 #1
0
        public override IEnumerable <CommandDTOBase?> Execute(string[] args)
        {
            if (!SecurityUtil.IsHighIntegrity())
            {
                WriteHost("Must be an administrator to enumerate User Right Assignments");
                yield break;
            }

            var        computerName = "localhost";
            string     filter       = null;
            LsaWrapper lsa          = null;

            if (args.Length >= 1)
            {
                computerName = args[0];
            }

            if (args.Length >= 2)
            {
                filter = ".*" + args[1] + ".*";
            }

            try
            {
                lsa = new LsaWrapper(computerName);
            }
            catch (UnauthorizedAccessException)
            {
                WriteError("Insufficient privileges");
                yield break;
            }
            catch (Exception e)
            {
                WriteError("Unhandled exception enumerating user right assignments: " + e);
                yield break;
            }

            var privilegeSet = filter == null ? _defaultPrivileges : _allPrivileges.Where(p => Regex.IsMatch(p, filter, RegexOptions.IgnoreCase)).ToArray();

            foreach (var priv in privilegeSet)
            {
                var principals = lsa.ReadPrivilege(priv);

                yield return(new UserRightAssignmentsDTO()
                {
                    Right = priv,
                    Principals = principals
                });
            }

            if (lsa != null)
            {
                lsa.Dispose();
            }
        }