每次从文件资源管理器打开终端时,如何获取 PowerShell 当前位置

巴托斯

我可以使用 Windows 文件资源管理器在任何目录中打开 PowerShell 窗口。我想每次打开一个新的 PowerShell 窗口时都运行一个脚本,并使用它在脚本中打开的当前目录。

使用$profile让我自动执行脚本,但$pwd变量没有用于打开 PowerShell 窗口的目录,但有C:\WINDOWS\system32. 我了解 PowerShell 开始于C:\WINDOWS\system32、运行$profile和下一个与文件资源管理器一起使用的更改位置。当我的脚本从中执行时,如何获取文件资源管理器的当前目录,$profile或者在 PowerShell 窗口打开后可能有另一种方法来自动执行我的脚本?

克莱门特0

注意:下面的答案提供了一个基于Window PowerShell预安装的文件资源管理器快捷菜单命令的解决方案

如果修改这些命令 - 这需要使用管理权限获得注册表项的所有权 - 或创建自定义命令是一个选项,您可以NoWorkingDirectory从以下注册表项(或其自定义副本)中删除该值:

HKEY_CLASSES_ROOT\Directory\shell\Powershell
HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell

这样做将使原始文件夹成为调用 PowerShell之前的工作目录,以便$PROFILE已经看到该工作目录,当您powershell.exe通过文件资源管理器的地址栏提交时也会发生这种情况[1]


Shadowfax在对该问题的评论中提供了一个重要的提示:

当您按住 Shift 然后Open PowerShell window here在文件夹上或在文件资源管理器的窗口背景中调用快捷菜单命令时,powershell.exe最初C:\Windows\System32作为工作目录[1] 启动,但随后被指示使用Set-Location命令更改为原始文件夹作为参数传递;例如,特定命令可能如下所示:

"PowerShell.exe" -noexit -command Set-Location -literalPath 'C:\Users\jdoe'

顺便说一句:此快捷菜单命令的定义方式有缺陷,因为它不适用于碰巧包含'字符的文件夹路径

在装货的时候$PROFILEC:\Windows\System32仍然是影响,因为任何命令传递到-command没有处理,直到的配置文件已被加载。

如果你确实需要知道$PROFILE工作目录是什么是一次对话是开放的,使用以下解决方法:

$workingDir = [Environment]::GetCommandLineArgs()[-1] -replace "'"

[Environment]::GetCommandLineArgs()将调用命令行作为参数(令牌)数组[-1]返回,因此返回最后一个参数,假定为工作目录路径;从结果中-replace "'"删除封闭'...'

但是,为了让您的$PROFILE文件检测(最终)有效的工作目录(位置)而不管 PowerShell 是如何调用的,还需要做更多的工作。

以下是一种相当稳健的方法,但请注意,完全稳健的解决方案会复杂得多

# See if Set-Location was passed and extract the
# -LiteralPath or (possibly implied) -Path argument.
$workingDir = if ([Environment]::CommandLine -match '\b(set-location|cd|chdir\sl)\s+(-(literalpath|lp|path|PSPath)\s+)?(?<path>(?:\\").+?(?:\\")|"""[^"]+|''[^'']+|[^ ]+)') {
    $Matches.path -replace '^(\\"|"""|'')' -replace '\\"$'
  } else { # No Set-Location command passed, use the current dir.
    $PWD.ProviderPath
  }

