在$PROFILE里写函数,实现控制powershell的启动行为(WindowsTerminal)

为什么要这样?

windows terminal可以说是win环境下最好用的终端仿真程序了,丰富的主题,使用GPU加速,完美兼容power shell的各种特性,并且可以通过编辑settings.json来获得灵活的自定义体验。
我比较喜欢的一套配色

配合ohmyposh主题,养眼又好用
1

问题

我平时有多开虚拟机的需求,电脑上hyper-v、vmware、docker、wsl全装了,一部分是开发环境,另一些是网安玩的靶场,经常在多个虚拟机界面切换是很麻烦的,于是了解的小伙伴们都知道,我们平时更多是用xshell、finnalShell等ssh软件连接使用。于是有一天我突发奇想,既然wt的功能如此强大了,为啥非要用其他的远程软件呢?于是就萌发了在wt 中配置ssh的想法
2
大概想要实现的效果,每个标签都是ssh连接到对应系统

然而当我想要着手实现这个功能时,wt的配置文件似乎有些不够用了:
抛开微软在json里负责外观的键值,剩下最关键的一条无非是这句

"commandline": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -nologo -NoExit"

通过 pwsh.exe --help 指令,我们可以看到有一个 -Command参数是用来执行命令的

Executes the specified commands (and any parameters) as though they
were typed at the PowerShell command prompt, and then exits, unless
the NoExit parameter is specified.

于是我尝试直接在后面跟上 "-Command 'ssh kali@192.168.2.2 ’ " 之类的参数,发现这样是不行的。终端只能打印出这句话,即使跟上&运行符号也没用。正当一筹莫展时,后面这句给了我灵感:

The Command parameter only accepts a script block for execution when
it can recognize the value passed to Command as a ScriptBlock type.

也就是说powshell内置的cmdlet、function 等等是可以执行的!于是我立马想到ohmyposh插件就是提前在全局文件里定义并加载主题的(这就是为什么装了美化后打开会有启动延迟…)于是通过这个线索,我就找到了所谓的全局配置文件

PowerShell 配置文件是在 PowerShell 启动时运行的脚本。 可以使用配置文件作为启动脚本来自定义环境。 可以添加命令、别名、函数、变量、模块、PowerShell 驱动器等。 还可以将其他特定于会话的元素添加到配置文件中,以便在每个会话中都可用,而无需导入或重新创建。

参考 http://防和谐learn.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Core/about/about_profiles?view=powershell-5.1

虽然有点复杂,但里面说的很清楚。总而言之我们就找到了$PROFILE这个关键角色,然后各位就可以脑洞大开地编辑自己想要的函数功能咯~

方案

我的一种拙劣的实现,可以参考 ORZ

# ------ My function BEGIN ------ #
function Use-ConfigDeafult {
    param (
        $StartValue
    )

switch ($StartValue) {
    1 {
        oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\catppuccin.omp.json" | Invoke-Expression
        Import-Module posh-git
        # 引入 ps-read-line
        Import-Module PSReadLine
        # 设置预测文本来源为历史记录
        Set-PSReadLineOption -PredictionSource History
        # 每次回溯输入历史,光标定位于输入内容末尾
        Set-PSReadLineOption -HistorySearchCursorMovesToEnd
        # 设置 Tab 为菜单补全和 Intellisense
        Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete
        # 设置 Ctrl+d 为退出 PowerShell
        Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit
     }

     2 {
       #去掉oh-my-posh,加快速度
        Invoke-Expression (&starship init powershell)
       #ssh连接虚拟机
        $cmd = "ssh kali@192.168.2.2"

        Import-Module PSReadLine
        Set-PSReadLineOption -PredictionSource History
        Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

        Invoke-Expression ($cmd)
     }

    Default {}

# ------ Set Hot-keys END ------ #
    }
}

像我这样搞一下后,就可以用-Command参数运行任何想要的函数了

"commandline": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -nologo -NoExit -Command Use-ConfigDeafult(1)" 

作者:登上明星 B站:a_Walk_in_Cyber

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登上明星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值