Command line PowerShell:您能否钩住或拦截外部应用程序的PowerShell执行?
在执行任何外部控制台应用程序(设置一些环境变量)之前,我想做一些整理工作 在我的web研究中,似乎在$host中重写NotifyBeginApplication()就可以做到这一点。不幸的是,我不知道怎么做 这就是我想要做的Command line PowerShell:您能否钩住或拦截外部应用程序的PowerShell执行?,command-line,powershell,user-interface,Command Line,Powershell,User Interface,在执行任何外部控制台应用程序(设置一些环境变量)之前,我想做一些整理工作 在我的web研究中,似乎在$host中重写NotifyBeginApplication()就可以做到这一点。不幸的是,我不知道怎么做 这就是我想要做的 $host = $host | ` Add-Member -force -pass -mem scriptmethod NotifyBeginApplication ` { $env:_startTime = [datetime]::now; $env:_lin
$host = $host | `
Add-Member -force -pass -mem scriptmethod NotifyBeginApplication `
{ $env:_startTime = [datetime]::now; $env:_line = $myInvocation.Line }
这不起作用,因为$host是常量,无论如何它可能是错误的方法
我能够找到的文档表明,在执行任何“遗留”控制台应用程序之前调用此函数,但另一篇博客文章说,它只针对没有I/O重定向的控制台应用程序调用
那么,这是正确的方法吗?如果是,我将如何重写该函数
如果没有,如何做到这一点
我所看到的唯一可行的替代方案是完全实现一个定制PSHost。对于现有可用的源代码,这似乎是可能的,但超出了我想要尝试的范围。我也同意您(不幸)的结论,即您需要创建自己的自定义主机来处理此问题
您可以通过脚本很容易地创建额外的运行空间,但在当前运行的主机(默认控制台)中无法访问此方法。我也同意您(不幸)的结论,即您需要创建自己的自定义主机来处理此问题
您可以通过脚本轻松地创建其他运行空间,但在当前运行的主机(默认控制台)中无法访问此方法。如果这是您可以修改的代码,请创建此函数:
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`"
如果这是您无法修改的代码,那么事情将变得复杂。如果这是您可以修改的代码,则创建此函数:
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`"
如果这是您无法修改的代码,那么事情将变得复杂。PowerShell组可能有机会添加一个钩子,以增加默认控制台的实用性,以用于遗留(也称为大多数)应用程序…?我想在这里发布您的建议:除了即使您实现自己的主机并将其传递到运行空间,也不会调用此方法--更不用说,它没有传递任何值,因此,您对它试图运行的进程一无所知。也许PowerShell组有机会添加一个钩子,以增加默认控制台的实用性,以用于遗留(也称为大多数)应用程序…?我想在这里发表您的建议:除了即使您实现自己的主机并将其传递到运行空间,也不会调用此方法--更不用说,它没有传递给它的值,因此您对它试图运行的进程一无所知。是的,包装单个命令是可能的,特别是对于别名,但不幸的是,问题是“包装”所有外部命令。从v2ctp3开始似乎无法完成。当然可以。除了(1)创建您自己的主机或(2)创建您自己的单点代码外,您无权访问任何单点代码以启动进程。:)是的,可以包装单个命令,特别是使用别名,但是,不幸的是,问题是“包装”所有外部命令。从v2ctp3开始似乎无法完成。当然可以。除了(1)创建您自己的主机或(2)创建您自己的单点代码外,您无权访问任何单点代码以启动进程。:)