Ejemplo n.º 1
0
        private PSDataCollection <PSObject> InvokePowerShell(PowerShell powershell, RunspaceCreatedEventArgs args)
        {
            string       str;
            HostInfo     hostInfo             = this.remoteHost.HostInfo;
            IAsyncResult asyncResult          = new ServerPowerShellDriver(powershell, null, true, Guid.Empty, this.InstanceId, this, args.Runspace.ApartmentState, hostInfo, RemoteStreamOptions.AddInvocationInfo, false, args.Runspace).Start();
            PSDataCollection <PSObject> datas = powershell.EndInvoke(asyncResult);
            ArrayList dollarErrorVariable     = (ArrayList)powershell.Runspace.GetExecutionContext.DollarErrorVariable;

            if (dollarErrorVariable.Count <= 0)
            {
                return(datas);
            }
            ErrorRecord record = dollarErrorVariable[0] as ErrorRecord;

            if (record != null)
            {
                str = record.ToString();
            }
            else
            {
                Exception exception = dollarErrorVariable[0] as Exception;
                if (exception != null)
                {
                    str = (exception.Message != null) ? exception.Message : string.Empty;
                }
                else
                {
                    str = string.Empty;
                }
            }
            throw PSTraceSource.NewInvalidOperationException("RemotingErrorIdStrings", PSRemotingErrorId.StartupScriptThrewTerminatingError.ToString(), new object[] { str });
        }
Ejemplo n.º 2
0
        private Task <IEnumerable <PSObject> > RunIndependentCommandAsync(string input)
        {
            independentShell.Runspace = host.GetIndependentRunspace();
            independentShell.AddScript(input);

            return(Task.Factory.FromAsync <IEnumerable <PSObject> >(independentShell.BeginInvoke(), (result) =>
            {
                return independentShell.EndInvoke(result);
            }));
        }
Ejemplo n.º 3
0
        private void EndCurrentAsyncResult()
        {
            var asyncResult = Interlocked.Exchange(ref _asyncResult, null);

            if (null == asyncResult)
            {
                return;
            }

            _powerShell.EndInvoke(asyncResult);
        }
        public static async Task <PSDataCollection <T2> > InvokeAsync <T1, T2>(this System.Management.Automation.PowerShell shell, PSDataCollection <T1> input = null, PSInvocationSettings invocationSettings = null)
        {
            var    output = new PSDataCollection <T2>();
            object state  = "none";

            await Task.Factory.FromAsync(
                (t1, t2, callback, obj) => shell.BeginInvoke(t1, t2, invocationSettings ?? new PSInvocationSettings(), callback, obj),
                (Action <IAsyncResult>)((a) => shell.EndInvoke(a)), input, output, state);

            return(output);
        }
