我想在执行任何外部控制台应用程序(设置一些环境变量)之前做一些内务管理。
在我的网络研究中,看起来在$ host中重写NotifyBeginApplication()可能会有所帮助。不幸的是,我无法弄清楚如何做到这一点。
这基本上就是我想做的......
$host = $host | `
Add-Member -force -pass -mem scriptmethod NotifyBeginApplication `
{ $env:_startTime = [datetime]::now; $env:_line = $myInvocation.Line }
这不起作用,因为$ host是常量,无论如何它可能是错误的方法。
我能够找到的文档指出在执行任何“遗留”控制台应用程序之前调用此函数,但另一篇博客文章说它仅调用没有I / O重定向的控制台应用程序。 / p>
那么,这是正确的方法吗?如果是这样,我将如何覆盖该函数?
如果没有,怎么办呢?
我见过的唯一可行方法是完全实现自定义PSHost。这似乎可以通过现有的可用源代码实现,但超出了我想要尝试的范围。
答案 0 :(得分:0)
如果这是您可以修改的代码,则创建此功能:
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`"
如果这是您无法修改的代码,那么事情会很复杂。
答案 1 :(得分:-1)
我同意你(不幸)的结论,你需要创建自己的自定义主机来处理这个问题。
您可以通过脚本轻松创建其他运行空间,但在当前运行的主机(默认控制台)中无法访问此方法。