在调用层次为 Pwsh -> Cmd -> Powershell 时的一些注意事项

1. Background

新版 Powershell(Pwsh) 在很多方面都可以代替旧版 Powershell 而存在,然而在某些极为特殊的情况下,我们依旧可能面临到一些“奇特”的问题。

Powershell 由于具备很多强大的功能,所以它自己本身也是可以通过命令行的方式被其他 Shell(例如 Cmd)来进行调用的。但由于一些 Powershell 命令分属于不同的 Powershell 模块内,在某些情况下,命令的执行可能会出现例如:

The 'Get-ExecutionPolicy' command was found in the module 'Microsoft.PowerShell.Security', but the module could not be loaded. For more information, run 'Import-Module Microsoft.PowerShell.Security'.

的执行报错。

2. Reason

这种情况一般发生于调用层级关系为“Pwsh -> Cmd -> Powershell”的时候。

在 Windows 平台上,众多的编程程序调用命令行的方式均为通过 Cmd 来进行,例如 Python、Perl 等。若我们通过 Pwsh 来调用这些编写好的 Python、Perl 等程序,且我们在 Python、Perl 程序内调用了 powershell 相关的命令,这便达成了“Pwsh -> Cmd -> Powershell”的调用链。在这种情况下,Pwsh 的 module path 会被传递给 Powershell,导致了问题的出现。

3. Solve

解决办法也很简单,要么在编写 Python、Perl 等程序时,显式调用 Pwsh 而非 Powershell,要么在调用 Powershell 前,手动将 module path 进行重置(set PSModulePath=),例如:

set PSModulePath= && powershell Get-ExecutionPolicy

References

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值