Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Por motivos de rendimiento o seguridad, puede restringir los Windows PowerShell disponibles para la aplicación host. Para ello, cree un objeto System.Management.Automation.Runspaces.Initialsessionstate vacío mediante una llamada al método System.Management.Automation.Runspaces.Initialsessionstate.Create* y agregue solo los comandos que desee que estén disponibles.
El uso de un espacio de ejecución que carga solo los comandos que especifique proporciona un rendimiento considerablemente mejorado.
Use los métodos de la clase System.Management.Automation.Runspaces.Sessionstatecmdletentry para definir cmdlets para el estado de sesión inicial.
También puede hacer que los comandos sea privado. La aplicación host puede usar comandos privados, pero no los usuarios de la aplicación.
Agregar comandos a un espacio de ejecución vacío
En el ejemplo siguiente se muestra cómo crear un InitialSessionState vacío y agregarle comandos.
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();
}
}
}
Hacer que los comandos son privados
También puede hacer que un comando sea privado estableciendo su propiedad System.Management.Automation.Commandinfo.Visibility en 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. En el ejemplo siguiente, el comando Get-ChildItem es privado.
defaultSessionState = InitialSessionState.CreateDefault();
commandIndex = GetIndexOfEntry(defaultSessionState.Commands, "get-childitem");
defaultSessionState.Commands[commandIndex].Visibility = SessionStateEntryVisibility.Private;
this.runspace = RunspaceFactory.CreateRunspace(defaultSessionState);
this.runspace.Open();