Mar*_* M. 1 powershell parameter-passing args
我有一个从 Windows 快捷方式调用的 PS 脚本。我在上面放了几个文件或目录,它工作得很好。我想添加一些命名参数(我们称它们为:-Param1 和 -Param2),可选的,当然只能从 PowerShell 提示符中使用。
param (
[switch]$CreateShortcut
)
Run Code Online (Sandbox Code Playgroud)
开关参数起作用。
但是,如果我添加一个字符串参数:
param (
[switch]$CreateShortcut,
[string]$Param1
)
Run Code Online (Sandbox Code Playgroud)
当然,当我通过 Windows 快捷方式调用脚本时,它不再起作用: $Param1 接收第一个文件。
有解决办法吗?
谢谢
当您将文件/文件夹拖放到快捷方式文件上时,它们的完整路径将作为单独的未命名参数传递给快捷方式的可执行文件(脚本)。
PowerShell 允许您在单个数组值参数中收集此类未命名参数,方法是将其声明为ValueFromRemainingArguments
:
[CmdletBinding(PositionalBinding=$false)]
param (
[switch] $CreateShortcut,
# Collect all unnamed arguments in this parameter:
[Parameter(ValueFromRemainingArguments)]
[string[]] $FilesOrFolders
)
Run Code Online (Sandbox Code Playgroud)
[CmdletBinding(PositionalBinding=$false)]
确保任何未显式标记Position
属性的参数都必须作为命名参数传递(即参数前面必须带有目标参数的名称,例如-Path foo
)。
[switch]
,因为它们只是隐式命名的,但它允许您支持[switch]
可以通过显式调用(仅)绑定的附加非参数。或者,如果您不需要支持其他预声明的非开关参数,则可以省略 [CmdletBinding(PositionalBinding=$false)]
参数声明并通过自动变量$FilesOrFolders
访问不绑定到预声明参数的任何参数。$args
归档时间: |
|
查看次数: |
1238 次 |
最近记录: |