PowerShell -выполнить блок сценария в определенной области

Я пытаюсь внедрить фреймворк BDD, подобный RSpec/Jasmine, в Powershell (или, по крайней мере, исследовать потенциальные проблемы с его созданием ).

В настоящее время у меня проблемы с реализацией простых функций до/после. Учитывая

$ErrorActionPreference = "Stop"

function describe()
    {
    $aaaa = 0;
    before { $aaaa = 2; };
    after { $aaaa; }
    }

function before( [scriptblock]$sb )
    {
    & $sb
    }

function after( $sb )
    {
    & $sb
    }

describe

вывод равен 0, но я бы хотел, чтобы он был равен 2. Есть ли способ добиться этого в Powershell (, кроме как сделать $aaaa глобальным, обходя родительские области в блоках сценария до тех пор, пока не будет найден $aaaa, сделав $aaaa " объект" и другие грязные хаки:))

В идеале мне бы хотелось, чтобы блок сценария вызывался в какой-то другой области, но я понятия не имею, возможно ли это вообще. Я нашел интересный пример наhttps://connect.microsoft.com/PowerShell/feedback/details/560504/scriptblock-gets-incorrect-parent-scope-in-module(см. обходной путь ), но я не уверен, как он работает и помогает ли он мне каким-либо образом.

ТИА

9
задан mbergal 29 July 2012 в 07:45
поделиться