Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано, как вызвать двоичный командлет, производный от [System.Management.Automation.Cmdlet]
непосредственно из другого двоичного командлета, который позволяет добавить функциональные возможности вызываемого командлета в разрабатываемый двоичный командлет. В этом примере вызывается командлет Get-Process
для получения процессов, выполняемых на локальном компьютере. Вызов командлета Get-Process
эквивалентен следующей команде. Эта команда извлекает все процессы, имена которых начинаются с символов "a" до "t".
Get-Process -Name [a-t]*
Это важно
Можно вызвать только те командлеты, которые являются производными непосредственно от класса System.Management.Automation.Командлет. Невозможно вызвать командлет, производный от класса System.Management.Automation.PSCmdlet. Пример см. в разделе Как вызвать PSCmdlet изPSCmdlet.
Вызов командлета из командлета в командлете
Убедитесь, что сборка, определяющая вызываемый командлет, ссылается и добавляется соответствующая инструкция
using
. В этом примере добавляются следующие пространства имен.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
В методе обработки входных данных командлета создайте новый экземпляр вызываемого командлета. В этом примере создается объект типа Microsoft.PowerShell.Commands.GetProcessCommand вместе со строкой, содержащей аргументы, используемые при вызове командлета.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };
Вызовите метод System.Management.Automation.Командлет.Invoke*, чтобы вызвать командлет
Get-Process
.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Пример
В этом примере командлет Get-Process
вызывается из метода System.Management.Automation.Командлет.BeginProcessing командлета.
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 + "!");
}
}
}
См. также
PowerShell