Kısıtlanmış bir çalışma alanı oluşturma
Performans veya güvenlik nedenleriyle ana uygulamanızın kullanabileceği Windows PowerShell komutlarını kısıtlamak isteyebilirsiniz. Bunu yapmak için, System.Management.Automation.Runspaces.Initialsessionstate.Create* yöntemini çağırarak boş bir System.Management.Automation.Runspaces.Initialssessionstate oluşturursunuz 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, performansın önemli ölçüde artmasını sağlar.
İlk oturum durumuna ilişkin cmdlet'leri tanımlamak için System.Management.Automation.Runspaces.Sessionstatecmdletentry sınıfının yöntemlerini kullanırsınız.
Ayrıca komutları özel de yapabilirsiniz. Özel komutlar ana uygulama tarafından kullanılabilir ancak uygulamanın kullanıcıları tarafından kullanılamaz.
Boş bir çalışma alanına komutlar ekleme
Aşağıdaki örnek, boş bir InitialSessionState'in nasıl oluşturulacağını ve buna komutların nasıl ekleneceğini gösterir.
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
Ayrıca System.Management.Automation.Commandinfo.Visibility özelliğini System.Management.Automation.SessionStateEntryVisibility Private olarak ayarlayarak bir komutu özel yapabilirsiniz. Ana bilgisayar uygulaması ve diğer komutlar bu komutu çağırabilir ancak uygulamanın kullanıcısı bunu yapamaz. 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 Bakınız
BirInitialSessionState Oluşturma