Dynamic Binary Modules Follow Up
August 9, 2009 at 10:08 PM
—
Andy Schneider
There was a very interesting post over on the PowerShell team blog on Dynamic Binary Modules where Nigel Sharples describes how to run a cmdlet on a remote machine if you have the source code to the cmdlet and don’t want to deal with any intermediate assembly files to clean up.
I went and tried to do this straight away on my local machine without the remoting bit. I copied some cmdlet source code from MSDN. As a Systems Engineer, I haven’t written many compiled cmdlets in C# but I have edited a few for my liking and written one or two when script just wouldn’t cut it. One thing I have learned is that you always need a Snapin to register your cmdlet. So you have your namespace with a class for your snapin and then a class for each cmdlet that you create.
The bottom line here is that with dynamic modules you don’t need to create a Snapin class for your cmdlet. The only other tweak is that I used the –language parameter on Add-Type to specify CSharpVersion3 so I could use automatic properties and not have to explicitly write the getter and setter for the parameter “Name.”
[string]$code = @"
using System.Management.Automation;
namespace SendGreetingDemo1
{
[Cmdlet(VerbsCommunications.Send, "Greeting")]
public class SendGreetingCommand : Cmdlet
{
[Parameter(Mandatory=true,Position=0)]
public string Name {get;set;}
protected override void ProcessRecord()
{
WriteObject("Hello " + Name + "!");
}
}
}
"@
$assembly = (Add-Type -TypeDefinition $code `
-Language CSharpVersion3 `
-passthru ).Assembly
$assembly | Import-Module
21671c52-60de-47cc-a689-af1b7f2e7a1c|0|.0
Posted in:
Tags: