首页 > 解决方案 > 使用 pwd 变量在 powershell 启动时运行命令

问题描述

当您在文件资源管理器中时,您可以单击File > Open Windows Powershell(或其在快速访问工具栏中的图标)以在文件资源管理器所在的目录中启动 Powershell 的实例。然后我想在此目录中自动运行一个简单的命令并在完成后关闭 Powershell 窗口。

我曾尝试将我的命令添加到我的 Powershell 配置文件中,但它在设置路径变量之前执行并且它运行时$pwd等于C:\Users\MyUsername(我的主目录)或C:\WINDOWS\system32(似乎是某种竞争条件,不知道为什么这样做或其他)。据我所知,这是因为文件资源管理器“在 powershell 中打开按钮”打开了 powershell,然后 cd 到了我在文件资源管理器中所在的目录。因此,当 profile.ps1 运行时,它使用它知道的唯一目录,因为 cd 调用尚未进行。这类似于start powershell.exe在 cmd vs中运行命令start powershell.exe -command "cd 'C:\wherever'"。前者正确运行我的配置文件命令,而后者使用 cmd 的当前目录而不是C:\wherever.

因此,显然在$pwd从 cmd 打开它并从文件资源管理器打开它的情况下,该变量是在不同时间分配的。有什么方法可以将配置文件中的命令的执行延迟到 shell 完全加载之后?简单地休眠脚本并没有帮助。

或者,如果有人知道如何编辑注册表以便我可以更改单击的行为File > Open Windows Powershell(因为它必须有权访问存储当前目录的某个变量,并且我假设它以该变量作为参数调用 Powershell 可执行文件 cd'd to),那也可以。

再说一次,我可能File > Open Windows Powershell对 Powershell 实例化过程的工作方式和工作方式非常天真。

非常感谢任何帮助,谢谢!

标签: powershellregistry

解决方案


找到了一种更清洁、更快捷的方法来做到这一点。我所要做的就是将我的个人资料设置成这样,不需要任何任务或第二个 powershell 实例

function Prompt
{
    & C:\Program` Files\MyProgram\MyProgram.exe "$pwd"
    stop-process -Id $PID
}

推荐阅读