为什么 PowerShell 无法识别带引号的参数?

2024-02-24

当您直接调用脚本(在 PowerShell 控制台或 ISE 中)或通过另一个 PowerShell 实例调用脚本时,为什么 PowerShell 对带引号的参数的处理方式有所不同?

这是脚本(TestQuotes.ps1):

param
(
    [string]
    $Config = $null
)

"Config = $Config"

结果如下:

PS D:\Scripts> .\TestQuotes.ps1 -Config "A B C"
Config = A B C
PS D:\Scripts> PowerShell .\TestQuotes.ps1 -Config "A B C"
Config = A
PS D:\Scripts> .\TestQuotes.ps1 -Config 'A B C'
Config = A B C
PS D:\Scripts> PowerShell .\TestQuotes.ps1 -Config 'A B C'
Config = A

有任何想法吗?


根据PowerShell.exe 命令行帮助 https://learn.microsoft.com/en-us/powershell/scripting/components/console/powershell.exe-command-line-help,第一个参数powershell可执行文件是-Command:

PowerShell[.exe]
       [-Command { - | <script-block> [-args <arg-array>]
                     | <string> [<CommandParameters>] } ]
       [-EncodedCommand <Base64EncodedCommand>]
       [-ExecutionPolicy <ExecutionPolicy>]
       [-File <FilePath> [<Args>]]
       [-InputFormat {Text | XML}]
       [-Mta]
       [-NoExit]
       [-NoLogo]
       [-NonInteractive]
       [-NoProfile]
       [-OutputFormat {Text | XML}]
       [-PSConsoleFile <FilePath> | -Version <PowerShell version>]
       [-Sta]
       [-WindowStyle <style>]

PowerShell[.exe] -Help | -? | /?

之后的任何文字-Command作为单个命令行发送到 PowerShell。

...

当值为-Command是一个字符串,Command必须是最后指定的参数,因为命令后键入的任何字符都被解释为命令参数.

子 PowerShell 实例实际收到的内容很容易检查echoargs https://chocolatey.org/packages/echoargs:

PS > echoargs .\TestQuotes.ps1 -Config "A B C"
Arg 0 is <.\TestQuotes.ps1>
Arg 1 is <-Config>
Arg 2 is <A B C>

子实例进一步解析为:

'.\TestQuotes.ps1' '-Config' 'A' 'B' 'C'

这就是你得到“错误”结果的地方:Config = A

如果您指定-File参数,你会得到想要的结果:

PS >  PowerShell -File .\TestQuotes.ps1 -Config 'A B C'
Config = A B C

PS >  PowerShell -Command .\TestQuotes.ps1 -Config 'A B C'
Config = A
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 PowerShell 无法识别带引号的参数? 的相关文章

