[英]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.