用可空参数包装可执行文件

时间:2017-08-02 08:35:33

标签: powershell

cmd我可以编写一个类似的批处理文件,它将为可执行文件提供别名。

SuperUtil.bat

call Mine.Library.SuperUtil.exe %*

所以我可以打电话给

SuperUtil -t SomeParam

这是我尝试使用PowerShell等效的

Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args

然而,当我没有参数调用它时,我收到错误。

  

Start-Process:无法验证参数'ArgumentList'的参数。   参数为null,空或参数集合的元素   包含空值。提供不包含任何内容的集合   空值,然后再次尝试该命令。

我已经尝试了以下但是没有传递参数,而且它非常详细:

if ($args -ne $Null)
{
    Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args -Wait
}
else
{
    Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait
}

所以我想选择是否传递参数,以便探索命令行选项。

2 个答案:

答案 0 :(得分:3)

如果要提供可选参数参数,请使用splatting

$params = @{}
if($args){
    $params['ArgumentList'] = $args
}
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait @params

如果$params散列表在调用Start-Process时为空,则只会忽略它。

如果需要,您还可以将其他参数参数压缩到哈希表中:

$params = @{
    FilePath    = 'Mine.Library.SuperUtil.exe'
    NoNewWindow = $true
    Wait        = $true
}
if($args){
    $params['ArgumentList'] = $args
}
Start-Process @params

使脚本的维护变得容易(但与批处理文件替代相比,显然仍然非常冗长)

答案 1 :(得分:1)

阅读About Automatic Variables

  

$ ARGS
包含未声明参数数组和/或传递给函数,脚本或   脚本块。

因此,请检查 if ($args.Count -ne 0) 而不是if ($args -ne $Null),因为自动变量$args始终是一个数组(绝不是$Null)。