Belešku
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da se prijavite ili da promenite direktorijume.
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da promenite direktorijume.
This example shows how to invoke a script based cmdlet or binary cmdlet inheriting from
[System.Management.Automation.PSCmdlet] from within a binary cmdlet. In this example, the new
cmdlet Get-ClipboardReverse calls Get-Clipboard to get the contents of the clipboard. The
Get-ClipboardReverse reverses the order of the characters and returns the reversed string.
Note
The [PSCmdlet] class differs from the [Cmdlet] class. [PSCmdlet] implementations use
runspace context information so you must invoke another cmdlet using the PowerShell pipeline API.
In [Cmdlet] implementations you can call the cmdlet's .NET API directly. For an example, see
How to invoke a Cmdlet from within a Cmdlet.
To invoke a cmdlet from within a PSCmdlet
Ensure that the namespace for the
[System.Management.Automation.PowerShell]API is referenced. In this example, the following namespaces are added.using System.Management.Automation; // PowerShell assembly. using System.Text;To invoke a command from within another binary cmdlet you must use the
[PowerShell]API to construct a new pipeline and add the cmdlet to be invoked. Call the System.Management.Automation.PowerShell.Invoke<T>() method to invoke the pipeline.using var ps = PowerShell.Create(RunspaceMode.CurrentRunspace); ps.AddCommand("Get-Clipboard").AddParameter("Raw"); var output = ps.Invoke<string>();
Example
To invoke a script based cmdlet or binary cmdlet inheriting from [PSCmdlet] you must build a
PowerShell pipeline with the command and parameters you want to execute, then invoke the pipeline.
using System;
using System.Management.Automation; // PowerShell assembly.
using System.Text;
namespace ClipboardReverse
{
[Cmdlet(VerbsCommon.Get,"ClipboardReverse")]
[OutputType(typeof(string))]
public class ClipboardReverse : PSCmdlet
{
protected override void EndProcessing()
{
using var ps = PowerShell.Create(RunspaceMode.CurrentRunspace);
ps.AddCommand("Get-Clipboard").AddParameter("Raw");
var output = ps.Invoke<string>();
if (ps.HadErrors)
{
WriteError(new ErrorRecord(ps.Streams.Error[0].Exception,
"Get-Clipboard Error", ErrorCategory.NotSpecified, null));
}
else
{
var sb = new StringBuilder();
foreach (var text in output)
{
sb.Append(text);
}
var reversed = sb.ToString().ToCharArray();
Array.Reverse(reversed);
WriteObject(new string(reversed));
}
}
}
}