PowerShell 7.x - قسمت ششم - ایجاد Cmdletها توسط #C
نویسنده: سیروان عفیفی
تاریخ: ۱۴۰۱/۰۸/۲۱ ۱۲:۴۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
mkdir ps_cmdlet_with_csharp && cd "$_" dotnet new classlib dotnet add package PowerShellStandard.Library mv Class1.cs GetHelloCommand.cs
namespace ps_cmdlet_with_csharp;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Get, "Hello")]
public class GetHelloCommand : PSCmdlet
{
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
public string Name { get; set; }
protected override void BeginProcessing()
{
WriteObject("Start processing");
}
protected override void ProcessRecord()
{
WriteObject("Hello " + Name);
}
protected override void EndProcessing()
{
WriteObject("End processing");
}
} using System.Collections.ObjectModel;
using System.Management.Automation.Host;
namespace System.Management.Automation
{
public abstract class PSCmdlet : Cmdlet
{
protected PSCmdlet();
public PSEventManager Events { get; }
public PSHost Host { get; }
public CommandInvocationIntrinsics InvokeCommand { get; }
public ProviderIntrinsics InvokeProvider { get; }
public JobManager JobManager { get; }
public JobRepository JobRepository { get; }
public InvocationInfo MyInvocation { get; }
public PagingParameters PagingParameters { get; }
public string ParameterSetName { get; }
public SessionState SessionState { get; }
public PathInfo CurrentProviderLocation(string providerId);
public Collection<string> GetResolvedProviderPathFromPSPath(string path, out ProviderInfo provider);
public string GetUnresolvedProviderPathFromPSPath(string path);
public object GetVariableValue(string name);
public object GetVariableValue(string name, object defaultValue);
}
} PS /> dotnet build PS /> Import-Module ./bin/Debug/net7.0/ps_cmdlet_with_csharp.dll
PS /> Get-Command -Module ps_cmdlet_with_csharp CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Get-Hello 1.0.0.0 ps_cmdlet_with_csharp
namespace ps_cmdlet_with_csharp;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Get, "Hello")]
public class GetHelloCommand : PSCmdlet
{
// as before
}
[Cmdlet(VerbsCommon.Get, "Greetings")]
public class GetGreetingsCommand : PSCmdlet
{
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
public string Name { get; set; }
protected override void BeginProcessing()
{
WriteObject("Start processing");
}
protected override void ProcessRecord()
{
WriteObject("Greetings " + Name);
}
protected override void EndProcessing()
{
WriteObject("End processing");
}
} Import-Module: Invalid assembly public key.
<Project Sdk="Microsoft.NET.Sdk">
<!-- other tags -->
<ItemGroup>
<Compile Include="./GetHelloCommand.cs" />
</ItemGroup>
</Project> PS /> Get-Command -Module ps_cmdlet_with_csharp CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Get-Greetings 1.0.0.0 ps_cmdlet_with_csharp Cmdlet Get-Hello 1.0.0.0 ps_cmdlet_with_csharp
namespace ps_cmdlet_with_csharp;
using System.Management.Automation;
using System.Net.Http.Headers;
[Cmdlet(VerbsCommon.Push, "SlackMessage")]
[Alias("ssm")]
[OutputType(typeof(string))]
public class SlackMessageCommand : PSCmdlet
{
[Parameter(Mandatory = true)]
[Alias("m")]
public string Message { get; set; }
[Parameter(Mandatory = true)]
[Alias("t")]
[ValidatePattern(@"xoxp-[0-9]{11}-[0-9]{12}-[0-9]{13}-[0-9a-zA-Z]{32}")]
public string Token { get; set; }
[Parameter(Mandatory = true)]
[Alias("cid")]
public string ChannelID { get; set; }
protected async override void ProcessRecord()
{
base.ProcessRecord();
try
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.Token);
var values = new Dictionary<string, string>
{
{ "channel", this.ChannelID },
{ "text", this.Message }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://slack.com/api/chat.postMessage", content);
var responseString = await response.Content.ReadAsStringAsync();
WriteObject("Message sent");
}
catch (Exception ex)
{
WriteObject(ex.Message);
}
}
} PS /> $PROFILE | Get-Member -Type NoteProperty | Select-Object Name, Definitionbject Name, Definition Name Definition ---- ---------- AllUsersAllHosts string AllUsersAllHosts=/usr/local/microsoft/powershell/7/… AllUsersCurrentHost string AllUsersCurrentHost=/usr/local/microsoft/powershell… CurrentUserAllHosts string CurrentUserAllHosts=/Users/sirwanafifi/.config/powe… CurrentUserCurrentHost string CurrentUserCurrentHost=/Users/sirwanafifi/.config/p…
$SlackProjectPath = "/Users/sirwanafifi/Desktop/ps_cmdlet_with_csharp/bin/Debug/net7.0/ps_cmdlet_with_csharp.dll" Import-Module $SlackProjectPath
PS /> Get-Command -Module ps_cmdlet_with_csharp CommandType Name Version Source ----------- ---- ------- ---- Cmdlet Push-SlackMessage 1.0.0.0 ps_…