internal static RegistryKey GetVersionRootKey(RegistryKey rootKey, string psVersion) { using (PSSnapInReader._tracer.TraceMethod()) { string keyForMajorVersion = PSVersionInfo.GetRegisterVersionKeyForMajorVersion(psVersion); return(rootKey.OpenSubKey(keyForMajorVersion) ?? throw PSSnapInReader._tracer.NewArgumentException(nameof(psVersion), "MshSnapinInfo", "SpecifiedVersionNotFound", (object)keyForMajorVersion)); } }
internal static RegistryKey GetVersionRootKey(RegistryKey rootKey, string psVersion) { string registerVersionKeyForSnapinDiscovery = PSVersionInfo.GetRegisterVersionKeyForSnapinDiscovery(psVersion); RegistryKey key = rootKey.OpenSubKey(registerVersionKeyForSnapinDiscovery); if (key == null) { throw PSTraceSource.NewArgumentException("psVersion", "MshSnapinInfo", "SpecifiedVersionNotFound", new object[] { registerVersionKeyForSnapinDiscovery }); } return(key); }
internal static Collection <PSSnapInInfo> ReadAll() { Collection <PSSnapInInfo> collection = new Collection <PSSnapInInfo>(); RegistryKey monadRootKey = GetMonadRootKey(); string[] subKeyNames = monadRootKey.GetSubKeyNames(); if (subKeyNames != null) { Collection <string> collection2 = new Collection <string>(); foreach (string str in subKeyNames) { string registerVersionKeyForSnapinDiscovery = PSVersionInfo.GetRegisterVersionKeyForSnapinDiscovery(str); if (string.IsNullOrEmpty(registerVersionKeyForSnapinDiscovery)) { registerVersionKeyForSnapinDiscovery = str; } if (!collection2.Contains(registerVersionKeyForSnapinDiscovery)) { collection2.Add(registerVersionKeyForSnapinDiscovery); } } foreach (string str3 in collection2) { if (!string.IsNullOrEmpty(str3) && MeetsVersionFormat(str3)) { Collection <PSSnapInInfo> collection3 = null; try { collection3 = ReadAll(monadRootKey, str3); } catch (SecurityException) { } catch (ArgumentException) { } if (collection3 != null) { foreach (PSSnapInInfo info in collection3) { collection.Add(info); } } } } } return(collection); }
internal static PSPrimitiveDictionary CloneAndAddPSVersionTable(PSPrimitiveDictionary originalHash) { if ((originalHash != null) && originalHash.ContainsKey("PSVersionTable")) { return((PSPrimitiveDictionary)originalHash.Clone()); } PSPrimitiveDictionary dictionary = originalHash; if (originalHash != null) { dictionary = (PSPrimitiveDictionary)originalHash.Clone(); } else { dictionary = new PSPrimitiveDictionary(); } PSPrimitiveDictionary dictionary2 = new PSPrimitiveDictionary(PSVersionInfo.GetPSVersionTable()); dictionary.Add("PSVersionTable", dictionary2); return(dictionary); }
/// <summary> /// Add the variables that must always be present in a SessionState instance... /// </summary> internal void InitializeFixedVariables() { // // BUGBUG // // String resources for aliases are currently associated with Runspace init // // $Host PSVariable v = new PSVariable( SpecialVariables.Host, ExecutionContext.EngineHostInterface, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.PSHostDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $HOME - indicate where a user's home directory is located in the file system. // -- %USERPROFILE% on windows // -- %HOME% on unix string home = Environment.GetEnvironmentVariable(Platform.CommonEnvVariableNames.Home) ?? string.Empty; v = new PSVariable(SpecialVariables.Home, home, ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope, RunspaceInit.HOMEDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $ExecutionContext v = new PSVariable(SpecialVariables.ExecutionContext, ExecutionContext.EngineIntrinsics, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.ExecutionContextDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PSVersionTable v = new PSVariable(SpecialVariables.PSVersionTable, PSVersionInfo.GetPSVersionTable(), ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.PSVersionTableDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PSEdition v = new PSVariable(SpecialVariables.PSEdition, PSVersionInfo.PSEditionValue, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.PSEditionDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PID Process currentProcess = Process.GetCurrentProcess(); v = new PSVariable( SpecialVariables.PID, currentProcess.Id, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.PIDDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PSCulture v = new PSCultureVariable(); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PSUICulture v = new PSUICultureVariable(); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $? v = new QuestionMarkVariable(this.ExecutionContext); this.GlobalScope.SetVariableForce(v, this); // $ShellId - if there is no runspace config, use the default string string shellId = ExecutionContext.ShellID; v = new PSVariable(SpecialVariables.ShellId, shellId, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.MshShellIdDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); // $PSHOME // This depends on the shellId. If we cannot read the application base // registry key, set the variable to empty string string applicationBase = ""; try { applicationBase = Utils.GetApplicationBase(shellId); } catch (SecurityException) { } v = new PSVariable(SpecialVariables.PSHome, applicationBase, ScopedItemOptions.Constant | ScopedItemOptions.AllScope, RunspaceInit.PSHOMEDescription); this.GlobalScope.SetVariable(v.Name, v, false, true, this, CommandOrigin.Internal, fastPath: true); }