繁体   English   中英

Powershell.exe:关于语法的一般问题

[英]Powershell.exe: General Question about the Syntax

如果我通过 cmd 使用以下语法打开 powershell:

powershell "C:\Users\MyUser\Downloads\Myscript.ps1"

这是语法:

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

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

微软文档

我指的是哪个参数
"[-PSConsoleFile <file> | -Version <version>]"吗?
因为在我的示例中,我没有用“-”指定参数,它仍然有效!

它无法从您从链接帮助主题中引用的语法图中推断出来,但是您传递给 PowerShell CLI 的第一个位置(未命名)参数隐式绑定到

  • -Command中的powershell.exe (Windows PowerShell)

  • -File中的pwsh (PowerShell (Core) 7+)

(不幸的是,CLI 的语法图不包含此信息(在cmdlet帮助主题中,它确实包含,尽管它可能不是很明显 - 请参阅此答案);它也没有反映哪些参数是互斥的,例如作为-File-Command 。在撰写本文时,关于位置参数的信息甚至不在 about_PowerShell_exe描述中,而是在about_Pwsh中)

换句话说:

powershell "C:\Users\MyUser\Downloads\Myscript.ps1"

是相同的:

powershell -Command "C:\Users\MyUser\Downloads\Myscript.ps1"
  • 也就是说,脚本路径在第一个命令中按位置传递,即它的目标参数没有像在第二个命令中那样明确指定。 另一种看待方式是路径作为未命名参数传递。

  • 位置参数之间的顺序很重要,目标命令必须 (a) 指定每个可以按位置绑定的参数,并且 (b) 指定一个数字,定义所有位置参数之间的相对位置。 (在 PowerShell 代码中,高级函数或脚本(类似 cmdlet)将使用诸如[Parameter(Position=0)]之类的参数属性来表达这一点,正如Abraham Zinala 所指出的那样) - 请参阅概念about_Functions_Advanced_Parameters帮助主题)。

  • 在 PowerShell CLI 中,特殊注意事项适用于位置参数

    • -Command-File参数之后的任何参数都被视为传递参数:

      • 使用-File ,它们被传递到指定的.ps1脚本。
      • 使用-Command ,它们构成了正在传递的 PowerShell 源代码的一部分(如果传递了多个参数,它们将分别去除句法"引号并用空格连接)。
    • 因此, -Command-File - 以及任何传递参数 - 应始终放在 CLI 命令行的最后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM