PowerShell: можете ли вы перехватить или перехватить выполнение внешних приложений PowerShell? - PullRequest
2 голосов
/ 01 февраля 2009

Я хочу сделать некоторую домашнюю работу перед выполнением любых внешних консольных приложений (настройка некоторых переменных среды).

В моем веб-исследовании похоже, что переопределение NotifyBeginApplication () в $ host может помочь. К сожалению, я не могу понять, как это сделать.

Вот по сути то, что я хочу сделать ...

$host = $host | `
   Add-Member -force -pass -mem scriptmethod NotifyBeginApplication `
   { $env:_startTime = [datetime]::now; $env:_line = $myInvocation.Line }

Это не работает, так как $ host является константой, и в любом случае это может быть неправильный подход.

Документация, которую я смог найти, гласит, что эта функция вызывается до того, как будет выполнено любое "устаревшее" консольное приложение, но в другой записи блога говорится, что она вызывается только для консольных приложений, которые не имеют перенаправления ввода / вывода. 1010 *

Итак, это правильный способ сделать это? Если так, как бы я переопределил функцию?

Если нет, то как это можно сделать?

Единственная альтернатива, которую я видел, может сработать - это полностью реализовать собственный PSHost. Это кажется возможным с существующим доступным исходным кодом, но помимо того, что я хочу попробовать.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2009

Если это код, который вы можете изменить, создайте эту функцию:

Function call {
    ## Set environment here
    $env:FOO = "BAR"
    Invoke-Expression "$args"
}

Теперь передайте свои собственные команды функции вызова. Примеры:

call cmd /c set
call cmd /c dir
call somefunkyexe /blah -ooo aaah -some:`"Funky Argument`"

Если это код, который вы не можете изменить, то все будет сложно.

0 голосов
/ 02 февраля 2009

Я также согласен с вашим (к сожалению) выводом, что вам нужно будет создать свой собственный хост для этого.

Вы можете легко создать дополнительные пространства выполнения с помощью сценариев, но этот метод недоступен на текущем хосте (консоль по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...