/// <summary> /// Asynchronously executes a script using the current Context. /// </summary> /// <param name="script">Script to execute.</param> /// <returns>An InvocationResult object representing the results of the execution.</returns> public PSInvocationResult GetResult(string script) { if (script == null) { throw new ArgumentNullException("script"); } if (_variableKeys != null) { throw new InvalidOperationException(); } #if PSLEGACY _variableKeys = LinqEmul.ToArray <object>(LinqEmul.Cast <object>(Variables.Keys)); #else _variableKeys = Variables.Keys.Cast <object>().ToArray(); #endif try { using (Runspace runspace = (Host == null) ? ((_configuration == null) ? RunspaceFactory.CreateRunspace() : RunspaceFactory.CreateRunspace(_configuration)) : ((_configuration == null) ? RunspaceFactory.CreateRunspace(Host) : RunspaceFactory.CreateRunspace(Host, _configuration))) { if (ApartmentState.HasValue) { runspace.ApartmentState = ApartmentState.Value; } if (ThreadOptions.HasValue) { runspace.ThreadOptions = ThreadOptions.Value; } runspace.Open(); foreach (object key in _variableKeys) { string s = (key is string) ? key as string : key.ToString(); if (Variables[key] != null && String.Compare(s, "this", true) != 0 && String.Compare(s, "SynchronizedData", true) != 0) { runspace.SessionStateProxy.SetVariable(s, Variables[key]); } } runspace.SessionStateProxy.SetVariable("this", This); runspace.SessionStateProxy.SetVariable("SynchronizedData", SynchronizedData); if (InitialLocation.Length > 0) { runspace.SessionStateProxy.Path.SetLocation(InitialLocation); } using (PowerShell powerShell = PowerShell.Create()) { powerShell.Runspace = runspace; return(new PSInvocationResult(script, this, powerShell, _variableKeys)); } } } finally { _variableKeys = null; } }
/// <summary> /// Method which is intended for handling source <seealso cref="EventHandler{TEventArgs}"/> events. /// </summary> /// <param name="sender">Object which raised the event.</param> /// <param name="e">Information about the event.</param> public void EventHandler(object sender, TEventArgs e) { #if PSLEGACY object[] variableKeys = LinqEmul.ToArray <object>(LinqEmul.Cast <object>(Variables.Keys)); #else object[] variableKeys = Variables.Keys.Cast <object>().ToArray(); #endif Dictionary <object, object> variables = new Dictionary <object, object>(); IDictionaryEnumerator enumerator = Variables.GetEnumerator(); try { while (enumerator.MoveNext()) { variables.Add(enumerator.Key, enumerator.Value); } } finally { if (enumerator is IDisposable) { (enumerator as IDisposable).Dispose(); } } PSHost host = Host; RunspaceConfiguration configuration = Configuration; ApartmentState? apartmentState = ApartmentState; PSThreadOptions? threadOptions = ThreadOptions; string initialLocation = InitialLocation; using (Runspace runspace = (host == null) ? ((configuration == null) ? RunspaceFactory.CreateRunspace() : RunspaceFactory.CreateRunspace(configuration)) : ((configuration == null) ? RunspaceFactory.CreateRunspace(host) : RunspaceFactory.CreateRunspace(host, configuration))) { if (apartmentState.HasValue) { runspace.ApartmentState = apartmentState.Value; } if (threadOptions.HasValue) { runspace.ThreadOptions = threadOptions.Value; } runspace.Open(); foreach (object key in variables.Keys) { string s = (key is string) ? key as string : key.ToString(); if (Variables[key] != null && String.Compare(s, "this", true) != 0 && String.Compare(s, "SynchronizedData", true) != 0) { runspace.SessionStateProxy.SetVariable(s, Variables[key]); } } runspace.SessionStateProxy.SetVariable("this", This); runspace.SessionStateProxy.SetVariable("SynchronizedData", SynchronizedData); if (initialLocation.Length > 0) { runspace.SessionStateProxy.Path.SetLocation(initialLocation); } using (PowerShell powerShell = PowerShell.Create()) { powerShell.Runspace = runspace; RaiseEventHandlerInvoked(sender, e, new PSInvocationResult(HandlerScript.ToString(), this, powerShell, variableKeys, sender, e)); } } }
internal static string GetRegexPattern(UnicodeCategory?categories, IEnumerable <char> otherChars, bool notMatch, bool noBrackets) { List <string> patterns = new List <string>(); if (categories.HasValue) { foreach (UnicodeCategory uc in Enum.GetValues(typeof(UnicodeCategory))) { string pattern; switch (uc) { case UnicodeCategory.UppercaseLetter: pattern = @"\p{Lu}"; break; case UnicodeCategory.LowercaseLetter: pattern = @"\p{Ll}"; break; case UnicodeCategory.TitlecaseLetter: pattern = @"\p{Lt}"; break; case UnicodeCategory.ModifierLetter: pattern = @"\p{Lm}"; break; case UnicodeCategory.OtherLetter: pattern = @"\p{Lo}"; break; case UnicodeCategory.NonSpacingMark: pattern = @"\p{Mn}"; break; case UnicodeCategory.SpacingCombiningMark: pattern = @"\p{Mc}"; break; case UnicodeCategory.EnclosingMark: pattern = @"\p{Me}"; break; case UnicodeCategory.DecimalDigitNumber: pattern = @"\p{Nd}"; break; case UnicodeCategory.LetterNumber: pattern = @"\p{Nl}"; break; case UnicodeCategory.OtherNumber: pattern = @"\p{No}"; break; case UnicodeCategory.SpaceSeparator: pattern = @"\p{Zs}"; break; case UnicodeCategory.LineSeparator: pattern = @"\p{Zl}"; break; case UnicodeCategory.ParagraphSeparator: pattern = @"\p{Zp}"; break; case UnicodeCategory.Control: pattern = @"\p{Cc}"; break; case UnicodeCategory.Format: pattern = @"\p{Cf}"; break; case UnicodeCategory.Surrogate: pattern = @"\p{Cs}"; break; case UnicodeCategory.PrivateUse: pattern = @"\p{Co}"; break; case UnicodeCategory.ConnectorPunctuation: pattern = @"\p{Pc}"; break; case UnicodeCategory.DashPunctuation: pattern = @"\p{Pd}"; break; case UnicodeCategory.OpenPunctuation: pattern = @"\p{Ps}"; break; case UnicodeCategory.ClosePunctuation: pattern = @"\p{Pe}"; break; case UnicodeCategory.InitialQuotePunctuation: pattern = @"\p{Pi}"; break; case UnicodeCategory.FinalQuotePunctuation: pattern = @"\p{Pf}"; break; case UnicodeCategory.OtherPunctuation: pattern = @"\p{Po}"; break; case UnicodeCategory.MathSymbol: pattern = @"\p{Sm}"; break; case UnicodeCategory.CurrencySymbol: pattern = @"\p{Sc}"; break; case UnicodeCategory.ModifierSymbol: pattern = @"\p{Sk}"; break; case UnicodeCategory.OtherSymbol: pattern = @"\p{So}"; break; default: pattern = @"\p{Cn}"; break; } if (!patterns.Contains(pattern)) { patterns.Add(pattern); } } } #if PSLEGACY if (otherChars != null && LinqEmul.Any <char>(otherChars)) #else if (otherChars != null && otherChars.Any()) #endif { Regex regex; if (patterns.Count == 1) { regex = new Regex(patterns[0], RegexOptions.Compiled); } else if (patterns.Count > 1) { regex = new Regex(String.Format("[{0}]", String.Join("", patterns.ToArray())), RegexOptions.Compiled); } else { regex = null; } if (regex == null) { foreach (char c in otherChars) { int i = (int)c; string pattern = (i > 127) ? String.Format(@"\u{0:X4}", (int)c) : Regex.Escape(new String(c, 1)); if (!patterns.Contains(pattern)) { patterns.Add(pattern); } } } else { foreach (char c in otherChars) { if (regex.IsMatch(c.ToString())) { continue; } int i = (int)c; string pattern = (i > 127) ? String.Format(@"\u{0:X4}", (int)c) : Regex.Escape(new String(c, 1)); if (!patterns.Contains(pattern)) { patterns.Add(pattern); } } } } if (notMatch) { if (noBrackets) { return(String.Format("^{0}", String.Join("", patterns.ToArray()))); } return(String.Format("[^{0}]", String.Join("", patterns.ToArray()))); } if (patterns.Count == 0) { return(""); } if (patterns.Count == 1) { return(patterns[0]); } if (noBrackets) { return(String.Join("", patterns.ToArray())); } return(String.Format("[{0}]", String.Join("", patterns.ToArray()))); }