Load a Custom DLL from PowerShell

One of the amazing features of PowerShell is its amazing reach. You can interact with the file system, the registry, certificate stores, COM, WMI, XML, cmdlets, providers … the list seems to go on forever.

One important extension point is the ability to seamlessly interact with .NET DLLs. These are most commonly shipped in SDKs, and many people have made use of this. For example:

Sharepoint: http://blogs.flexnetconsult.co.uk/colinbyrne/PermaLink,guid,1665700b-e0de-4b8a-bb1c-014d6fbcf2db.aspx
Team Foundation Server: http://netcave.org/PermaLink,guid,f1840c93-fc6f-4673-bdde-0af89add5ab9.aspx
Microsoft Operations Manager: http://mow001.blogspot.com/2006/06/powershell-and-mom-2005.html
When pre-built API DLLs don’t suit your need, you have yet another option — writing your own! If you are comfortable with any of the .NET languages, it is quite simple to compile a DLL and load it into your PowerShell session.

Take, for example, a simple math library. It has a static Sum method, and an instance Product method:

namespace MyMathLib
{
public class Methods
{
public Methods()
{
}

public static int Sum(int a, int b)
{
return a + b;
}

public int Product(int a, int b)
{
return a * b;
}
}
}
Here is everything required to get that working in your PowerShell system:

[C:\temp]

PS:25 > notepad MyMathLib.cs

(…)

[C:\temp]

PS:26 > csc /target:library MyMathLib.cs

Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.42

for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727

Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.

[C:\temp]

PS:27 > [Reflection.Assembly]::LoadFile(“c:\temp\MyMathLib.dll”)

GAC Version Location

— ——- ——–

False v2.0.50727 c:\temp\MyMathLib.dll

[C:\temp]

PS:28 > [MyMathLib.Methods]::Sum(10, 2)

12

[C:\temp]

PS:29 > $mathInstance = new-object MyMathLib.Methods

Suggestion: An alias for New-Object is new

[C:\temp]

PS:30 > $mathInstance.Product(10, 2)

20

本文由IT Farmer的博客创作,欢迎转载并保留对本博的链接。 Tags:

Leave a Reply