【问题标题】:How can I solve this I suppose a MS PowerShell parsing error?我该如何解决这个问题,我想是 MS PowerShell 解析错误?
【发布时间】:2020-11-17 21:11:37
【问题描述】:

当我使用下面的命令 [1] 来设置我的配置变量 MONGODB_URI 时,它给出了一个错误 [2]。 我正在使用 Windows PowerShell。

[1] >> heroku config:set MONGODB_URI='mongodb+srv://myprojectname:<mypassword>@cluster0.rkitj.mongodb.net/<myusername>?retryWrites=true&w=majority'

[2] 系统找不到指定的文件。 'w' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

注意:myprojectnamemypasswordmyusername 是实际值的占位符。

【问题讨论】:

    标签: mongodb powershell heroku syntax parameter-passing


    【解决方案1】:

    看起来heroku CLI 入口点是一个批处理文件,正如错误消息的措辞所暗示的那样,这是cmd.exe 的,而不是PowerShell 的。

    PowerShell 在合成要在后台使用的实际命令行时没有考虑批处理文件 (cmd.exe) 的特殊解析需求,这涉及到重新引用,使用 double 仅引用,并且仅在 PowerShell 认为 需要引用时

    在这种情况下,PowerShell not 使用双引号(因为该值不包含 空格),这会中断批处理文件调用。

    您有以下选择:

    • 您可以使用嵌入引用,以确保您的MONGODB_URI=...键值对的值部分以双引号传递;注意'"..."' 引用:

      heroku config:set MONGODB_URI='"mongodb+srv://myprojectname:<mypassword>@cluster0.rkitj.mongodb.net/<myusername>?retryWrites=true&w=majority"'
      
      • 警告:这不应该起作用,目前仅起作用,因为 PowerShell 从 PowerShell 7.1 开始从根本上破坏了向外部程序传递参数 - 请参阅 this answer。如果这个问题得到解决,上述内容将会中断。
    • 如果你的命令行不涉及任何PowerShell变量和表达式,你可以使用--%stop-parsing symbol,然而,总的来说,它有很多限制(参见this answer);本质上,--% 之后的所有内容都逐字 复制到目标命令行,除了扩展cmd.exe 样式的环境变量引用(例如%USERNAME%):

      heroku config:set --% MONGODB_URI="mongodb+srv://myprojectname:<mypassword>@cluster0.rkitj.mongodb.net/<myusername>?retryWrites=true&w=majority"
      
    • 如果你愿意安装一个模块,你可以使用 PSv3+ Native module 中的ie 功能(使用@中的Install-Module Native 安装987654325@ 在 PSv5+ 中),它在内部补偿了 PowerShell 的所有参数传递和 cmd.exe 的参数解析怪癖(它以向前兼容的方式实现,因此 PowerShell 本身应该得到已修复,该函数将简单地服从 PowerShell);这样,您可以只专注于满足 PowerShell 的语法要求,而让ie 处理其余的:

      # 'ie' prepended to an invocation that uses only PowerShell syntax
      ie heroku config:set MONGODB_URI='mongodb+srv://myprojectname:<mypassword>@cluster0.rkitj.mongodb.net/<myusername>?retryWrites=true&w=majority'
      

    【讨论】:

    • 为什么我点击了这些链接?哇,真是个兔子洞。不过信息量很大。
    • 使用嵌入式引用解决了这个问题。谢谢!
    • 很高兴听到这个消息,@Kimley;我的荣幸。
    猜你喜欢
    • 2015-06-13
    • 2013-11-23
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2020-02-14
    相关资源
    最近更新 更多