如何在powershell函数中编写以下cmd脚本:
@echo off
C:\bin\command.exe %*
Powershell脚本:
function f{
[CmdletBinding()] Param()
# .. Code? ...
}
答案 0 :(得分:4)
如果要定义param
块并仍然捕获所有参数,则可以定义使用ValueFromRemainingArguments
属性上的Parameter
参数的参数。
function Test-Function {
[CmdletBinding()]
param(
[string] $FirstParameter,
[Parameter(ValueFromRemainingArguments=$true)]
[object[]] $RemainingArguments
)
end {
$PSBoundParameters
}
}
Test-Function first and then the rest go to remaining
# Key Value
# --- -----
# FirstParameter first
# RemainingArguments {and, then, the, rest...}
答案 1 :(得分:3)
使用Param()
定义,您不能拥有未绑定的参数(编辑:除非您定义一个参数来捕获所有未绑定的参数,如他的答案中所指出的Patrick Meinecke) 。传递给函数的所有参数必须在Param()
块中有一个定义,否则PowerShell将抛出InvalidArgument
异常。然后,这些参数列在字典$MyInvocation.BoundParameters
中。
如果没有Param()
定义,函数的所有参数都会列在自动变量$args
中(以及$MyInvocation.UnboundArguments
中)。
答案 2 :(得分:1)
重复的帖子提供了很好的参考,但没有直接回答手头的问题。
将批次与PS进行比较: PShell提供了更多的命令行信息,因为它基于对象。
这个等式可以简化事情。
a = [105 97 245 163 207 134 218 199 160 196 221 154 228 131 180 178 157 151 ...
175 201 183 153 174 154 190 76 101 142 149 200 186 174 199 115 193 167 ...
171 163 87 176 121 120 181 160 194 184 165 145 160 150 181 168 158 208 ...
133 135 172 171 237 170 180 167 176 158 156 229 158 148 150 118 143 141 ...
110 133 123 146 169 158 135 149];
mean = mean(a)
std = std(a)
max = max(a)
min = min(a)
range = range(a)
%*将匹配绑定或未绑定参数。由于您有一个空的参数(),您将使用未绑定。
$MyInvocation.line =
$MyInvocation.InvocationName +
$MyInvocation.MyCommand +
[$MyInvocation.BoundParameters | $MyInvocation.UnboundArguments ]
$MyInvocation.line entire string used to invoke script or
function.
$MyInvocation.InvocationName if present could be & (Call) or . (DotSource)
$MyInvocation.MyCommand Name of the script.
$MyInvocation.BoundParameters Variables in the param () parentheses.
$MyInvocation.UnboundArguments Command-Line variables not in parentheses.
来源
How to get all arguments passed to function (vs. optional only $args)
PowerShell CommandLine帮助about_automatic_variables