笔记:
这个答案显示了如何转义/引用@字符。正确地在 PowerShell 的通常解析规则的上下文中。
如果您的命令行仅包含逐字参数- 即,仅包含文字标记,而不是 PowerShell变量引用(例如,$file)或表达式(例如,($dir + '\script.ps1')) - 您也可以在传递参数s之前放置停止解析符号--%,如显示在Wasif Hasan 的回答中;请注意,cmd.exe-style 变量引用,例如%FOO%仍然扩展,但是。
@是PowerShell中的元字符(具有句法含义的字符[1]),因此为了将其逐字传递给您,az您必须引用整个参数或单独`转义@:
使用文字脚本文件名:
# Either: `-escape the @
az ... --scripts `@script.ps1
#`# Or: quote the whole argument
# Use '...' for a literal argument.
az ... --scripts '@script.ps1'
将脚本文件名存储在变量中,$file:
# Either: `-escape the @
az ... --scripts `@$file
#`# Or: quote the whole argument
# Use "..." for an argument with variable references, i.e. an expandable string
az ... --scripts "@$file"
注意:您可以仅在可变情况下逃脱@$file,但鉴于这不适用于任何字符。除了$遵循之外@,最好养成总是逐字引用/转义的习惯@。
[1]@有几种句法用途,具体用途取决于接下来出现的字符。在您的情况下,@in@script.ps1被解释为带有名为 的变量的splatting 运算符script,该.ps1部分被解释为尝试访问以ps1该变量命名的属性 - 因此出现错误消息。