How to call C# code in powershell
Powershell Command Add-Type
- usage of
- 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 , 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)