Aracılığıyla paylaş


Kısıtlanmış bir çalışma alanı oluşturma

Performans veya güvenlik nedenleriyle, konak uygulamanızda kullanılabilen Windows PowerShell komutlarını kısıtlamak isteyebilirsiniz. Bunu yapmak için, System.Management.Automation.Runspaces.InitialSessionState* yöntemini çağırarak boş bir System.Management.Automation.Runspaces.InitialSessionState oluşturur ve ardından yalnızca kullanılabilir olmasını istediğiniz komutları eklersiniz.

Yalnızca belirttiğiniz komutları yükleyen bir çalışma alanı kullanmak önemli ölçüde iyileştirilmiş performans sağlar.

İlk oturum durumu için cmdlet'leri tanımlamak için System.Management.Automation.Runspaces.SessionStateCmdletEntry sınıfının yöntemlerini kullanırsınız.

Komutları özel de yapabilirsiniz. Özel komutlar konak uygulama tarafından kullanılabilir, ancak uygulamanın kullanıcıları tarafından kullanılamaz.

Boş bir çalışma alanı için komut ekleme

Aşağıdaki örnekte, boş bir InitialSessionState oluşturma ve komut ekleme işlemleri gösterilmektedir.

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();
    }
  }
}

Komutları özel yapma

System.Management.Automation.CommandInfo.Visibility özelliğini System.Management.Automation.SessionStateEntryVisibility Özelolarak ayarlayarak da komutu özel yapabilirsiniz. Konak uygulaması ve diğer komutlar bu komutu çağırabilir, ancak uygulamanın kullanıcısı çağıramaz. Aşağıdaki örnekte Get-ChildItem komutu özeldir.

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

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

Ayrıca Bkz.

InitialSessionState Oluşturma