【问题标题】:Can we trap all commands and modify them before they are passed to powershell?我们可以在将所有命令传递给 powershell 之前捕获并修改它们吗?
【发布时间】:2015-07-06 12:59:54
【问题描述】:

我想扩展 powershell,使其支持更广泛的命令,包括支持运行与系统中的可执行名称匹配的命令。我知道许多编写脚本的人实现了有助于从系统路径或注册表运行应用程序的脚本。例如,这里有一个类似的想法:http://www.codeproject.com/Articles/224166/bash-like-prompt-in-PowerShell-and-app-run 我问的更多。我只想输入程序的名称,它会调用程序而无需额外输入(甚至不是额外脚本的别名)

大致上,我想添加对,

  • 所有运行命令。例如,

    PS> 记事本++

    PS > 铬

我知道“启动 chrome”会起作用。但并非所有应用程序都能以这种方式工作。 例如,如果 chrome 是命令,我会在它之前添加一个“开始”。如果该命令与其他可执行文件匹配。我会发送 & "\path\to\executable"

此外,我想摆脱从命令开始。我还想添加以下功能,

  • 支持对数、幂、基数转换等的一些基本数学语法
  • 一些必要的工具(数学和其他二进制必要的 默认安装的可执行二进制文件)

现在是 2015 年。命令提示符和 shell 仍然如此愚蠢。因此,我将编写一个自定义 shell。在重新发明轮子之前,我想确保使用 powershell 扩展命令已经不可能。

我需要访问所有发送到 powershell 执行的命令,并在它们被 powershell 执行之前对其进行修改。

【问题讨论】:

  • 只向 $env:PATH 或 App Paths 添加条目有什么问题?
  • 个人感觉。我不喜欢在路径中添加数百个位置。我认为这在 Windows 中不是一种有效的方式。除此之外,还不止这些。请再次阅读问题。
  • 环境变量路径有限制。也考虑一下。投反对票的人是否愿意发表评论?谢谢。
  • 我认为这就是 Nathan 提到 App Paths 的原因,它是一种可扩展的解决方案。
  • @NathanTuggy, joey 请给出应用路径的使用示例。

标签: windows shell powershell automation


【解决方案1】:

关于您的第一个案例,启动某些可执行文件,see my answer here about why this is happening and how you can deal with it

至于其他东西,我不认为可以添加自己的运算符,但您当然可以编写自己的函数。您还可以使用任何可在 .Net 中使用的类/类型/库,包括您自己编写的类/类型/库。

您甚至可以在字符串中使用Add-Type 和C#(或VB.net?)代码来添加功能。在某个现有的 .Net 库中很可能有一种方法可以做您想做的事情,所以我会先寻找那些。

PowerShell 非常神奇和广泛,就像 shell 一样,因为它背后拥有 .Net 的全部功能。

也许您可以展示一些 [pseudo] 代码示例,说明您希望建议的功能如何工作,然后我们可以发布一些解决方法。

【讨论】:

  • 链接的文章似乎涵盖了 App-Path 支持 OK,但我不确定 OP 实际还需要什么。
  • @briantist,你没有明白我的意思。如果您查看 codeproject 文章,您会看到我之前做过类似的事情。您正在添加我添加 ss 的运行应用程序。我真的很想摆脱它。对于其他建议,我同意你的看法。感谢您的回复。
  • @Atique:不,他们是别名。根本不需要额外输入。
  • @Atique:你必须输入something,当然,但由于我们还没有读心技术,这是不可避免的。您不必键入的不仅仅是可执行文件的名称,别名为从应用程序路径中获取的相应条目。
  • @Atique:不,它是针对那个特定的可执行文件的。第一个 sn-p 的代码不难阅读:它循环并添加对应于它可以找到的每个命令的别名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2012-05-09
  • 2013-03-04
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多