public VerifyRule(string commandName,string argumentName,string argumentValue,PowershellType pstype)
 {
     this.commandName = commandName;
     this.argumentName = argumentName;
     this.argumentValue = argumentValue;
     this.pstype = pstype;
     matches = new List<MatchProperty>();
 }
 /// <summary>
 /// Executes arbitary commands with Parameters
 /// </summary>
 public NameValueCollection ExecuteCommand(string CommandName, NameValueCollection Parameters,PowershellType pstype, ref string ErrorOutput)
 {
     PowerShell powershell = this.MSOLPowershell;
     if (pstype == PowershellType.Live)
         powershell = this.LivePowershell;
     if (powershell == null)
         return null;
     PSCommand command = new PSCommand();
     ErrorOutput = "";
     NameValueCollection output = new NameValueCollection();
     command.AddCommand(CommandName);
     foreach(string key in Parameters)
         command.AddParameter(key,Parameters[key]);
     powershell.Commands = command;
     try
     {
         foreach (PSObject psobject in powershell.Invoke())
         {
             if (psobject != null)
             {
                 foreach (PSPropertyInfo propinfo in psobject.Properties)
                 {
                     if (propinfo.Value != null)
                     {
                         // turn strings into formatted {lists}
                         if (propinfo.Value.GetType().IsGenericType)
                         {
                             if (propinfo.Value.GetType().GetGenericTypeDefinition() == typeof(List<>))
                             {
                                 String list_output = "{";
                                 System.Collections.IList proplist = (System.Collections.IList)propinfo.Value;
                                 foreach (object obj in proplist)
                                 {
                                     list_output += PowerShellObjToString(obj) + ",";
                                 }
                                 if (list_output.EndsWith(","))
                                     list_output = list_output.Remove(list_output.Length - 1);
                                 list_output += "}";
                                 output.Add(propinfo.Name, list_output);
                             }
                             else
                                 output.Add(propinfo.Name, PowerShellObjToString(propinfo.Value));
                         }
                         else
                             output.Add(propinfo.Name, PowerShellObjToString(propinfo.Value));
                     }
                     else
                         output.Add(propinfo.Name, null);
                 }
             }
         }
         foreach (ErrorRecord err in powershell.Streams.Error.ReadAll())
         {
             ErrorOutput += "Error executing command:" + CommandName + " error:" + err.Exception.Message;
         }
         return output;
     }
     catch (Exception ex)
     {
         ErrorOutput += "Error executing command:" + CommandName + " error:" + ex.Message;
         return null;
     }
 }