Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet visar hur du implementerar ett värdprogram som använder en anpassad värd. I det här exemplet skapas en runspace som använder den anpassade värden och sedan används api:et System.Management.Automation.PowerShell för att köra ett skript som anropar "avsluta". Värdprogrammet tittar sedan på utdata från skriptet och skriver ut resultatet.
Det här exemplet använder standardfunktionerna i användargränssnittet som tillhandahålls av Windows PowerShell. Mer information om hur du implementerar användargränssnittsfunktionerna för en anpassad värd finns i Host02 Sample.
Krav
Det här exemplet kräver Windows PowerShell 2.0.
Demonstrerar
Skapa en anpassad värdklass som härleds från klassen System.Management.Automation.Host.PSHost.
Skapa en runspace som använder den anpassade värdklassen.
Skapa ett System.Management.Automation.PowerShell objekt som kör ett skript som anropar avsluta.
Kontrollera att rätt slutkod användes i avslutsprocessen.
Exempel 1
Följande kod visar en implementering av ett värdprogram som använder ett enkelt anpassat värdgränssnitt.
namespace Microsoft.Samples.PowerShell.Host
{
using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using PowerShell = System.Management.Automation.PowerShell;
/// <summary>
/// This class contains the Main entry point for this host application.
/// </summary>
internal class Host01
{
/// <summary>
/// Indicator to tell the host application that it should exit.
/// </summary>
private bool shouldExit;
/// <summary>
/// The exit code that the host application will use to exit.
/// </summary>
private int exitCode;
/// <summary>
/// Gets or sets a value indicating whether the
/// host application should exit.
/// </summary>
public bool ShouldExit
{
get { return this.shouldExit; }
set { this.shouldExit = value; }
}
/// <summary>
/// Gets or sets the PSHost implementation that is
/// used to tell the host application what code to use
/// when exiting.
/// </summary>
public int ExitCode
{
get { return this.exitCode; }
set { this.exitCode = value; }
}
/// <summary>
/// This sample uses a PowerShell object to run
/// a script that calls exit. The host application looks at
/// this and prints out the result.
/// </summary>
/// <param name="args">Parameter not used.</param>
private static void Main(string[] args)
{
// Create an instance of this host application class so that
// the Windows PowerShell engine will have access to the
// ShouldExit and ExitCode parameters.
Host01 me = new Host01();
// Create the host instance to use.
MyHost myHost = new MyHost(me);
// Create a runspace that uses the host object and run the
// script using a PowerShell object.
using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(myHost))
{
// Open the runspace.
myRunSpace.Open();
// Create a PowerShell object to run the script.
using (PowerShell powershell = PowerShell.Create())
{
powershell.Runspace = myRunSpace;
// Create the pipeline and run the script
// "exit (2+2)".
string script = "exit (2+2)";
powershell.AddScript(script);
powershell.Invoke(script);
}
// Check the flags and see if they were set properly.
Console.WriteLine(
"ShouldExit={0} (should be True); ExitCode={1} (should be 4)",
me.ShouldExit,
me.ExitCode);
// close the runspace to free resources.
myRunSpace.Close();
}
Console.WriteLine("Hit any key to exit...");
Console.ReadKey();
}
}
}
Exempel 2
Följande kod är implementeringen av klassen System.Management.Automation.Host.PSHost som används av det här värdprogrammet. De element som inte implementeras utlöser ett undantag eller returnerar ingenting.
namespace Microsoft.Samples.PowerShell.Host
{
using System;
using System.Globalization;
using System.Management.Automation.Host;
/// <summary>
/// This is a sample implementation of the PSHost abstract class for
/// console applications. Not all members are implemented. Those that
/// are not implemented throw a NotImplementedException exception or
/// return nothing.
/// </summary>
internal class MyHost : PSHost
{
/// <summary>
/// A reference to the PSHost implementation.
/// </summary>
private Host01 program;
/// <summary>
/// The culture information of the thread that created
/// this object.
/// </summary>
private CultureInfo originalCultureInfo =
System.Threading.Thread.CurrentThread.CurrentCulture;
/// <summary>
/// The UI culture information of the thread that created
/// this object.
/// </summary>
private CultureInfo originalUICultureInfo =
System.Threading.Thread.CurrentThread.CurrentUICulture;
/// <summary>
/// The identifier of this PSHost implementation.
/// </summary>
private Guid myId = Guid.NewGuid();
/// <summary>
/// Initializes a new instance of the MyHost class. Keep
/// a reference to the host application object so that it
/// can be informed of when to exit.
/// </summary>
/// <param name="program">
/// A reference to the host application object.
/// </param>
public MyHost(Host01 program)
{
this.program = program;
}
/// <summary>
/// Return the culture information to use. This implementation
/// returns a snapshot of the culture information of the thread
/// that created this object.
/// </summary>
public override System.Globalization.CultureInfo CurrentCulture
{
get { return this.originalCultureInfo; }
}
/// <summary>
/// Return the UI culture information to use. This implementation
/// returns a snapshot of the UI culture information of the thread
/// that created this object.
/// </summary>
public override System.Globalization.CultureInfo CurrentUICulture
{
get { return this.originalUICultureInfo; }
}
/// <summary>
/// This implementation always returns the GUID allocated at
/// instantiation time.
/// </summary>
public override Guid InstanceId
{
get { return this.myId; }
}
/// <summary>
/// Return a string that contains the name of the host implementation.
/// Keep in mind that this string may be used by script writers to
/// identify when your host is being used.
/// </summary>
public override string Name
{
get { return "MySampleConsoleHostImplementation"; }
}
/// <summary>
/// This sample does not implement a PSHostUserInterface component so
/// this property simply returns null.
/// </summary>
public override PSHostUserInterface UI
{
get { return null; }
}
/// <summary>
/// Return the version object for this application. Typically this
/// should match the version resource in the application.
/// </summary>
public override Version Version
{
get { return new Version(1, 0, 0, 0); }
}
/// <summary>
/// Not implemented by this example class. The call fails with
/// a NotImplementedException exception.
/// </summary>
public override void EnterNestedPrompt()
{
throw new NotImplementedException(
"The method or operation is not implemented.");
}
/// <summary>
/// Not implemented by this example class. The call fails
/// with a NotImplementedException exception.
/// </summary>
public override void ExitNestedPrompt()
{
throw new NotImplementedException(
"The method or operation is not implemented.");
}
/// <summary>
/// This API is called before an external application process is
/// started. Typically it is used to save state so the parent can
/// restore state that has been modified by a child process (after
/// the child exits). In this example, this functionality is not
/// needed so the method returns nothing.
/// </summary>
public override void NotifyBeginApplication()
{
return;
}
/// <summary>
/// This API is called after an external application process finishes.
/// Typically it is used to restore state that a child process may
/// have altered. In this example, this functionality is not
/// needed so the method returns nothing.
/// </summary>
public override void NotifyEndApplication()
{
return;
}
/// <summary>
/// Indicate to the host application that exit has
/// been requested. Pass the exit code that the host
/// application should use when exiting the process.
/// </summary>
/// <param name="exitCode">The exit code to use.</param>
public override void SetShouldExit(int exitCode)
{
this.program.ShouldExit = true;
this.program.ExitCode = exitCode;
}
}
}