封面图: Inori Aizawa by Winnetou-AD
给字多不看的:给$PROFILE文件加上一行:
1 | $PSDefaultParameterValues["Invoke-WebRequest:UseBasicParsing"]=[System.Management.Automation.SwitchParameter]::Present |
都怪IE!
Invoke-WebRequest 和 Internet Explorer
忘了是哪个大概是最近的某个版本微软把IE彻底从Win10移除了,结果这么个古董级的东西没了还带来一堆副作用(我Steam url图标没了, Microsoft wcnm)。
Windows Powershell 的 Invoke-WebRequest
Invoke-WebRequest
是 Powershell的一个cmdlet,默认它有三个别名:iwr
、curl
、wget
。把它当wget
用的话,IE没了也无所谓,毕竟输出是写到文件的,但是把它当curl的时候就麻烦了。
1 | ❯ iwr github.com |
iwr
的DOM渲染引擎用的是IE的,确实很有年代感。指定 -UseBasicParsing可以禁用DOM分析.
1 | ❯ iwr github.com -UseBasicParsing |
失败尝试: 为 Invoke-WebRequest -UseBasicParsing 指定别名
每次都加上这个参数未免太繁琐,有这时间还不如开个WSL用curl。所以,要指定一个默认使用此参数的别名。
直接Set会失败
如果直接Set-Alias:
1 | ❯ set-alias iwr 'Invoke-WebRequest -UseBasicParsing' |
所以其实得先删掉这些别名
1 | Del alias:iwr -Force |
Set成功了也不行
以为这样再set
就好了?pwsh就是和人不一样:
1 | set-alias iwr 'Invoke-WebRequest -UseBasicParsing' |
在许多Linux的shell上这是可行的,例如你可以把rm
设为 rm -f
的别名, 因为这些shell是基于文本的
,所以只要最终能拼出一个合法的字符串即可,但是powershell是基于对象的
。这表示,例如Invoke-WebRequest
是一个对象,而-UseBasicParsing
是它的一个属性,因此不能通过拼凑文本来实现。
解决方案:更改cmdlet的默认值
创建SwitchParameter实例
我们需要默认启用UseBasicParsing
这个参数,Powershell 提供了 $PSDefaultParameterValues 变量来让我们指定cmdlet的默认值,这是一个哈希表,格式为:
1 | #创建新表 |
UseBasicParsing
的类型是System.Management.Automation.SwitchParameter
,它的属性IsPresent
确定它是否打开。
首先new一个SwitchParameter
,或者你也可以使用静态属性[System.Management.Automation.SwitchParameter]::Present
1 | ❯ New-Object -TypeName System.Management.Automation.SwitchParameter -ArgumentList true |
添加到配置文件
$PSDefaultParameterValues
如所有变量一样,只在当前会话启用,要在每次开启powershell时都配置好,需要配置PROFILE文件。一般$PROFILE
变量中存储的值就足够了,如果你有特殊需求,可以查看它的几个属性:
说明 | 名称 |
---|---|
当前用户、当前主机 | $PROFILE |
当前用户、当前主机 | $PROFILE.CurrentUserCurrentHost |
当前用户,所有主机 | $PROFILE.CurrentUserAllHosts |
所有用户,当前主机 | $PROFILE.AllUsersCurrentHost |
所有用户、所有主机 | $PROFILE.AllUsersAllHosts |
所以,我们为$PROFILE
指向的文件添加如下内容:
1 | #你的$PROFILE所指向的文件 |
现在,打开新的powershell窗口,大概效果:
1 | 加载个人及系统配置文件用了 563 毫秒。 |
现在,Invoke-WebRequest
将默认调用BasicParsing,我们不需要Internet Explorer !!!
参考文章
Permalink: http://blog.artiga.top/2021/pwsh-iwr-without-ie/
本文采用CC BY-NC-SA 4.0许可
Comments