Get closure with GetNewClosure

Have you ever created scriptblocks on the fly, say in a foreach loop, and they totally mess up because they all have the same value? This is something sort of advanced, and typically used when you’re proxying an object. The most basic example would be, taken from ( function add([int]$x) { return { param([int]$y) return… Read more

Tied Variables in PowerShell

With Add-Type and $executioncontext you can add special varibles that have tied values. I made $random, and $now add-type @”using System;using System.Management.Automation;public class RandomVariable : PSVariable{Random r;public RandomVariable ()  : base(“Random”, 0, ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope)  {r = new Random();}     public override object Value        {            get            {            return  r.Next();            }        }}“@$executioncontext.SessionState.PSVariable.Set((new-object RandomVariable))add-type @”using System;using System.Management.Automation;public class… Read more

Creating arbitrary delegates from scriptblocks in PowerShell…

People have been asking about creating arbitrary delegates out of scriptblocks. As Jeffrey has mentioned, this isn’t directly supported in V1.0 of PowerShell. It is, however, possible to do it using dynamic methods and the CreateDelegate call. Here’s a script (also attached) that will do it. I haven’t tested this very much so it may… Read more

Casting a scriptblock to an arbitrary delegate signature

Arild asked the following in!E99F8B43533149B0!140.entry?_c%3dBlogPart : PSMDTAG:FAQ: Delegates – how to cast a scriptblock to an arbitrary delegate signature? ANSWER – You can’t in V1.0. In version 1.0 Windows PowerShell only supports casting scriptblocks to delegates with the signature: void Method(Object Sender, object e) For instance, here is a WinForms script which uses a scriptblock delegate when a… Read more