How to call C# code in powershell
Powershell Command Add-Type
- usage of Add-Type
- we use Add-Type -TypeDefinition $code. About C# Code, we should wrap it with a class.we put our sub class, struct,method,in this class.
- Sample code
$Code = @'
using System.Runtime.InteropServices;
using System.Drawing;
public class GetCursor
{
public struct POINT
{
public int X;
public int Y;
public static implicit operator Point(POINT point)
{
return new Point(point.X, point.Y);
}
};
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
public static Point GetCursorPosition()
{
POINT lpPoint;
GetCursorPos(out lpPoint);
return lpPoint;
}
}
'@
we call it in powershell
Add-Type -TypeDefinition $Code -ReferencedAssemblies System.Drawing
we call Add-Type by using parameter -memberdefinition
- if we use memberdefinition, parameter, we just expose the function to the powershell session, we don't need to create a class, powershell will auto generate a class for us. In this scenario, we usually, use this way to invoke native windows api. Detail info refer MSDN, Exapmle5, Here is a small code snip.
$CSharpCode=@"
[DllImport("user32.dll")]
public static extern bool BlockInput(bool fBlockIt);
"@
$CS=Add-Type -MemberDefinition $CSharpCode -Name "KeyBoardMouse" -namespace win32Func -PassThru
$res = $CS:BlockInput($true)