当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 将文件发送到浏览器

作者:精品下载站 日期:2024-12-14 07:51:51 浏览:18 分类:玩电脑

使用 PowerShell 将文件发送到浏览器


去年,我更多地使用 Markdown 文件,尤其是作为 Platyps 模块的一部分。尽管我有一个 Markdown 编辑器,并且也可以在 VS Code 中预览文件,但有时我想在带有 Markdown 查看器插件的浏览器中查看该文件。或者我可能想在浏览器中看到其他内容。我一直在粘贴文件路径并将其粘贴到浏览器中,但我当然意识到我应该对此有所了解并编写一个 PowerShell 函数以使这变得更容易。浏览器外就这样诞生了。尽管事实证明这比我预期的要棘手一些,因为涉及到注册表。

我本可以简单地在函数中硬编码 Firefox(我的默认浏览器)的路径,但决定以编程方式获取计算机的默认 Web 浏览器。我正在运行 Windows 10 Fall Creator’s Update,因此无法保证我的注册表相关代码能够在 Windows 7 或 8.1 上运行。或者甚至是 Windows 10 的早期版本。经过大量挖掘和互联网搜索后,我想出了这种确定默认浏览器的方法。

我需要查询这个注册表项。

$reg = Get-item -path HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice

[玩转系统] 使用 PowerShell 将文件发送到浏览器

ProgID 指向我的默认浏览器。

$ProgId = $reg.GetValue("ProgID")

现在是棘手的部分。我需要回溯这个 progid 以找到与打开浏览器相关的命令行。

(get-itemproperty -path  "HKLM:\SOFTWARE\Classes$ProgID\shell\open\command" -name "(default)").'(default)'

[玩转系统] 使用 PowerShell 将文件发送到浏览器

这很有用,因为至少对于 Firefox,此命令将在我的浏览器的打开实例中打开新选项卡。 Chrome 的测试也是如此。 Internet Explorer 有点难以预测,而 Microsoft Edge 则生活在自己的世界中。事实上,在 Microsoft Edge 中,ProgID 值将以“Appx”开头,因此如果是这种情况,我会像这样打开浏览器:

start microsoft-edge:$uri

替换我调整后的 uri 文件路径。 Edge 的一件事是它想要启动关联的应用程序,而不是在 Edge 本身中打开文件。如果 Edge 是您选择的浏览器,我的功能可能不会很有用。

大多数命令表达式都包含 %1 来指示路径。所以我需要做的就是将文件路径转换为更适合浏览器的路径。

$filename = (Convert-Path -path $Fullname).Replace('\','/')
  $uri = "file:///$filename"

然后将其插入到表达式中代替%1。从技术上讲,我不必转换路径,因为浏览器似乎可以很好地处理本机 Windows 路径。为了启动该进程,我使用正则表达式来拆分命令,以便我可以获得 .exe 部分并假设命令的其余部分是参数。

[regex]$rx = '^.*\.exe"'
    $app = $rx.match($cmd).value
    $arg = $rx.split($cmd) | where {$_}
    start-process -FilePath $app -ArgumentList $arg

这就是全部了。现在我可以运行如下 PowerShell 命令:

[玩转系统] 使用 PowerShell 将文件发送到浏览器

并在 Firefox 中打开文件。

[玩转系统] 使用 PowerShell 将文件发送到浏览器

该函数发布在 GitHub 上。

https://gist.github.com/jdhitsolutions/325ca7ffec66b71c63f473b2e1316364

如果您有问题或建议,请在页面上发布问题。

希望您度过愉快的一周并使用 PowerShell 取得很多成果。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