Tworzenie ograniczonego obszaru działaniaCreating a constrained runspace

Ze względu na wydajność lub bezpieczeństwo możesz chcieć ograniczyć polecenia programu Windows PowerShell dostępne dla aplikacji hosta.For performance or security reasons, you might want to restrict the Windows PowerShell commands available to your host application. W tym celu należy utworzyć puste System.Management.Automation.Runspaces.Initialsessionstate przez wywołanie System.Management.Automation.Runspaces.Initialsessionstate. Utwórz * metodę, a następnie Dodaj tylko te polecenia, które mają być dostępne.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.

Użycie obszaru działania, który ładuje tylko określone polecenia, zapewnia znacznie lepszą wydajność.Using a runspace that loads only the commands that you specify provides significantly improved performance.

Używasz metod klasy System. Management. Automation. obszarami działania. Sessionstatecmdletentry do definiowania poleceń cmdlet dla stanu sesji początkowej.You use the methods of the System.Management.Automation.Runspaces.Sessionstatecmdletentry class to define cmdlets for the initial session state.

Polecenia można także tworzyć jako prywatne.You can also make commands private. Polecenia prywatne mogą być używane przez aplikację hosta, ale nie przez użytkowników aplikacji.Private commands can be used by the host application, but not by users of the application.

Dodawanie poleceń do pustego obszaru działaniaAdding commands to an empty runspace

Poniższy przykład ilustruje sposób tworzenia pustych InitialSessionState i dodawania do nich poleceń.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();
    }
  }
}

Udostępnianie poleceń jako prywatnychMaking commands private

Możesz również ustawić polecenie jako prywatne, ustawiając dla niego właściwość System. Management. Automation. CommandInfo. Visibility do 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 . Aplikacja hosta i inne polecenia mogą wywołać to polecenie, ale użytkownik aplikacji nie może.The host application and other commands can call that command, but the user of the application cannot. W poniższym przykładzie polecenie GET-ChildItem jest prywatne.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();

Zobacz teżSee Also

Tworzenie elementu InitialSessionStateCreating an InitialSessionState