随机推荐

  • 如何在 Cocoa 中创建字符串的 MD5 哈希值?

    我知道 SHA 1 是首选 但这个项目要求我使用 MD5 include
  • 当对象更新时,更新对该对象的所有引用(对引用的引用)

    我想在java中声明一个对象 就像C 中指向指针的指针一样 让我给你看一个例子 At the application startup Initialize a settings container class Settings settin
  • 加速 Python

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 python 项目 除了简单的代码内优化之外 还有哪些不错的方法可以加速它 Secondly 用python从头开始编写程序时 有哪
  • 将服务从一项活动传递到另一项活动

    如何将服务从一项活动传递到另一项活动 我有一个音乐播放器 Activity1 它显示歌曲列表 当您单击它时 它会启动 Activity1 中的服务 我有一个按钮 用户可以单击该按钮来打开 Activity2 那么我将服务从 Activity
  • 是否可以将 stickylistviewheader 与 crisbanes pulltorefresh 合并?

    我构建了一个应用程序 其中需要 pulltorefresh 和 StickylistHeaders 我已经在应用程序中实现了 pulltorefresh 但无法使其与 StickyListHeaders 一起使用 是否可以合并这两个库 或者
  • 如何避免在回发时从 asp.net 重复输入?

    我有一个从模板表中提取数据的下拉列表 我有一个添加按钮来插入新模板 添加按钮将弹出 jQuery 弹出窗口以插入新值 将有一个保存按钮来保存新数据 On Save Click 我输入新数据并关闭弹出窗口 问题是这样的 当我刷新页面时 页面再
  • 将 C++ lambda 转换为 C 函数

    我正在编写一些包装代码 其中外部库调用 C 函数 使用可变参数模板等 关键点是外部库需要一个 c 函数 这通常没问题 因为这是合法的 LibraryFuncType fn params 虽然我可以轻松地手动完成此操作 但我想使用以下方法自动
  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • 将字符串转换为八进制数的最Pythonic方法

    我希望使用存储在配置文件中的文件掩码来更改文件的权限 由于 os chmod 需要八进制数 因此我需要将字符串转换为八进制数 例如 000 gt 0000 or 0o000 for you python 3 folks 644 gt 064
  • Docker 组成和主机名

    我有一个包含 2 个名为 web 和 db 的服务 容器 的撰写文件 version 2 services web image nodejs latest ports 80 db image mysql latest ports 3306
  • is_null($var) 和 ($var === null) 有什么区别?

    这之间有什么区别吗 if is null var do something 和这个 if var null do something 检查变量是否包含 null 时哪种形式更好 有什么我应该注意的边缘情况吗 我初始化了所有变量 因此不存在的
  • 将模块导入 Pyscript

    当我们编写 Python 代码时 我们通常使用导入的包和模块 例如 我们在编码时可能会这样写 import numpy import requests from bs4 import BeautifulSoup 当我们尝试将 python
  • 在 git 中,如何仅从更改的行中删除 Windows 行结尾?

    有时 当我尝试向开源项目贡献代码时 该项目尚未格式化并且包含 UNIX 和 Window 行结尾 我的 智能 IDE 会以某种方式检测每个文件使用哪种类型的结尾 如果它检测到 Windows 行结尾 那么我的所有更改都将具有 Windows
  • 更改 Sysem.Variants.VarToWideStr 的区域设置格式

    我的应用程序上的第三方组件 FastReports 广泛使用 System Variants VarToWideStr 函数 这很好 只是它忽略了我需要该应用程序使用的区域设置 Example FormatSettings ShortDat
  • Spark 跨接收器的结构化流一致性

    我想在以下情况下更好地理解 Spark 2 2 结构化流的一致性模型 一个来源 Kinesis 从此源向 2 个不同接收器进行 2 次查询 一个用于存档目的的文件接收器 S3 另一个用于处理数据的接收器 数据库或文件 尚未决定 我想了解跨接
  • 覆盖 django 的模型相关管理器

    我如何才能超越关系经理 例如 user entry set django db models fields related RelatedManager 但我需要自己的经理 我尝试这段代码 但这不起作用 class EntryManager
  • 为什么 QObject ::findChildren 返回具有公共基类的子级?

    我使用 QObject 作为复合模式的基类 假设我有一个父类 File 在一个人为的示例中 我向其中添加不同类型的子类 HeaderSection 和 PageSection File HeaderSection 和 PageSection
  • 简单表达式缺少参数类型

    遵循播放 websocket 示例 http www playframework com documentation 2 3 x ScalaWebSockets我遇到了一个奇怪的问题 文档中的以下示例正在运行 Future successf
  • 弹出并刷新视图控制器

    我有三个视图控制器 当我到达第三个视图控制器时 我使用 poptorootviewcontroller 弹出到我的第一个视图控制器 但是当我在第三个视图控制器中使用 popviewcontroller 我想返回到我的第二个视图控制器 时 它
  • 为什么 PowerShell 无法识别带引号的参数?

    当您直接调用脚本 在 PowerShell 控制台或 ISE 中 或通过另一个 PowerShell 实例调用脚本时 为什么 PowerShell 对带引号的参数的处理方式有所不同 这是脚本 TestQuotes ps1 param str