Anteckning
Å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 anropar en binär cmdlet som härleds från [System.Management.Automation.Cmdlet] direkt inifrån en annan binär cmdlet, vilket gör att du kan lägga till funktionen för den anropade cmdleten till den binära cmdlet som du utvecklar. I det här exemplet anropas cmdleten Get-Process för att hämta de processer som körs på den lokala datorn. Anropet till cmdleten Get-Process motsvarar följande kommando. Det här kommandot hämtar alla processer vars namn börjar med tecknen "a" via "t".
Get-Process -Name [a-t]*
Viktigt!
Du kan bara anropa de cmdletar som härleds direkt från klassen System.Management.Automation.Cmdlet. Du kan inte anropa en cmdlet som härleds från klassen System.Management.Automation.PSCmdlet. Ett exempel finns i Så här anropar du en PSCmdlet inifrån en PSCmdlet-.
Så här anropar du en cmdlet inifrån en cmdlet
Se till att sammansättningen som definierar cmdleten som ska anropas refereras till och att lämplig
using-instruktion läggs till. I det här exemplet läggs följande namnområden till.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.I cmdletens indatabearbetningsmetod skapar du en ny instans av cmdleten som ska anropas. I det här exemplet skapas ett objekt av typen Microsoft.PowerShell.Commands.GetProcessCommand tillsammans med strängen som innehåller argumenten som används när cmdleten anropas.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };Anropa metoden System.Management.Automation.Cmdlet.Invoke* för att anropa cmdleten
Get-Process.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Exempel
I det här exemplet anropas cmdleten Get-Process inifrån metoden System.Management.Automation.Cmdlet.BeginProcessing för en cmdlet.
using System;
using System.Diagnostics;
using System.Management.Automation; // PowerShell assembly.
using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
namespace SendGreeting
{
// Declare the class as a cmdlet and specify an
// appropriate verb and noun for the cmdlet name.
[Cmdlet(VerbsCommunications.Send, "GreetingInvoke")]
public class SendGreetingInvokeCommand : Cmdlet
{
// Declare the parameters for the cmdlet.
[Parameter(Mandatory = true)]
public string Name { get; set; }
// Override the BeginProcessing method to invoke
// the Get-Process cmdlet.
protected override void BeginProcessing()
{
GetProcessCommand gp = new GetProcessCommand();
gp.Name = new string[] { "[a-t]*" };
foreach (Process p in gp.Invoke<Process>())
{
WriteVerbose(p.ToString());
}
}
// Override the ProcessRecord method to process
// the supplied user name and write out a
// greeting to the user by calling the WriteObject
// method.
protected override void ProcessRecord()
{
WriteObject("Hello " + Name + "!");
}
}
}