解决方案的复杂性来自多种因素:

  • Set-Location 有多个别名。

  • 路径可以按位置传递,使用-Path或 使用-LiteralPath或其别名-PSPath

  • 可以使用不同的引用样式 ( \"...\", """...""", '...'),或者路径可以不引用

该命令可能仍然失败:

  • 如果启动命令使用了参数名称的前缀缩写,例如-litfor -LiteralPath

  • 如果后面跟着一个命名参数而不是路径set-location(例如,-PassThru)。

  • 如果字符串set-location嵌入在 PowerShell 最终解析为字符串文字而不是命令的内容中。

  • 如果启动命令作为 Base64 编码的字符串通过-EncodedCommand.


[1]powershell.exe改为在文件资源管理器的地址栏中键入时PowerShell启动之前将当前打开的文件夹设为工作目录,并且不传递更改工作目录的启动命令;在这种情况下,$PROFILE已经看到(最终)有效的工作目录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在当前文件资源管理器目录键盘快捷键(Windows 10)下以管理员身份打开Powershell

来自分类Dev

在资源管理器中使用PowerShell脚本打开文件

来自分类Dev

如何自动在包资源管理器中打开与查看的.java相对应的文件夹位置

来自分类Dev

如何从Visual Studio应用程序打开“文件资源管理器”窗口并设置位置和大小?

来自分类Dev

Windows:通过资源管理器地址栏在当前位置打开第三方终端?

来自分类Dev

如何通过PowerShell或Java在Windows资源管理器中获取“状态”列值

来自分类Dev

如何将PowerShell嵌入资源管理器或类似资源管理器的工具?

来自分类Dev

如何在资源管理器中显示当前文件?

来自分类Dev

在资源管理器中右击时,如何将“使用Powershell打开”更改为“使用命令提示符打开”?

来自分类Dev

管理Azure资源管理器存储Powershell

来自分类Dev

CMDer / ConEmu-资源管理器当前目录位置

来自分类Dev

Powershell脚本列出所有打开的资源管理器窗口

来自分类Dev

如何设置 Windows 文件资源管理器以在地址栏中使用自定义“别名”(如“桌面”或“程序文件”)自动打开位置?

来自分类Dev

使用“开始”->“右键单击”时,Windows Vista中的Windows资源管理器默认打开位置

来自分类Dev

如何从WSL Shell的当前工作目录中打开Windows资源管理器?

来自分类Dev

Visual Studio扩展:在解决方案资源管理器中获取当前所选文件的路径

来自分类Dev

ConEmu-使用当前目录打开资源管理器

来自分类Dev

快捷键再次打开当前资源管理器窗口

来自分类Dev

无法将文件路径直接从Windows资源管理器粘贴到PowerShell

来自分类Dev

为什么在PowerShell和Windows资源管理器中看到不同的文件?

来自分类Dev

作为文件资源管理器扩展工作的 PowerShell 脚本

来自分类Dev

更改通过热键打开的资源管理器的默认位置

来自分类Dev

如何从资源管理器的上下文菜单中使用当前日期重命名文件?

来自分类Dev

如何在Visual Studio中将解决方案资源管理器与当前文件同步?

来自分类Dev

如何将Powershell 7与Windows资源管理器集成?

来自分类Dev

使用文件位置在“ Windows资源管理器”中显示文件

来自分类Dev

如何在Windows 8.1的资源管理器中摆脱“文件夹”和“网络位置”链接?

来自分类Dev

“此处打开PowerShell窗口”文件资源管理器上下文菜单命令以带单引号的文件夹名称分隔(单引号)

来自分类Dev

在命令提示符下工作时,可以在当前路径中打开资源管理器吗?

Related 相关文章

  1. 1

    在当前文件资源管理器目录键盘快捷键(Windows 10)下以管理员身份打开Powershell

  2. 2

    在资源管理器中使用PowerShell脚本打开文件

  3. 3

    如何自动在包资源管理器中打开与查看的.java相对应的文件夹位置

  4. 4

    如何从Visual Studio应用程序打开“文件资源管理器”窗口并设置位置和大小?

  5. 5

    Windows:通过资源管理器地址栏在当前位置打开第三方终端?

  6. 6

    如何通过PowerShell或Java在Windows资源管理器中获取“状态”列值

  7. 7

    如何将PowerShell嵌入资源管理器或类似资源管理器的工具?

  8. 8

    如何在资源管理器中显示当前文件?

  9. 9

    在资源管理器中右击时,如何将“使用Powershell打开”更改为“使用命令提示符打开”?

  10. 10

    管理Azure资源管理器存储Powershell

  11. 11

    CMDer / ConEmu-资源管理器当前目录位置

  12. 12

    Powershell脚本列出所有打开的资源管理器窗口

  13. 13

    如何设置 Windows 文件资源管理器以在地址栏中使用自定义“别名”(如“桌面”或“程序文件”)自动打开位置?

  14. 14

    使用“开始”->“右键单击”时,Windows Vista中的Windows资源管理器默认打开位置

  15. 15

    如何从WSL Shell的当前工作目录中打开Windows资源管理器?

  16. 16

    Visual Studio扩展:在解决方案资源管理器中获取当前所选文件的路径

  17. 17

    ConEmu-使用当前目录打开资源管理器

  18. 18

    快捷键再次打开当前资源管理器窗口

  19. 19

    无法将文件路径直接从Windows资源管理器粘贴到PowerShell

  20. 20

    为什么在PowerShell和Windows资源管理器中看到不同的文件?

  21. 21

    作为文件资源管理器扩展工作的 PowerShell 脚本

  22. 22

    更改通过热键打开的资源管理器的默认位置

  23. 23

    如何从资源管理器的上下文菜单中使用当前日期重命名文件?

  24. 24

    如何在Visual Studio中将解决方案资源管理器与当前文件同步?

  25. 25

    如何将Powershell 7与Windows资源管理器集成?

  26. 26

    使用文件位置在“ Windows资源管理器”中显示文件

  27. 27

    如何在Windows 8.1的资源管理器中摆脱“文件夹”和“网络位置”链接?

  28. 28

    “此处打开PowerShell窗口”文件资源管理器上下文菜单命令以带单引号的文件夹名称分隔(单引号)

  29. 29

    在命令提示符下工作时,可以在当前路径中打开资源管理器吗?

热门标签

归档