Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Contoh ini menunjukkan cara memanggil cmdlet biner yang berasal dari [System.Management.Automation.Cmdlet]
langsung dari dalam cmdlet biner lain, yang memungkinkan Anda menambahkan fungsionalitas cmdlet yang dipanggil ke cmdlet biner yang Anda kembangkan. Dalam contoh ini, cmdlet Get-Process
dipanggil untuk mendapatkan proses yang berjalan di komputer lokal. Panggilan ke cmdlet Get-Process
setara dengan perintah berikut. Perintah ini mengambil semua proses yang namanya dimulai dengan karakter "a" hingga "t".
Get-Process -Name [a-t]*
Penting
Anda hanya dapat memanggil cmdlet yang berasal langsung dari kelas System.Management.Automation.Cmdlet. Anda tidak dapat memanggil cmdlet yang berasal dari kelas System.Management.Automation.PSCmdlet. Misalnya, lihat Cara memanggil PSCmdlet dari dalam PSCmdlet.
Untuk memanggil cmdlet dari dalam cmdlet
Pastikan bahwa rakitan yang menentukan cmdlet yang akan dipanggil direferensikan dan bahwa pernyataan
using
yang sesuai ditambahkan. Dalam contoh ini, namespace berikut ditambahkan.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
Dalam metode pemrosesan input cmdlet, buat instans baru cmdlet yang akan dipanggil. Dalam contoh ini, objek jenis Microsoft.PowerShell.Commands.GetProcessCommand dibuat bersama dengan string yang berisi argumen yang digunakan saat cmdlet dipanggil.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };
Panggil metode System.Management.Automation.Cmdlet.Invoke* untuk memanggil cmdlet
Get-Process
.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Contoh
Dalam contoh ini, cmdlet Get-Process
dipanggil dari dalam metode System.Management.Automation.Cmdlet.BeginProcessing 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 + "!");
}
}
}