2017-08-02 119 views
0

cmd中,我可以编写像这样的批处理文件,它将为可执行文件提供别名。使用可空参数包装可执行文件

SuperUtil.bat

call Mine.Library.SuperUtil.exe %* 

所以我可以打电话

SuperUtil -t SomeParam 

这是我的等效

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

然而,当我把它称为不带参数,我得到一个PowerShell的尝试一个错误。

启动过程:无法验证参数'ArgumentList'上的参数。 参数为空,空或参数集合 中的元素包含空值。提供一个不包含任何 空值的集合,然后再次尝试该命令。

我试过以下,但不传递参数,再加上它是相当冗长:

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

所以我想可选的传入参数与否,以探讨在命令行选项。

回答

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 

使脚本容易(但显然还是相当冗长相比批处理文件替代)

+0

它可能的维护是冗长的,但也很清楚。我喜欢!谢谢! – wonea

1

About Automatic Variables

$ ARGS
包含未申报参数和/或参数值传递给函数,脚本或脚本 块的阵列。

因此,检查if ($args.Count -ne 0)而非if ($args -ne $Null)作为自动可变$args始终是一个阵列(永不$Null)。

相关问题