Creación de un espacio de ejecución restringidoCreating a constrained runspace

Por motivos de rendimiento o seguridad, es posible que desee restringir los comandos de Windows PowerShell disponibles para la aplicación host.For performance or security reasons, you might want to restrict the Windows PowerShell commands available to your host application. Para ello, cree un tialsessionstate vacío System.Management.Automation.Runspaces.Ini llamando a la System.Management.Automation.Runspaces.Initialsessionstate. Cree el método * y, a continuación, agregue únicamente los comandos que desee que estén disponibles.To do this you create an empty System.Management.Automation.Runspaces.Initialsessionstate by calling the System.Management.Automation.Runspaces.Initialsessionstate.Create* method, and then add only the commands you want available.

El uso de un espacio de ejecución que solo carga los comandos especificados proporciona un rendimiento significativamente mejorado.Using a runspace that loads only the commands that you specify provides significantly improved performance.

Los métodos de la clase System. Management. Automation. espacios de Sessionstatecmdletentry se usan para definir cmdlets para el estado de sesión inicial.You use the methods of the System.Management.Automation.Runspaces.Sessionstatecmdletentry class to define cmdlets for the initial session state.

También puede hacer que los comandos sean privados.You can also make commands private. Los comandos privados se pueden usar en la aplicación host, pero no en los usuarios de la aplicación.Private commands can be used by the host application, but not by users of the application.

Agregar comandos a un espacio de ejecución vacíoAdding commands to an empty runspace

En el ejemplo siguiente se muestra cómo crear un InitialSessionState vacío y cómo agregarle comandos.The following example demonstrates how to create an empty InitialSessionState and add commands to it.

namespace Microsoft.Samples.PowerShell.Runspaces
{
  using System;
  using System.Collections.ObjectModel;
  using System.Management.Automation;
  using System.Management.Automation.Runspaces;
  using Microsoft.PowerShell.Commands;
  using PowerShell = System.Management.Automation.PowerShell;

  /// <summary>
  /// This class contains the Main entry point for the application.
  /// </summary>
  internal class Runspace10b
  {
    /// <summary>
    /// This sample shows how to create an empty initial session state,
    /// how to add commands to the session state, and then how to create a
    /// runspace that has only those two commands. A PowerShell object
    /// is used to run the Get-Command cmdlet to show that only two commands
    /// are available.
    /// </summary>
    /// <param name="args">Parameter not used.</param>
    private static void Main(string[] args)
    {
      // Create an empty InitialSessionState and then add two commands.
      InitialSessionState iss = InitialSessionState.Create();

      // Add the Get-Process and Get-Command cmdlets to the session state.
      SessionStateCmdletEntry ssce1 = new SessionStateCmdletEntry(
                                                            "get-process",
                                                            typeof(GetProcessCommand),
                                                            null);
      iss.Commands.Add(ssce1);

      SessionStateCmdletEntry ssce2 = new SessionStateCmdletEntry(
                                                            "get-command",
                                                            typeof(GetCommandCommand),
                                                            null);
      iss.Commands.Add(ssce2);

      // Create a runspace.
      using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss))
      {
        myRunSpace.Open();
        using (PowerShell powershell = PowerShell.Create())
        {
          powershell.Runspace = myRunSpace;

          // Create a pipeline with the Get-Command command.
          powershell.AddCommand("get-command");

          Collection<PSObject> results = powershell.Invoke();

          Console.WriteLine("Verb                 Noun");
          Console.WriteLine("----------------------------");

          // Display each result object.
          foreach (PSObject result in results)
          {
            Console.WriteLine(
                             "{0,-20} {1}",
                             result.Members["verb"].Value,
                             result.Members["Noun"].Value);
          }
        }

        // Close the runspace and release any resources.
        myRunSpace.Close();
      }

      System.Console.WriteLine("Hit any key to exit...");
      System.Console.ReadKey();
    }
  }
}

Convertir comandos en privadosMaking commands private

También puede hacer que un comando sea privado, estableciendo su propiedad System. Management. Automation. Commandinfo. Visibility en System. Management. Automation. SessionStateEntryVisibility Private.You can also make a command private, by setting it's System.Management.Automation.Commandinfo.Visibility property to System.Management.Automation.SessionStateEntryVisibility Private. La aplicación host y otros comandos pueden llamar a ese comando, pero el usuario de la aplicación no puede.The host application and other commands can call that command, but the user of the application cannot. En el ejemplo siguiente, el comando Get-childitem es privado.In the following example, the Get-ChildItem command is private.

defaultSessionState = InitialSessionState.CreateDefault();
commandIndex = GetIndexOfEntry(defaultSessionState.Commands, "get-childitem");
defaultSessionState.Commands[commandIndex].Visibility = SessionStateEntryVisibility.Private;

this.runspace = RunspaceFactory.CreateRunspace(defaultSessionState);
this.runspace.Open();

Consulte tambiénSee Also

Creación de un InitialSessionStateCreating an InitialSessionState