PowerShell 不执行位于当前目录的命令的原因

发现网上的文章里对这个问题大多只是简单给出解决方案,或重启或直接使用 .\ 访问命令,没几个深入探讨这个行为背后的原因,蛮写一下好了
知道怎么做只会变成无情的 CV 机器人,知道为什么才能让脑子动起来锻炼编程思维 :D

问题描述

使用 PowerShell 执行位于当前目录的命令时会报错:

找不到命令 xxx,但它确实存在于当前位置。默认情况下,Windows PowerShell 不会 从当前位置加载命令。如果信任此命令,请改为键入“.\xxx”。有关详细信息,请参阅 "get-help about_Command_Precedence"。

原因

PowerShell 默认不会从当前位置加载命令,这是基于安全性考虑的一种策略

禁止直接通过运行命令的方式加载当前工作目录的命令,可以有效地防止潜在的安全威胁。原因如下:

  1. 在执行命令时,如果 PowerShell 自动加载当前位置的命令,那么在一个有恶意意图的环境中,攻击者可以将恶意脚本或可执行文件放置在与合法命令同名的位置上,从而导致用户在不知情的情况下执行命令时,意外加载恶意代码,使得系统受到攻击

    通过禁止默认加载当前位置的命令,可以减少这种潜在的安全风险

  2. PowerShell 规定,要加载当前位置的命令,用户需要明确指定 .\ 前缀

    这种显式性的设计能够使用户显式认知到他们正在从当前位置加载命令,并且提醒他们对于来自未知来源的脚本或可执行文件要谨慎行事

    这种显式指明.\前缀的方式鼓励用户更加审慎地处理当前位置的命令,从而尽可能避免不必要的安全风险

解决方法

  1. 如果是常用命令,建议将其注册到系统环境变量中,在其他位置运行
  2. 如果是临时需要执行的命令,请根据报错回显加上./前缀,如:./cmd
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值