Ejemplo n.º 5
0
        public void Run(List <string> Commands)
        {
            try
            {
                if (Commands?.Count > 0)
                {
                    using (runSpace = RunspaceFactory.CreateRunspace())
                    {
                        runSpace.Open();

                        using (System.Management.Automation.PowerShell pwsh = System.Management.Automation.PowerShell.Create())
                        {
                            pwsh.Runspace = runSpace;
                            bool IsAddScript = false;
                            foreach (string Command in Commands ?? Enumerable.Empty <string>())
                            {
                                if (!string.IsNullOrEmpty(Command))
                                {
                                    pwsh.AddScript(Command);
                                    IsAddScript = true;
                                }
                            }

                            if (IsAddScript)
                            {
                                IAsyncResult gpcAsyncResult = pwsh.BeginInvoke();
                                _ = pwsh.EndInvoke(gpcAsyncResult);
                            }
                        }
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                //Memory Leak
                try
                {
                    runSpace = null;
                    GC.Collect();
                }
                catch { }
            }
        }
Ejemplo n.º 6
0
 private PSDataCollection <PSObject> EndInvoke(IAsyncResult result)
 {
     try
     {
         return(_powerShell.EndInvoke(result));
     }
     catch (PipelineStoppedException e)
     {
         return(null);
     }
     catch (RemoteException e)
     {
         // "is not recognized as the name of a cmdlet" - occurs when remote folder deleted but still presents in profile
         // also happened when tried to use existing remote profile with another VM that has not been initialized
         throw new RemoteNotInitializedException(e.Message, e);
     }
 }
Ejemplo n.º 7
0
        public void AysncSynchronousPipline(int who = 0)
        {
            if (ps != null)
            {
                IAsyncResult async = ps.BeginInvoke();

                ps.Runspace.Debugger.DebuggerStop += Debugger_DebuggerStop;



                foreach (PSObject result in ps.EndInvoke(async))
                {
                    if (result != null)
                    {
                        output.Add(result.BaseObject);
                    }
                }
            }
        }
Ejemplo n.º 8
0
        public void Run(string Command)
        {
            string[] PrintCommandLines = Command.Split(new string[] { "\n" }, StringSplitOptions.None);

            //NCCFramework.Util.Logger.Debug(ref logger, $@"실행전 : Command = {string.Join("\r\n", PrintCommandLines)} / Now : {DateTime.Now}");

            try
            {
                using (runSpace = RunspaceFactory.CreateRunspace())
                {
                    runSpace.Open();

                    using (System.Management.Automation.PowerShell pwsh = System.Management.Automation.PowerShell.Create())
                    {
                        pwsh.Runspace = runSpace;
                        pwsh.AddScript(Command);
                        IAsyncResult gpcAsyncResult = pwsh.BeginInvoke();
                        _ = pwsh.EndInvoke(gpcAsyncResult);
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                //Memory Leak
                try
                {
                    runSpace = null;
                    GC.Collect();
                }
                catch { }
            }
        }
Ejemplo n.º 9
0
        private static IEnumerable <PSObject> InvokeTopLevelPowerShell(
            PowerShell powerShell,
            CancellationToken cancellationToken,
            PSCmdlet cmdlet,
            PSInvocationSettings invocationSettings,
            string errorMessageTemplate)
        {
            using (var mergedOutput = new BlockingCollection <Func <PSCmdlet, IEnumerable <PSObject> > >(s_blockingCollectionCapacity))
            {
                var asyncOutput = new PSDataCollection <PSObject>();
                EventHandler <DataAddedEventArgs> outputHandler = GetStreamForwarder <PSObject>(
                    output => mergedOutput.Add(_ => new[] { output }),
                    swallowInvalidOperationExceptions: true);

                EventHandler <DataAddedEventArgs> errorHandler = GetStreamForwarder <ErrorRecord>(
                    errorRecord => mergedOutput.Add(
                        delegate(PSCmdlet c)
                {
                    errorRecord = GetErrorRecordForRemotePipelineInvocation(errorRecord, errorMessageTemplate);
                    HandleErrorFromPipeline(c, errorRecord, powerShell);
                    return(Enumerable.Empty <PSObject>());
                }),
                    swallowInvalidOperationExceptions: true);

                EventHandler <DataAddedEventArgs> warningHandler = GetStreamForwarder <WarningRecord>(
                    warningRecord => mergedOutput.Add(
                        delegate(PSCmdlet c)
                {
                    c.WriteWarning(warningRecord.Message);
                    return(Enumerable.Empty <PSObject>());
                }),
                    swallowInvalidOperationExceptions: true);

                EventHandler <DataAddedEventArgs> verboseHandler = GetStreamForwarder <VerboseRecord>(
                    verboseRecord => mergedOutput.Add(
                        delegate(PSCmdlet c)
                {
                    c.WriteVerbose(verboseRecord.Message);
                    return(Enumerable.Empty <PSObject>());
                }),
                    swallowInvalidOperationExceptions: true);

                EventHandler <DataAddedEventArgs> debugHandler = GetStreamForwarder <DebugRecord>(
                    debugRecord => mergedOutput.Add(
                        delegate(PSCmdlet c)
                {
                    c.WriteDebug(debugRecord.Message);
                    return(Enumerable.Empty <PSObject>());
                }),
                    swallowInvalidOperationExceptions: true);

                EventHandler <DataAddedEventArgs> informationHandler = GetStreamForwarder <InformationRecord>(
                    informationRecord => mergedOutput.Add(
                        delegate(PSCmdlet c)
                {
                    c.WriteInformation(informationRecord);
                    return(Enumerable.Empty <PSObject>());
                }),
                    swallowInvalidOperationExceptions: true);

                asyncOutput.DataAdded += outputHandler;
                powerShell.Streams.Error.DataAdded       += errorHandler;
                powerShell.Streams.Warning.DataAdded     += warningHandler;
                powerShell.Streams.Verbose.DataAdded     += verboseHandler;
                powerShell.Streams.Debug.DataAdded       += debugHandler;
                powerShell.Streams.Information.DataAdded += informationHandler;

                try
                {
                    // TODO/FIXME: ETW event for PowerShell invocation

                    var asyncResult = powerShell.BeginInvoke <PSObject, PSObject>(
                        input: null,
                        output: asyncOutput,
                        settings: invocationSettings,
                        callback: delegate
                    {
                        try
                        {
                            mergedOutput.CompleteAdding();
                        }
                        catch (InvalidOperationException)
                        // ignore exceptions thrown because mergedOutput.CompleteAdding was called
                        {
                        }
                    },
                        state: null);

                    using (cancellationToken.Register(powerShell.Stop))
                    {
                        try
                        {
                            foreach (Func <PSCmdlet, IEnumerable <PSObject> > mergedOutputItem in mergedOutput.GetConsumingEnumerable())
                            {
                                foreach (PSObject outputObject in mergedOutputItem(cmdlet))
                                {
                                    yield return(outputObject);
                                }
                            }
                        }
                        finally
                        {
                            mergedOutput.CompleteAdding();
                            powerShell.EndInvoke(asyncResult);
                        }
                    }
                }
                finally
                {
                    asyncOutput.DataAdded -= outputHandler;
                    powerShell.Streams.Error.DataAdded       -= errorHandler;
                    powerShell.Streams.Warning.DataAdded     -= warningHandler;
                    powerShell.Streams.Verbose.DataAdded     -= verboseHandler;
                    powerShell.Streams.Debug.DataAdded       -= debugHandler;
                    powerShell.Streams.Information.DataAdded -= informationHandler;
                }
            }
        }
Ejemplo n.º 10
0
        private static IEnumerable <PSObject> InvokeTopLevelPowerShell(PowerShell powerShell, CancellationToken cancellationToken, PSCmdlet cmdlet, PSInvocationSettings invocationSettings, string errorMessageTemplate)
        {
            Action <PSObject>      action        = null;
            Action <ErrorRecord>   action1       = null;
            Action <WarningRecord> action2       = null;
            Action <VerboseRecord> action3       = null;
            Action <DebugRecord>   action4       = null;
            AsyncCallback          asyncCallback = null;

            using (BlockingCollection <Func <PSCmdlet, IEnumerable <PSObject> > > funcs = new BlockingCollection <Func <PSCmdlet, IEnumerable <PSObject> > >(RemoteDiscoveryHelper.BlockingCollectionCapacity))
            {
                PSDataCollection <PSObject> pSObjects = new PSDataCollection <PSObject>();
                if (action == null)
                {
                    action = (PSObject output) => funcs.Add((PSCmdlet argument0) =>
                    {
                        PSObject[] pSObjectArray = new PSObject[1];
                        pSObjectArray[0]         = output;
                        return(pSObjectArray);
                    }
                                                            );
                }
                EventHandler <DataAddedEventArgs> streamForwarder = RemoteDiscoveryHelper.GetStreamForwarder <PSObject>(action, true);
                if (action1 == null)
                {
                    action1 = (ErrorRecord errorRecord) => funcs.Add((PSCmdlet c) =>
                    {
                        errorRecord = RemoteDiscoveryHelper.GetErrorRecordForRemotePipelineInvocation(errorRecord, errorMessageTemplate);
                        RemoteDiscoveryHelper.HandleErrorFromPipeline(c, errorRecord, powerShell);
                        return(Enumerable.Empty <PSObject>());
                    }
                                                                     );
                }
                EventHandler <DataAddedEventArgs> eventHandler = RemoteDiscoveryHelper.GetStreamForwarder <ErrorRecord>(action1, true);
                if (action2 == null)
                {
                    action2 = (WarningRecord warningRecord) => funcs.Add((PSCmdlet c) =>
                    {
                        c.WriteWarning(warningRecord.Message);
                        return(Enumerable.Empty <PSObject>());
                    }
                                                                         );
                }
                EventHandler <DataAddedEventArgs> streamForwarder1 = RemoteDiscoveryHelper.GetStreamForwarder <WarningRecord>(action2, true);
                if (action3 == null)
                {
                    action3 = (VerboseRecord verboseRecord) => funcs.Add((PSCmdlet c) =>
                    {
                        c.WriteVerbose(verboseRecord.Message);
                        return(Enumerable.Empty <PSObject>());
                    }
                                                                         );
                }
                EventHandler <DataAddedEventArgs> eventHandler1 = RemoteDiscoveryHelper.GetStreamForwarder <VerboseRecord>(action3, true);
                if (action4 == null)
                {
                    action4 = (DebugRecord debugRecord) => funcs.Add((PSCmdlet c) =>
                    {
                        c.WriteDebug(debugRecord.Message);
                        return(Enumerable.Empty <PSObject>());
                    }
                                                                     );
                }
                EventHandler <DataAddedEventArgs> streamForwarder2 = RemoteDiscoveryHelper.GetStreamForwarder <DebugRecord>(action4, true);
                pSObjects.DataAdded += streamForwarder;
                powerShell.Streams.Error.DataAdded   += eventHandler;
                powerShell.Streams.Warning.DataAdded += streamForwarder1;
                powerShell.Streams.Verbose.DataAdded += eventHandler1;
                powerShell.Streams.Debug.DataAdded   += streamForwarder2;
                try
                {
                    PowerShell powerShell1 = powerShell;
                    object     obj         = null;
                    PSDataCollection <PSObject> pSObjects1          = pSObjects;
                    PSInvocationSettings        pSInvocationSetting = invocationSettings;
                    if (asyncCallback == null)
                    {
                        asyncCallback = (IAsyncResult param0) =>
                        {
                            try
                            {
                                funcs.CompleteAdding();
                            }
                            catch (InvalidOperationException invalidOperationException)
                            {
                            }
                        }
                        ;
                    }
                    IAsyncResult asyncResult = powerShell1.BeginInvoke <PSObject, PSObject>((PSDataCollection <PSObject>)obj, pSObjects1, pSInvocationSetting, asyncCallback, null);
                    CancellationTokenRegistration cancellationTokenRegistration = cancellationToken.Register(new Action(powerShell.Stop));
                    try
                    {
                        try
                        {
                            foreach (Func <PSCmdlet, IEnumerable <PSObject> > func in funcs)
                            {
                                IEnumerator <PSObject> enumerator = func(cmdlet).GetEnumerator();
                                using (enumerator)
                                {
                                    while (enumerator.MoveNext())
                                    {
                                        yield return(enumerator.Current);
                                    }
                                }
                            }
                        }
                        finally
                        {
                            funcs.CompleteAdding();
                            powerShell.EndInvoke(asyncResult);
                        }
                    }
                    finally
                    {
                        cancellationTokenRegistration.Dispose();
                    }
                }
                finally
                {
                    pSObjects.DataAdded -= streamForwarder;
                    powerShell.Streams.Error.DataAdded   -= eventHandler;
                    powerShell.Streams.Warning.DataAdded -= streamForwarder1;
                    powerShell.Streams.Verbose.DataAdded -= eventHandler1;
                    powerShell.Streams.Debug.DataAdded   -= streamForwarder2;
                }
            }
        }
        private void HandleRunspaceCreated(object sender, RunspaceCreatedEventArgs args)
        {
            try
            {
                string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                args.Runspace.ExecutionContext.EngineSessionState.SetLocation(folderPath);
            }
            catch (ArgumentException ex)
            {
            }
            catch (ProviderNotFoundException ex)
            {
            }
            catch (DriveNotFoundException ex)
            {
            }
            catch (ProviderInvocationException ex)
            {
            }
            Command command = (Command)null;

            if (!string.IsNullOrEmpty(this.configData.StartupScript))
            {
                command = new Command(this.configData.StartupScript, false, false);
            }
            else if (!string.IsNullOrEmpty(this.configData.InitializationScriptForOutOfProcessRunspace))
            {
                command = new Command(this.configData.InitializationScriptForOutOfProcessRunspace, true, false);
            }
            if (command == null)
            {
                return;
            }
            HostInfo hostInfo = this.remoteHost.HostInfo;

            command.MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
            PowerShell powershell = PowerShell.Create();

            powershell.AddCommand(command).AddCommand("out-default");
            IAsyncResult asyncResult = new ServerPowerShellDriver(powershell, (PowerShell)null, true, Guid.Empty, this.InstanceId, this, args.Runspace.ApartmentState, hostInfo, RemoteStreamOptions.AddInvocationInfo, false, args.Runspace).Start();

            powershell.EndInvoke(asyncResult);
            ArrayList dollarErrorVariable = (ArrayList)powershell.Runspace.GetExecutionContext.DollarErrorVariable;

            if (dollarErrorVariable.Count > 0)
            {
                string str = (dollarErrorVariable[0] as ErrorRecord).ToString();
                throw ServerRunspacePoolDriver.tracer.NewInvalidOperationException("RemotingErrorIdStrings", PSRemotingErrorId.StartupScriptThrewTerminatingError.ToString(), (object)str);
            }
            if (this.localRunspacePool.RunspacePoolStateInfo.State != RunspacePoolState.Opening)
            {
                return;
            }
            object valueToConvert = args.Runspace.SessionStateProxy.PSVariable.GetValue("global:PSApplicationPrivateData");

            if (valueToConvert == null)
            {
                return;
            }
            this.applicationPrivateData = (PSPrimitiveDictionary)LanguagePrimitives.ConvertTo(valueToConvert, typeof(PSPrimitiveDictionary), true, (IFormatProvider)CultureInfo.InvariantCulture, (TypeTable)null);
        }
Ejemplo n.º 12
0
        public DataTable Run_Table(string Command)
        {
            string[] PrintCommandLines = Command.Split(new string[] { "\n" }, StringSplitOptions.None);

            //NCCFramework.Util.Logger.Debug(ref logger, $@"실행전 : Command = {string.Join("\r\n", PrintCommandLines)} / Now : {DateTime.Now}");

            DataTable _ret = new DataTable();

            try
            {
                using (runSpace = RunspaceFactory.CreateRunspace())
                {
                    runSpace.Open();

                    using (System.Management.Automation.PowerShell pwsh = System.Management.Automation.PowerShell.Create())
                    {
                        pwsh.Runspace = runSpace;
                        pwsh.AddScript(Command);
                        IAsyncResult gpcAsyncResult = pwsh.BeginInvoke();

                        using (PSDataCollection <PSObject> ps_result = pwsh.EndInvoke(gpcAsyncResult))
                        {
                            foreach (PSObject psObject in ps_result)
                            {
                                DataRow row = _ret.NewRow();

                                foreach (PSPropertyInfo prop in psObject.Properties)
                                {
                                    if (prop != null)
                                    {
                                        if (prop.TypeNameOfValue.ToUpper().Contains("STRING[]"))
                                        {
                                            if (!_ret.Columns.Contains(prop.Name))
                                            {
                                                _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                            }
                                            string temp_prop_value = string.Empty;

                                            for (int temp_i = 0; prop.Value != null && temp_i < ((string[])prop.Value).Length; temp_i++)
                                            {
                                                temp_prop_value += ((string[])prop.Value)[temp_i] + ", ";
                                            }

                                            if (temp_prop_value.EndsWith(", "))
                                            {
                                                temp_prop_value = temp_prop_value.Substring(0, temp_prop_value.Length - 2);
                                            }

                                            row[prop.Name] = temp_prop_value;
                                        }
                                        else if (prop.TypeNameOfValue.ToUpper().Contains("DICTIONARY"))
                                        {
                                            if (!_ret.Columns.Contains(prop.Name))
                                            {
                                                _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                            }
                                            string temp_prop_value = string.Empty;

                                            row[prop.Name] = temp_prop_value;
                                        }
                                        else if (prop.TypeNameOfValue.ToUpper().Contains("NULLABLE"))
                                        {
                                            if (!_ret.Columns.Contains(prop.Name))
                                            {
                                                _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                            }

                                            try
                                            {
                                                row[prop.Name] = (prop.Value == null) ? "" : prop.Value;
                                            }
                                            catch
                                            {
                                                row[prop.Name] = "";
                                            }
                                        }
                                        else if (prop.TypeNameOfValue.ToUpper().Contains("INT"))
                                        {
                                            if (!_ret.Columns.Contains(prop.Name))
                                            {
                                                _ret.Columns.Add(new DataColumn(prop.Name, typeof(long)));
                                            }

                                            row[prop.Name] = prop.Value;
                                        }
                                        else
                                        {
                                            if (!_ret.Columns.Contains(prop.Name))
                                            {
                                                _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                            }

                                            try
                                            {
                                                row[prop.Name] = (prop.Value == null) ? "" : prop.Value;
                                            }
                                            catch
                                            {
                                                row[prop.Name] = "";
                                            }
                                        }
                                    }
                                }

                                _ret.Rows.Add(row);
                            }
                        }
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                //Memory Leak
                try
                {
                    runSpace = null;
                    GC.Collect();
                }
                catch { }
            }

            return(_ret);
        }
Ejemplo n.º 13
0
        public DataTable Run_Table(List <string> Commands)
        {
            DataTable _ret = new DataTable();

            try
            {
                using (runSpace = RunspaceFactory.CreateRunspace())
                {
                    runSpace.Open();

                    using (System.Management.Automation.PowerShell pwsh = System.Management.Automation.PowerShell.Create())
                    {
                        pwsh.Runspace = runSpace;

                        bool IsAddScript = false;
                        foreach (string Command in Commands ?? Enumerable.Empty <string>())
                        {
                            if (!string.IsNullOrEmpty(Command))
                            {
                                pwsh.AddScript(Command);
                                IsAddScript = true;
                            }
                        }

                        if (IsAddScript)
                        {
                            IAsyncResult gpcAsyncResult = pwsh.BeginInvoke();

                            using (PSDataCollection <PSObject> ps_result = pwsh.EndInvoke(gpcAsyncResult))
                            {
                                foreach (PSObject psObject in ps_result)
                                {
                                    // Manual(수동풀) 일시 psObject value == Null
                                    if (psObject != null)
                                    {
                                        DataRow row = _ret.NewRow();
                                        foreach (PSPropertyInfo prop in psObject.Properties)
                                        {
                                            if (prop != null)
                                            {
                                                if (prop.TypeNameOfValue.ToUpper().Contains("STRING[]"))
                                                {
                                                    if (!_ret.Columns.Contains(prop.Name))
                                                    {
                                                        _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                                    }
                                                    string temp_prop_value = string.Empty;

                                                    for (int temp_i = 0; prop.Value != null && temp_i < ((string[])prop.Value).Length; temp_i++)
                                                    {
                                                        temp_prop_value += ((string[])prop.Value)[temp_i] + ", ";
                                                    }

                                                    if (temp_prop_value.EndsWith(", "))
                                                    {
                                                        temp_prop_value = temp_prop_value.Substring(0, temp_prop_value.Length - 2);
                                                    }

                                                    row[prop.Name] = temp_prop_value;
                                                }
                                                else if (prop.TypeNameOfValue.ToUpper().Contains("DICTIONARY"))
                                                {
                                                    if (!_ret.Columns.Contains(prop.Name))
                                                    {
                                                        _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                                    }
                                                    string temp_prop_value = string.Empty;

                                                    row[prop.Name] = temp_prop_value;
                                                }
                                                else if (prop.TypeNameOfValue.ToUpper().Contains("NULLABLE"))
                                                {
                                                    if (!_ret.Columns.Contains(prop.Name))
                                                    {
                                                        _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                                    }

                                                    try
                                                    {
                                                        row[prop.Name] = (prop.Value == null) ? "" : prop.Value;
                                                    }
                                                    catch
                                                    {
                                                        row[prop.Name] = "";
                                                    }
                                                }
                                                else if (prop.TypeNameOfValue.ToUpper().Contains("INT"))
                                                {
                                                    if (!_ret.Columns.Contains(prop.Name))
                                                    {
                                                        _ret.Columns.Add(new DataColumn(prop.Name, typeof(long)));
                                                    }

                                                    row[prop.Name] = prop.Value;
                                                }
                                                else
                                                {
                                                    if (!_ret.Columns.Contains(prop.Name))
                                                    {
                                                        _ret.Columns.Add(new DataColumn(prop.Name, typeof(string)));
                                                    }

                                                    try
                                                    {
                                                        row[prop.Name] = (prop.Value == null) ? "" : prop.Value;
                                                    }
                                                    catch
                                                    {
                                                        row[prop.Name] = "";
                                                    }
                                                }
                                            }
                                        }
                                        _ret.Rows.Add(row);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                //Memory Leak
                try
                {
                    runSpace = null;
                    GC.Collect();
                }
                catch { }
            }

            return(_ret);
        }