带有空格的PS 4.0参数 - 捕获错误

时间:2017-07-24 02:35:47

标签: powershell powershell-v4.0

我正在批处理脚本并通过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

有没有办法捕获此错误,因此我不会在日志中吐出敏感信息?

1 个答案:

答案 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可访问),原始命令行为没有泄露。