Beispiel #1
0
        private Task StartOutputWriter(BlockingCollection <Wrapper <JsonBase> > outputQueue)
        {
            return(Task.Factory.StartNew(() =>
            {
                var serializer = new JsonSerializer
                {
                    NullValueHandling = NullValueHandling.Include,
                };
                var computerCount = 0;
                var userCount = 0;
                var groupCount = 0;
                var domainCount = 0;
                var gpoCount = 0;
                var ouCount = 0;
                var sessionCount = 0;
                var gpoAdminCount = 0;

                JsonTextWriter computers = null;
                JsonTextWriter users = null;
                JsonTextWriter groups = null;
                JsonTextWriter domains = null;
                JsonTextWriter gpos = null;
                JsonTextWriter ous = null;
                JsonTextWriter sessions = null;
                JsonTextWriter gpomembers = null;

                foreach (var obj in outputQueue.GetConsumingEnumerable())
                {
                    var item = obj.Item;
                    switch (item)
                    {
                    case Group g:
                        if (groups == null)
                        {
                            groups = CreateFileStream("groups");
                        }

                        serializer.Serialize(groups, g);
                        groupCount++;
                        if (groupCount % 100 == 0)
                        {
                            groups.Flush();
                        }
                        break;

                    case Computer c:
                        if (computers == null)
                        {
                            computers = CreateFileStream("computers");
                        }

                        serializer.Serialize(computers, c);
                        computerCount++;
                        if (computerCount % 100 == 0)
                        {
                            computers.Flush();
                        }
                        break;

                    case User u:
                        if (users == null)
                        {
                            users = CreateFileStream("users");
                        }

                        serializer.Serialize(users, u);
                        userCount++;
                        if (userCount % 100 == 0)
                        {
                            users.Flush();
                        }
                        break;

                    case Domain d:
                        if (domains == null)
                        {
                            domains = CreateFileStream("domains");
                        }

                        serializer.Serialize(domains, d);
                        domainCount++;
                        if (domainCount % 100 == 0)
                        {
                            domains.Flush();
                        }
                        break;

                    case Gpo g:
                        if (gpos == null)
                        {
                            gpos = CreateFileStream("gpos");
                        }

                        serializer.Serialize(gpos, g);
                        gpoCount++;
                        if (gpoCount % 100 == 0)
                        {
                            gpos.Flush();
                        }
                        break;

                    case Ou o:
                        if (ous == null)
                        {
                            ous = CreateFileStream("ous");
                        }

                        serializer.Serialize(ous, o);
                        ouCount++;

                        if (ouCount % 100 == 0)
                        {
                            ous.Flush();
                        }
                        break;

                    case Session s:
                        if (sessions == null)
                        {
                            sessions = CreateFileStream("sessions");
                        }

                        serializer.Serialize(sessions, s);
                        sessionCount++;

                        if (sessionCount % 100 == 0)
                        {
                            sessions.Flush();
                        }
                        break;

                    case GpoMember a:
                        if (gpomembers == null)
                        {
                            gpomembers = CreateFileStream("gpomembers");
                        }

                        serializer.Serialize(gpomembers, a);
                        gpoAdminCount++;
                        if (gpoAdminCount % 100 == 0)
                        {
                            gpomembers.Flush();
                        }
                        break;
                    }

                    obj.Item = null;
                }

                groups?.CloseC(groupCount, "groups");
                sessions?.CloseC(sessionCount, "sessions");
                computers?.CloseC(computerCount, "computers");
                users?.CloseC(userCount, "users");
                ous?.CloseC(ouCount, "ous");
                domains?.CloseC(domainCount, "domains");
                gpos?.CloseC(gpoCount, "gpos");
                gpomembers?.CloseC(gpoAdminCount, "gpomembers");
            }, TaskCreationOptions.LongRunning));
        }