我正在批处理脚本并通过Java传递由逗号分隔的5个参数。 PS 4.0接受没有""。
的参数[CmdletBinding()]
Param (
[Parameter(Position = 0)]
[string[]] $inpParms = $(throw 'Failure : This is required.')
)
我像
一样调用脚本myScript.ps1 user,pwd,Server Name, DLName,Action
由于"服务器名称"中的空格而导致错误。抛出反映参数的错误:
A positional parameter cannot be found that accepts argument 'System.Object[]'. At line:1 char:1 + .\myScript.ps1 user,pwd,Server Name, DLName,Create + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [ExchangeDL.ps1], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,ExchangeDL.ps1
有没有办法捕获此错误,因此我不会在日志中吐出敏感信息?
答案 0 :(得分:2)
虽然您不必引用其中没有shell元字符的参数,但空格 是元字符,因此您有两种选择:
`
- 单独引用元字符::
./myScript.ps1 user, pwd, Server` Name, DLName, Create
或者使用"..."
(插值)或'...'
(文字)根据需要包含整个参数:
./myScript.ps1 user, pwd, 'Server Name', DLName, Create
但是,通常情况下,如果您定义单个参数而不是单个数组,则脚本将更易于维护。
如果您想捕获不正确的调用尝试,请使用Try / Catch
语句:
Try {
./myScript.ps1 user, pwd, Server Name, DLName, Action
} Catch {
Throw "Invocation of ./myScript.ps1 failed."
}
通过不使用语句终止错误中的信息,$_
语句中生成的错误调用(Catch
块中的Throw
可访问),原始命令行为没有泄露。